一、前言
(一)、本次要破解程序是Techscheduler.exe,这是个注册过程有双重验证的程序,其程序主界面和注册窗口如下图
(二)工具:ollydbg
二、破解过程
(一)、在ollydbg中载入程序,按F9让程序跑起来,之后在程序中搜索unregisteration的相关字符串,如下图
(二)、点击相关字符串,到达以下区域,通过对以下区域的分析,发现成功注册区域,不是使用call函数直接跳转过来的,而是结合了push和ret指令来实现的
通过查找引用我们也能得出这个结论
(三)、继续往上滚动,对整个注册程序进行大致的了解:
也是一个提示注册失败的区域
检查是否输入
ret语句之下应该是检查注册程序开始的地方
(四)、分别在检查完是否输入的程序区域下断点,然后点击注册窗口,随便输入一些信息,点击注册。
程序最后会停在断点处
(五)在一个距离此断点最近的下一个jmp跳转处下断点
执行程序,会发现没有跳转到此断点,并且程序弹窗,这应该是程序在检测错误的输入,只能有整型的输入。
(六)ctrl+f2 重启程序,程序再次停止在0x004A53E8地址处,在此处F8单步走,又出现了上面的弹窗,此时ollydbg反汇编窗口位于ntdll.dll的代码里面,此时在键盘上按减号,程序会自动回到用户代码区域,我们可以看到是004A5461这个跳转导致了弹窗。
我们将他nop掉,并设置断点。
(七)、重启程序,程序会自动停在test ax,ax这个区域,此时没有弹窗出现了
(八)继续按F8步进,此时需要修改语句,跳转给nop掉,否则会导致错误验证码的弹窗。
(九)、继续跳转,会进入一个循环区域
再继续跳转,到达如下区域,此时跳转步会执行,
因此我们修改其为jmp,跳过弹窗区域。
(十)继续跳转,程序到达以下跳转,此时跳转会执行
但往下拖动,会发现,注册成功的提示包含在这个程序中的,
因此修改这个跳转,让它不能执行。
我在x32dbg中,遇到了内存访问失败,但打好了
补丁程序能正常运行。
(十一)、最后任意输入个值,程序注册成功。
三、总结
(一)、当跳转到系统dll的时候,可以通过按减号返回用户代码,查看是谁跳转到用户的代码的。
(二)、push addr+ret=call addr,jmp addr