先把010Editor.exe主程序拖进DIE查壳,发现64位无壳。

010在启动时会检查注册状态,如果没有激活注册软件,会提示试用/到期状态,从这里下手。

把010Editor.exe拖进x64dbg,按F9到达主程序入口,发现很多jmp指令,

按Shift+D搜索字符串“Evaluation”(上面截图里有),发现有4行可能是注册成功的提示,

任选一个注册成功的地址双击进入代码,发现它们位于同一子程序。拉到上面找到子程序第一句(图里选中了第4句,其实没差别),下个断点然后运行,提示注册信息的界面果然没有弹出来,这说明这段程序就是验证软件是否注册的。

右键子程序第1句查看流程图,

推测此处在cmp ebx是否为0xDB后再跳转到检验结果为已/未注册,但是直接修改这里可能作用不大,因为这一类的商业软件一般会有多个注册标志,可能会反复多次去验证,仅仅跳过“未注册”的提示,软件即便一开始显示“已注册”的信息,在很多地方软件运行还是会出问题,治标不治本,就好比买通了学校门卫,但是学籍信息里没有你的名字,即使混入了学校也还是上不了课。

所以我们需要找到检验注册的公共代码,彻底修改为“已注册”,在学籍系统里加上你的名字,这样就能一路打通大门、图书馆、教学楼的门禁。

选中cmp ebx,DB指令,按Shift+C复制指令码,然后在当前模块按“匹配特征”进行搜索,把十六进制指令码粘贴进去,然后搜索,

结果发现只有一条搜索结果??

看来直接搜索不好使了,现在只能慢慢往上回溯, 发现上面有一行,ebx是来自r8d的,

接着往上回溯找子程序的调用者,

双击,看到好多跳转,先不管别人,继续回溯,

找到了4个call调用,

都一样,随便选一个双击进去看看,

发现了r8d!原来r8d是来自eax的。在上面的一个call有很多跳转,猜测可能是关键call,被反复调用,

点几个进去看看,发现都有如下代码:

果然是调用后再将eax和0xDB进行比较,那么只要修改这段call,使eax总是为0xDB就行了,双击点进去发现代码长这样:

看流程图是拿eax和各种值作各种比较,可能对应各种情况,看不懂,直接把上面eax的值改为0xDB试试,

改完之后右键汇编代码,点补丁然后导出为exe,打开试一下,发现提示已注册, 使用一切正常,破解成功。

看汇编还是有点费劲的,下次试试用IDA看看会不会容易些。讲真,感觉破解小软件要比纯CTF的逆向题容易些,可能是学的太浅了23333。