一、工具及软件介绍

  • 逆向工具:x64 dbg
  • 平台:Win10_1803 x64
  • 破解软件:010 Editor v8.0.1 x64

1533605275839

二、破解

注:本次破解为暴力破解,不过网络验证及编写注册机。

1、打开调试程序

  使用x64dbg直接打开010 Editor软件,F9使其正常运行

2、打开注册页面

  输入任意Name、Password,回到调试器

1533606101221

3、在弹出窗口API中下断

  由于010 Editor是QT5编写的界面,所以会触发Windows API中的CreateWindowEx,我们将这个设置为断点

1533606662240

  我们将x64dbg切换到符号标签页,按照图中①、②的方式搜索到user32.dll下的CreateWindow,使用F2键将CreateWindowExA、CreateWindowExW设置为断点。该处断点最终会走的是CreateWindowExW,也就是Unicode窗口函数,这个大家在跟踪的时候就会知道,一般情况下都会设置断点,以保证能够正常断下。

4、点击注册按钮

  程序被断下来,这时候我们切换到调用堆栈页

1533607318362

  调用的东西还挺多的,其实大部分是QT调取的栈,我们往下找,找到3个用户区的函数栈,现在就是去一个一个看这三个哪个符合要求

5、逐一进去观察

  在进入第二个,会发现有很多字符串,其中就会找到弹出用户名、密码错误弹出的字符串

1533608207030

  红线部分就是堆栈链,这个不重要

6、找到正确的授权字符串

  往上滚动一下,发现了正确授权的英文

1533608582237

  继续往上观察,发现只有一个cmp ebx,DB,这个判断确定了注册成功还是失败

也就是ebx等于0xDB的时候,会提示注册成功的弹窗,我们先在这个cmp处下断,F9重新运行之后,再次点击注册按钮,这时候右边的FPU窗口,显示RBX0x177,肯定不等于0XDB,这个时候可以将jne改成je,就能够弹出注册成功的提示窗了,不过这样改动在每次启动的时候都会提示注册,所以这个改动没有实际意义,这时我们需要去改动它的注册验证函数,做到重启之后都判断为注册成功。

7、找到函数头

  我们继续往上滚动,找的这个函数的段首,也就是push rbp、push rbx的地方,设置断点后,重新运行并点击注册按钮,然后使用x64dbg对该函数进行分析

1533610453132

8、找到计算出EBX的CALL

  我们观察到该函数下面有很多调用,其中大多数都与QT相关,排除这些找到了5个非QT相关的CALL,这时我们选中cmp ebx, 0xDB,在回到这些CALL附近

1533628964186

  我们发现有2处比较是跳转的cmp ebx, 0xDB处的,接着向上观察会发现ebx的赋值处,也就是第5个call

1533629716942

  2个跳转处大概是if(esi == 0xe7 || ds:[rcx + 3c] == 0),我们根据ebx赋值处确定了是哪个函数返回的

9、进入函数跟踪分析

  我们在第五个CALL处下断,F7跟进去分析一下

1533630380980

  在这个函数的结尾我们发现了mov eax, DB,选中该行找到跳转处

1533632894490

  这时,我们发现有2个跳转,第二个就是跳转到DB赋值的代码处的,第一个跳转是判断是否将113作为返回值的,我们可以在这两处着手,将这个函数的返回值强制指向DB作为返回值处

1533633610121

  我们将这两处的jne改成jmp使其强制跳转到DB作为返回值处,修改后让程运行起来查看效果

1533633746843

  可以看到提示注册成功,自此,修改就结束了

10、保存文件

  使用x64dbg 补丁功能保存文件,并替换原始启动文件,重新运行程序,发现不会提示注册了,并且可以注册任意内容

1533634276366

posted on 2018-10-30 19:54  PhantomW  阅读(887)  评论(0编辑  收藏  举报