1.4 Crack小实验

0_day 第一章 基础知识

1.4 Crack小实验

《0day_2th》王清 著 电子书 下载链接:https://pan.baidu.com/s/11TgibQSC3-kYwCInmH8wwg 密码:ve75

实验环境

屏幕快照 2018-07-23 10.09.11

实验流程

  1. 首先打开IDA,并把由VC 6.0得到的.exe文件直接拖进IDA,稍等片刻,反汇编工作将完成。反汇编流程图如下所示:屏幕快照 2018-07-23 10.06.18

  2. 在IDA图形显示界面,用鼠标选中程序分支点,即要寻找的对应C代码分支点的if分支点,按空格键切换到汇编指令界面:

    屏幕快照 2018-07-23 10.19.48

    光标仍然显示高亮的这条汇编指令就是刚才在流程图中看到的分支指令。可以看到这条指令位于PE文件的.text节,并且IDA已经自动将该指令的地址换算成了运行时的内存地址VA:004010D5。

  3. 现在关闭IDA,换成OllyDbg进行动态调试来看看程序到底怎样分支的。用OllyDbg把PE文件打开,如下:

    屏幕快照 2018-07-23 10.34.21

  4. OllyDbg在默认情况下将程序中断在PE装载处开始,而不是main函数的开始。一般情况下,main函数位于GetCommonLineA函数调用后不远处,并且有明显的特征:在调用之前有3次明显的压栈操作,因为系统要给main传入默认的argc、argv等参数。找到main函数后,按F7键单步跟入就可以看到真正的代码了。

    屏幕快照 2018-07-23 10.41.15

    屏幕快照 2018-07-23 10.48.37

  5. 也可以按快捷键Ctrl+G直接跳到由IDA得到的VA:0x004010D5处查看那条引起程序分支的关键指令:

    屏幕快照 2018-07-23 10.55.27

  6. 选中这条指令,按F2键下断点,成功后,指令的地址会被标记成不同颜色:

    屏幕快照 2018-07-23 10.57.56

    按F9键让程序运行起来,这时候程序控制权会回到程序,OllyDbg暂时挂起。到程序提示输入密码的Console界面随便输入一个错误的密码(例如:123):

    屏幕快照 2018-07-23 10.59.56

    回车确认后,OllyDbg会重新中断程序,收回控制权。

    屏幕快照 2018-07-23 11.00.55

    密码验证函数的返回值将存在EAX寄存器中,if()语句通过下列两条指令实现:

    TEST EAX,EAX
    JE XXXXX

    也就是说,EAX 中的值为 0 时,跳转将被执行,程序进入密码确认流程;否则跳转不执行, 程序进入密码重输的流程。由于现在输入的是错误密码(123),所以可以在预执行区看到提示:“Jump is not taken(跳转未实现)”。

    以上是破解前的状态。

  7. 如果我们把 JE 这条指令的机器代码修改成 JNE(非 0 则跳转),那么整个程序的逻辑就会反过来:输入错误的密码(例如:123)会被确认,输入正确的密码(1234567)反而要求重新输入!当然,把

    TEST EAX, EAX

    指令修改成

    XOR EAX, EAX

    也能达到改变程序流程的目的,这时不论正确与否,密码都将被接受。

    双击JE这条指令,将其修改成JNE,单击“Assemble(汇编)”按钮将其写入内存,如下所示:

    屏幕快照 2018-07-23 11.06.43

    屏幕快照 2018-07-23 11.07.31

  8. OllyDbg将汇编指令翻译成机器代码写入内存。原来内存中的机器代码74(JE)现在变成了75(JNE)。此外,在预执行区中的提示也发生了变化,提示跳转将要发生,也就是说,在修改了一个字节的内存数据后,错误的密码也将跳入正确的执行流程!后面您可以单步执行,看看程序是不是如我们所料执行了正确密码才应该执行的指令。

    注:实际这里按了两下“汇编”按钮,导致产生两条je指令。按一下即可。

    屏幕快照 2018-07-23 11.16.01

  9. 上面只是在内存中修改程序,还需要在二进制文件中也修改相应的字节,需要用到内存地址VA与文件地址之间的对应关系。利用PEiD或类似软件打开.exe文件,查看PE文件的节信息:

    屏幕快照 2018-07-23 11.42.18

    我们已经知道跳转指令在内存中的地址是VA = 0x004010D5,按照VA与文件地址的换算公式:  文件偏移地址 = 虚拟内存地址(VA) - 装载基址(Image Base) - 节偏移 = 0x004010D5 - 0x00400000 - (0x00001000 - 0x00001000) = 0x10D5  也就是说,这条指令在PE文件中距离文件开始处10D5字节的地方。

    用UltraEdit按照二进制方式打开.exe文件,按Ctrl+G:

    屏幕快照 2018-07-23 13.01.31

    输入0x10D5,点击“确定”。直接跳到JE指令的机器代码处,将这一字节的74(JE)修改成75(JNE),保存。

    屏幕快照 2018-07-23 13.03.10

    屏幕快照 2018-07-23 13.03.53

  10. 重新运行可执行文件.exe,原本正确的密码“1234567”现在反而提示错误了。

    屏幕快照 2018-07-23 13.09.55

Preference

https://blog.csdn.net/rectsuly/article/details/70161212

转载于:https://www.cnblogs.com/houhaibushihai/p/9664714.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值