《加密与解密》2-1-1 实验破解 CrackMe(最简单的NOP破解法)

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

2-1 实验:破解 CrackMe

第一步:观察程序、猜测程序伪代码:

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
猜测程序伪代码:

主函数框架:
   获取用户输入 用户名
   判断用户名长度 if() -- >  jmp 跳转 提示框
   获取用户输入 序列号
   if:序列号验证函数()  -->  jmp 跳转 提示框
   验证成功 提示框 

程序分析切入点

  1. 我们目标是进入主函数,需要借助一个WindowsAPI来进入主函数。
  2. 需要用到 windows API 的地方,最直接的是 获取用户输入,getDlgTextA()函数。
  3. 所以,我们的目标是首先进入GetDlgTextA()函数,即到达入口处,然后再调试走出来,进入主函数中。
  4. 然后我们直接对 序列号验证函数() 进行破坏,这样,我们就达到验证成功的目的了。

第二步:采用ollydbg进行调试爆破

  1. 进入到其函数内部,发现调用的一些api,说明查找正确。 在这里插入图片描述
  2. 设置断点,让程序运行到这里,然后开始我们的调试 在这里插入图片描述
  3. 上图按F8 或 ALT+F9(执行到下一个断点处),让程序跑出去,跑到主函数中去 在这里插入图片描述
  4. 发现存在字符数验证,F8为发现跳转,说明合格 在这里插入图片描述
    在这里插入图片描述
  5. 此时又遇到一个call,这时有jmp,则是个 if(func()),可能是验证函数;并且发现这个jmp进行跳转,说明这个判断应该不成立,很有可能大概率验证函数;另一个判断依据是 test eax,eax, je 即和自身进行关于0的判断,符合 if(func()) 函数特征 在这里插入图片描述
  6. 以NOP填充这个跳转语句,使其跳转失效,验证结果。验证成功,猜想成立。在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值