buzhifou01 发表于 2020-1-11 14:46

破解与逆向分析010editor(v9.0)注册码生成算法

1.破解工具
1.x64dbg
2.ida

2.前言
之前分析过一个老版本的010editor(https://www.52pojie.cn/thread-1068112-1-1.html),接下来逆向分析一下该软件注册时,执行的过程及注册码的生成算法,就破解而言找到关键跳和关键函数,进行nop最快。

3.分析过程
1.查壳,无壳,运行输入错误的密码提示Invalid name or password...,接着用x64dbg打开,搜索字符串Invalid name or password
,在引用窗口可以看到搜索结果,随后在cpu窗口搜索地址7ff688da7d72,看到字符串。





2.接着在Invalid name or password...代码附近看到Password accepted. This license....,那么关键跳和函数并定它附近,


3.往上拉,在函数头部(7ff688da7820)下断,重载,输入名字和code,点击注册,单步,发现字符串Password accepted. This license....上面的跳转命令00007FF688DA7B6B jne 010editor.7FF688DA7C9F跳转了,那么显然这是关键跳,nop掉发现注册成功。




4.接下来分析一下,生成注册码的算法,分析算法之前先要找到关键跳,然后根据关键跳来找到关键函数,进而分析算法,接下来用ida打开,发现用跳转指令都跳向关键跳,接着往上找,没有发现跳向两个jz区域的跳转指令,那么上面的callsub_14000A56F就为关键函数1,进入关键函数1,有个跳转指令jzloc_140B247DE直接跳到 moveax, 0DBh,显然这是关键跳满足的条件。






5.那么其上的函数callsub_140003F94就为关键函数2,接下来分析关键函数2的算法,在ida中,进入关键函数2,看到一些初始化操作,调用一些库函数取值操作等,进入函数sub_140009822发现很多系统函数,可以假设其为系统函数,当v24为0x9c时,程序执行3个关键性函数sub_140007FE5、sub_140004223、sub_140006DED,其他地方,没发现什么关键性函数。





6.进入函数sub_140B23110,dword_1420E50E0为一个二维数组,算法大概是初始化几个变量,对用户名的每个字符转换成大写字母,然后就是一系列的移位操作,异或操作等,并且v18的值不同,执行的操作也就不同,仔细分析了一下,这个函数对计算注册码起到了非常重要的作用。



7.进入sub_140004223,发现((a1 ^ 0x18) + 0x3d) ^ 0xA7操作,求解一个变量,在sub_140006DED中看到,求解两个变量,在函数sub_140006DED下面可以看到该函数的返回值要为0x3e8.





8.发现该函数也为求注册码的某部分函数,随后用c++语言进行还原。随后在动态跟踪程序的运行,可以发现注册码生成算法如下:






























万里绿枫叶 发表于 2020-8-19 14:40

pizazzboy 发表于 2020-1-11 15:11

小白完全看不懂算法,只知道NOP JMP{:1_896:}

guangdate 发表于 2020-1-11 15:56

完全看不懂!

dglbl 发表于 2020-1-11 17:03

不知道楼主在说什么

Angel泠鸢 发表于 2020-1-11 17:36

原谅我,我没看懂啊

wjy3004 发表于 2020-1-11 19:06

太高深莫测了。。。。

那谁 发表于 2020-1-12 01:35

感谢分享

shallies 发表于 2020-1-12 11:09

学习了,收藏备用

DemoCc10 发表于 2020-1-12 11:52

收藏先,谢谢大佬,目前在学汇编,以后再搞这个

dfui 发表于 2020-1-12 14:29

这贴子 好像 转发的吧。非原创感觉。
页: [1] 2
查看完整版本: 破解与逆向分析010editor(v9.0)注册码生成算法