提示:名词解释见文章末尾。
以下所有分析基于对SM32x_I1126量产工具的反汇编逆向分析得出。
一、0042D59B处的函数
该函数是在按下确定按钮时,负责检查用户输入的密码的,该函数的大致工作流程如下(一些不重要的步骤略去):
1、取得用户输入的密码
2、获取配置文件路径(软件所在目录\UFD_MP\Setting.set文件)
3、读取配置文件SECURITY节中名为PwdMode的键值
4、读取配置文件FUNCTION节中名为EnableSuperUserMode的键值,如果为1跳到步骤7,不存在或不等于1继续执行
5、读取配置文件FUNCTION节中名为SpecialSuserUserModePasswprd的键值,不存在则默认为0000
(此处编写该软件的程序员疏忽,误将单词Password写为Passwprd)
6、检查用户输入密码与上面的密码是否相等,相等则返回密码正确,不等返回密码错误,并跳到步骤12
7、如果是打开DebugMode,检查密码是否为22222,相等则返回密码正确,不等返回密码错误,并跳到步骤12
8、如果配置文件中PwdMode的值为0或不存在,则跳到步骤11
9、将PwdMode的值转为二进制,从右至左,共三位,分别表示三个密码“320”、“ ”(两个空格)和“thevast”是否可用(0不可用,1可用)
10、如果输入的密码与上面的任意一个可用密码匹配,则返回密码正确,均不匹配返回密码错误,并跳到步骤12
11、如果输入的密码是“ ”(两个空格)或“320”,返回密码正确,否则返回密码错误,并跳到步骤12
12、关闭对话框,返回结果给调用者。
由上述分析,并结合未经修改时的配置文件,可知默认情况下,软件的设置密码为320或两个空格,调试模式密码为22222。
也许至此大家认为就够了,软件的设置和调试模式都可以使用了,不过我还是继续挖掘了一下,又发现了一个“隐藏功能”——其实要用这个工具,完全没必要总去输入密码!
二、0042D9AF处的函数
该函数是在输入密码的对话框初始化时被调用的,此时密码输入对话框还没有显示出来,那么这个时候它又做了什么呢?follow me!
这个函数的主要处理流程(省略一些无关的步骤):
1、获取配置文件路径(与上一个分析的函数相同)
2、读取配置文件SECURITY节中名为PwdMode的键值
3、如果PwdMode等于“JOHNNYNOPWD”(区分大小写),则直接返回密码正确,并结束对话框!!!
4、PwdMode不等于“JOHNNYNOPWD”时,显示对话框并要求用户输入密码。
很明显,这应该是软件设计者留下的“后门”,方便自己不输入密码也能够使用。顺便由此猜测,软件作者可能名叫John,当然这个就只是猜测了,呵呵~
好了,现在我们打开软件所在目录\UFD_MP\Setting.set文件,并在最后新增两行:
[SECURITY]
PWDMODE=JOHNNYNOPWD
于是再也不用输入烦人的密码了!
名词解释:
1、函数
许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是程序中的函数。
2、反汇编
把目标代码转为汇编代码的过程。
通常,编写程序是利用高级语言如C,Pascal等语言进行编程的,后再经过编译程序生成可以被计算机系统直接执行的执行文件。反汇编即是指将这些执行文件反编译还原成汇编语言或其他高级语言。但通常反编译出来的程序与原程序会存在许多不同,虽然执行效果相同,但程序代码会发生很大的变化,非编程高手很难读懂。(因此我不会在本文中贴出任何反汇编代码)
3、逆向分析
逆向分析技术是指通过分析反汇编代码来理解其代码功能,如各接口的数据结构等,然后用高级语言重新描述这段代码,逆向推出原软件的思路。
4、配置文件
保存程序运行所需的一些设置信息的文件,用户可以通过修改该文件,影响程序的行为。
5、“节”、“键”和“值”
本程序的配置文件使用的是INI文件的标准格式,形如:
[节名称1]
键1=值1
键2=值2
……
(节名和键名均不区分大小写,但键值区分)
本文为MicroAleX原创,首发数码之家论坛,转载请保留此信息。