逆向工程核心原理-6

逆向工程核心原理-第六章 分析abex-crackme-1

首先运行试试看

直接运行不了,cmd运行如下

Untitled

点击确定

Untitled

开始调试

EP头非常的小说明是用汇编语言写的 , main()就在EP中

Untitled

首先需要分析程序的具体流程(看不懂也要看, 至少清楚大致的逻辑)

流程: 再消息窗口按下”确定”后,程序会调用GetDriveType()这个API,获得C驱动器的类型, 然后操作他, 使之被识别为CD-ROM类型,再在消息窗口中输出”OK, ………”(其实没看懂,但是到该就是调用一个API然后判断,决定第二个弹窗弹出的内容, 而我们的目的就是弹出其中一个就行了,所以把注意力放在关键的判断上面即可 )

ps: 注意0040101F地址处的jmp指令(其实就是跳转到下一条指令的jmp,可以删去)是一个垃圾指令(用来迷惑逆向分析人员)

这个就是关键判断, 是一个条件跳转, 最简单的方式就是把他变为一个无条件的跳转

Untitled

Untitled

保存后就完成了破解

Untitled

PATCH

定义:逆向分析中,我们把有意将已有代码(或者数据)覆盖为其他代码的行为成为”打补丁”(patch)

知识点: 参数入栈

Untitled

在二进制中的入栈

而在C语言中的样子是

MessageBoxA(NULL, “Make me think your HD is a CD-Rom.”, “abex’ 1st crackme”, MB_OK|MB_APPLMODAL)

可以看出, 参数压入栈中的顺序, 跟函数调用顺序是相反的, 这是因为栈的特征, 函数调用参数跟压栈的操作并不是同时进行的, 而是等参数全部都压入栈中的时候, 函数才开始调用参数, 而根据先进后出的规则, 函数必须第一个调用最后一个入栈的参数, 所以再看汇编的时候要记得参数入栈是逆序的.

文章作者: LamのCrow
文章链接: http://example.com/2021/12/18/ReMain-第六章 分析abex-crackme-1 536844efe61b4e6c990989cf9b7b2c3c/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LamのCrow