二、破解
1、打开调试程序
2、打开注册页面
3、在弹出窗口API中下断
4、点击注册按钮
5、逐一进去观察
6、找到正确的授权字符串
7、找到函数头
8、找到计算出EBX的CALL
9、进入函数跟踪分析
10、保存文件
一、工具及软件介绍
- 逆向工具:x64 dbg
- 平台:Win10_1803 x64
- 破解软件:010 Editor v8.0.1 x64
二、破解
注:本次破解为暴力破解,不过网络验证及编写注册机。
1、打开调试程序
使用x64dbg直接打开010 Editor软件,F9使其正常运行
2、打开注册页面
输入任意Name、Password,回到调试器
3、在弹出窗口API中下断
由于010 Editor是QT5编写的界面,所以会触发Windows API中的CreateWindowEx,我们将这个设置为断点
我们将x64dbg切换到符号
标签页,按照图中①、②的方式搜索到user32.dll下的CreateWindow,使用F2键将CreateWindowExA、CreateWindowExW设置为断点。该处断点最终会走的是CreateWindowExW,也就是Unicode窗口函数,这个大家在跟踪的时候就会知道,一般情况下都会设置断点,以保证能够正常断下。
4、点击注册按钮
程序被断下来,这时候我们切换到调用堆栈页
调用的东西还挺多的,其实大部分是QT调取的栈,我们往下找,找到3个用户区的函数栈,现在就是去一个一个看这三个哪个符合要求
5、逐一进去观察
在进入第二个,会发现有很多字符串,其中就会找到弹出用户名、密码错误弹出的字符串
红线部分就是堆栈链,这个不重要
6、找到正确的授权字符串
往上滚动一下,发现了正确授权的英文
继续往上观察,发现只有一个cmp ebx,DB
,这个判断确定了注册成功还是失败
也就是ebx等于0xDB
的时候,会提示注册成功的弹窗,我们先在这个cmp处下断,F9重新运行之后,再次点击注册按钮,这时候右边的FPU
窗口,显示RBX
是0x177
,肯定不等于0XDB
,这个时候可以将jne
改成je
,就能够弹出注册成功的提示窗了,不过这样改动在每次启动的时候都会提示注册,所以这个改动没有实际意义,这时我们需要去改动它的注册验证函数,做到重启之后都判断为注册成功。
7、找到函数头
我们继续往上滚动,找的这个函数的段首,也就是push rbp、push rbx
的地方,设置断点后,重新运行并点击注册按钮,然后使用x64dbg对该函数进行分析
8、找到计算出EBX的CALL
我们观察到该函数下面有很多调用,其中大多数都与QT相关,排除这些找到了5个非QT相关的CALL,这时我们选中cmp ebx, 0xDB
,在回到这些CALL附近
我们发现有2处比较是跳转的cmp ebx, 0xDB
处的,接着向上观察会发现ebx
的赋值处,也就是第5个call
2个跳转处大概是if(esi == 0xe7 || ds:[rcx + 3c] == 0)
,我们根据ebx
赋值处确定了是哪个函数返回的
9、进入函数跟踪分析
我们在第五个CALL处下断,F7跟进去分析一下
在这个函数的结尾我们发现了mov eax, DB
,选中该行找到跳转处
这时,我们发现有2个跳转,第二个就是跳转到DB
赋值的代码处的,第一个跳转是判断是否将113
作为返回值的,我们可以在这两处着手,将这个函数的返回值强制指向DB
作为返回值处
我们将这两处的jne
改成jmp
使其强制跳转到DB
作为返回值处,修改后让程运行起来查看效果
可以看到提示注册成功,自此,修改就结束了
10、保存文件
使用x64dbg 补丁功能保存文件,并替换原始启动文件,重新运行程序,发现不会提示注册了,并且可以注册任意内容