分析版本
V9.0.2,Win32
Tags
破解
1.前期信息收集:
1.1.EXEinfo:
先EXEinfo看一下010Editor.exe,这里提一嘴EXEinfo最大只能分析96M的软件,010Editor.exe的大小为46M:

32位、无壳
1.2.确认分析窗口:
双击程序后,弹出下面的界面:

而输入序列号的窗口在tools中的Register内,这个窗口就是我们准备主要分析的窗口。

随便输入一些错误代码会显示如下窗口:

2.定位关键函数:
先将OD打开,将进程附加给OD:

选择附加后既可以看到程序的汇编代码了:

选择OD上方的e键查看该程序的模块列表:

可以看到第一条就是我们的主模块,双击过去,就可以看到主模块的代码了,接着的目标就是确定关键代码了,下面将会通过API断点定位和字符串搜索定位这两种方式来分析如何确认关键代码。
方法一:API断点定位
查看一下模块间的调用:

一堆QT项目,这玩意儿以前没有接触过,下面是根据百度的一个解释:
QT项目介绍到这里不要谎,对于底层来说不管你是用什么高级语言,是用什么函数系统最后调用的还是那些现的API,反正我在软件中输入一个错的用户密码,软件就一定会弹出一个报错窗口,显示之前测试的内容,所以我们直接
windows的API接口结尾的W和A的区别Ctrl+G
到CreateWindowExW
的代码处设置断点。至于为啥是W而不是A看下面page的分析:

设置断点后直接F9运行,在用户名和密码随便输入一点东西,就可以点Check License了。之后会发现程序停在了断点处。下面的思路就是根据函数调用栈结构的特点,我们可以回溯到关键跳转处,点击OD上的k按键查看栈窗口:

可以看到在调用这个API之前还在QT的函数领空里转来转去了很久,直接跳过这些函数查看用户领空的几个地址看有没有关键代码:
先从6FA028开始一个函数一个函数的找:
6FA028:

这一看就不是我们想要找的关键代码,继续看之后的代码,在6FA0C8处,会发现许多可疑的代码:

可以看到其中”
Invalid name or password.
”就是我们输入错误密码时弹出来的字符,可以确定这里就是关键跳转所在的函数。方法二:搜索字符串
和ida一样直接查找字符串就可以跳转的关键代码,前面我们知道了报错信息为”
Invalid name or password.
”那么这里我们直接搜索这串字符:
在弹出的文本字串窗口右击选择查找文本,输入需要搜索的字符串:

然后就可以直接定位到对应位置双击跟随:


这样也可以直接到关键判断所在的函数。
3.找到关键判断:
这里先贴一下关键函数里出现的英文回显:
当我们定位到”
Invalid name or password.
”这一串字符时会发现边上有一个红色箭头它告诉我们这个错误的提示是根据哪个判断跳过来的,我们直接跟着这个箭头定位到对应的判断处:
定位到了这个jnz指令(ZF为0时跳转,ZF标志判断值是否为0),在上面有三个cmp语句,前面两个的cmp跳转的是同一个地方:

可以看到A69588处的cmp来自另一个跳转,继续跟踪到它的原跳转处:

分析这一段汇编代码,其实就是要找的关键跳转,主要注意的是A68456处的地址如果不跳转就是执行下面的输出用户名密码正确的字符串。既然是暴力破解那我们就直接将这里的代码nop掉,或者将jnz改成jz就可以了。
下面我们重新动调实验一下:
在上面随便一个地方下断点,F2重新调试,然后在改变关键跳转的指令为jz

然后直接F9,就可以发现注册成功了:

这时候只需要将文件保存基本的暴力破解就成功了:


