Loading . . .

使用OllyDbg破解CrackMe程序


使用OllyDbg破解CrackMe程序

环境

Windows10家庭版 & OllyDbg1.10看雪增强版 & CrackMe3

实操

  1. 打开CrackMe程序,输入错误的激活码会报错
  2. 退出程序,打开OllyDbg,并载入此程序
  3. 在左上角窗口右键,选择查找所有相关字符串
  4. 接着,在弹出的窗口中选择查找文本
  5. 输入Wrong,区分大小写,查找刚刚的报错位置
  6. 结果如图
  7. 选中,右键,在反汇编窗口跟随
  8. 跳转到下图所示
  9. 看到上图的指令,分析一下程序流程:输入ID和注册码后,call调用子函数来判断注册码是否正确(00440F51处,call 00403B2C处的子函数),如果不正确,一个jnz跳到00440F72,弹出“Wrong Serial ,try again!”
  10. 在call的前面的00440F2C处按F2下个断点
  11. 然后F9让程序跑起来,输入假的ID “nju”,按下“注册”。此时程序自然要去call子函数来验证我们的注册码是否正确。
  12. 按下几次F8单步步过,直到00440F34 call指令,改为F7单步步入,跟踪到所call的函数。下图为F7跳转的验证激活码的程序。
  13. 可以看到,程序将输入的注册码与内置的注册码用cmp指令做了比较。(cmp指令执行后,将对标志寄存器ZF产生影响。比如 CMP AX , BX ,当AX=BX时,ZF=1;AX!=BX时,ZF=0。)如果注册码与输入的字符串不相等,ZF=0。此时子程序返回,执行00440F39处的JNZ指令。因为输入的注册码不对,ZF=0,开始执行JNZ,跳转到00440F8C,弹出“Wrong Serial”对话框提示注册码错误。

  14. 如果将JNZ(ZF=0时就跳转)改为JE(ZF=1时就跳转),得到的结果就会正好相反,即错误的注册码反而会提示注册成功,对的注册码反而会提示错误。
  15. 在输入ID时call了一下,然后一个jnz。在输入注册码时又call了一下,再一个jnz。
  16. 双击对应的JNZ指令,将“jnz”改为“je”,点击“汇编”即可。右键,复制到可执行文件,全部修改,然后全部复制
  17. 在新弹窗中,保存文件,打开保存的程序,随便输入

文章作者: Lhtian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lhtian !
  目录