一.abex’crackme1
调试前先运行abex’crackme #1这个程序,大致了解一下它。双击运行程序后弹出一个消息窗口,显示“Make me think your HD is a CD-Rom”消息。不太理解这句英文。消息的最后部分出现了“CD-Rom”这个词,我们只能根据它大致推测出前面的HD为HDD(Hard Disk Drive)的意思。由于没有更多选择,我们继续按消息窗口中的“确定”按钮。
程序弹出Error消息窗后就终止运行了。但是abex到底想要干什么(要怎样破解什么)仍然不得而知。下面直接调试分析它,把握这个小程序的意图。
二.开始调试
由于代码非常简短,我们一点点地分析,重点看右上部分关于Win32 API调用的内容。如果之前大家从事过Windows应用程序的开发,那么对以上几个函数的含义应该非常了解。从上述代码的分析中,我们能够准确把握程序制作者的真正意图。在消息窗口按“确定”后,程序会调用GetDriveType() API,获取C驱动器的类型(大部分返回的是HDD类型),然后操作它,使之被识别为CD-ROM类型,再在消息窗口中输出“OK, I really think that your HD is a CD-ROM!:p”消息。下面逐行分析crackme的代码。
1 | ;调用NessageBoxA()函数00401000 PUSH 0 |
可以看到就是通过比较AX和SI的值,等于就跳转,只需要把JE修改为无条件跳转指令JMP就可以了
得到最后的结果。