逆向后的Delphi特色
破解练习
演示程序:Teksched
查看PEiD可以查到这是一个Delphi程序。
我们之间载入它:
那么根据以往的经验,首先的需要搜索字符串:
看到一个关键的字符串,直接跟进。
我们现在想的是:如何操作才能是程序运行到这个位置。
然而经过观察,没有哪个指令是可以直接跳转到这个位置的。
向上看,可以观察到Delphi程序的一个特色:
利用PUSH和RETN来做到跳转的目的
相当于jmp 004A5841。
现在来从上往下看代码
函数入口处:
各种验证以及跳转
我们最终的目的是使程序来到以及注册的那个字符串的位置。
为此设置断点,因为上面是提示输入框所以判断点应该在下面:
载入程序,F9,填上注册信息看程序能否断下来。
如果断下来就从这里开始往下看
断下来之后F8一步一步调试
来到这个位置时,遇到了阻碍,直接跳转到了动态链接库,所以直接nop掉之后继续调试
je如果跳转则越过了第一个障碍,如果不跳转则下面的jnz和jmp都会指引我们注册失败,所以在这里应该无条件跳转。
jbe同理。
跟踪这个jnz发现如果跳转也会导致注册失败,因此不能够跳转。
最终
注册成功。