2-1 实验:破解 CrackMe
第一步:观察程序、猜测程序伪代码:

猜测程序伪代码:
主函数框架:
获取用户输入 用户名
判断用户名长度 if() -- > jmp 跳转 提示框
获取用户输入 序列号
if:序列号验证函数() --> jmp 跳转 提示框
验证成功 提示框
程序分析切入点
- 我们目标是进入主函数,需要借助一个WindowsAPI来进入主函数。
- 需要用到 windows API 的地方,最直接的是 获取用户输入,getDlgTextA()函数。
- 所以,我们的目标是首先进入GetDlgTextA()函数,即到达入口处,然后再调试走出来,进入主函数中。
- 然后我们直接对 序列号验证函数() 进行破坏,这样,我们就达到验证成功的目的了。
第二步:采用ollydbg进行调试爆破
- 进入到其函数内部,发现调用的一些api,说明查找正确。

- 设置断点,让程序运行到这里,然后开始我们的调试

- 上图按F8 或 ALT+F9(执行到下一个断点处),让程序跑出去,跑到主函数中去

- 发现存在字符数验证,F8为发现跳转,说明合格


- 此时又遇到一个call,这时有jmp,则是个 if(func()),可能是验证函数;并且发现这个jmp进行跳转,说明这个判断应该不成立,很有可能大概率验证函数;另一个判断依据是 test eax,eax, je 即和自身进行关于0的判断,符合 if(func()) 函数特征

- 以NOP填充这个跳转语句,使其跳转失效,验证结果。验证成功,猜想成立。

该博客围绕CrackMe程序破解展开。首先要观察程序并猜测伪代码,借助Windows API进入主函数,破坏序列号验证函数以达验证成功目的;接着用ollydbg调试爆破,进入函数内部设置断点,处理字符数验证和跳转语句,以NOP填充跳转语句使验证成功。
2401

被折叠的 条评论
为什么被折叠?



