- Abex’Crackme
Abex’Crackme是一个著名的小程序,帮助初学逆向技术的小白,作为练习用的题目。下载地址:https://pan.lanzou.com/1094038
破解Abex’Crackme#1
破解之前先运行程序,了解程序的大致过程,双击程序弹出消息窗口,如图1。
顺着程序的思路,点击确定按钮。之后弹出消息对话框,如图2。
运行OllyDbg软件,载入Abex’Crackme#1程序,就可以看到程序的汇编代码了,如图3。
因为这个程序是用汇编语言写的,代码比较简洁,可以直接看到mian函数。
接下来分析代码段,如图4、5。发现程序调用了Win32 API中的GetDriveType(),此方法是获取C驱动器的类型(一般返回为HDD类型)。
如果识别为CD-ROM类型,消息窗口中就会输出“OK,I really think that you HD is a CD-ROM!:P”。
00401000 >push 0x0 ; /Style = MB_OK|MB_APPLMODAL
00401002 push abexcm1.00402000 ; |Title = "abex' 1st crackme"
00401007 push abexcm1.00402012 ; |Text = "Make me think your HD is a CD-Rom."
0040100C push 0x0 ; |hOwner = NULL
0040100E call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
00401013 push abexcm1.00402094 ; /RootPathName = "c:\"
00401018 call <jmp.&KERNEL32.GetDriveTypeA> ; \GetDriveTypeA
0040101D inc esi ; esi=0
0040101E dec eax ; eax=2
0040101F jmp short abexcm1.00401021
00401021 inc esi ; esi=1
00401022 inc esi ; esi=2
00401023 dec eax ; eax=1
00401024 >cmp eax,esi ; 比较eax(1)和esi(2)
**00401026 je short abexcm1.0040103D** ; JE 条件分支命令
; 若两值相等,则跳转到40103D
; 若两值不等,则从401028继续执行
; 40103D 为消息框输出代码地址
00401028 push 0x0 ; /Style = MB_OK|MB_APPLMODAL
0040102A push abexcm1.00402035 ; |Title = "Error"
0040102F push abexcm1.0040203B ; |Text = "Nah... This is not a CD-ROM Drive!"
00401034 push 0x0 ; |hOwner = NULL
00401036 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
0040103B jmp short abexcm1.00401050
**0040103D push 0x0** ; |/Style = MB_OK|MB_APPLMODAL
0040103F push abexcm1.0040205E ; ||Title = "YEAH!"
00401044 push abexcm1.00402064 ; ||Text = "Ok, I really think that your HD is a CD-ROM! :p"
00401049 push 0x0 ; ||hOwner = NULL
0040104B call <jmp.&USER32.MessageBoxA> ; |\MessageBoxA
00401050 call <jmp.&KERNEL32.ExitProcess> ; \ExitProcess
00401055 jmp dword ptr ds:[<&KERNEL32.GetDriveTyp>; kernel32.GetDriveTypeA
0040105B jmp dword ptr ds:[<&KERNEL32.ExitProcess>; kernel32.ExitProcess
00401061 jmp dword ptr ds:[<&USER32.MessageBoxA>] ; user32.MessageBoxA
读这段汇编代码后理解,将401026地址的汇编指令JE SHORT 0040103D 更改为 JMP 0040103D,如图6。
也就是说将条件分支语句JE改为无条件跳转语句JMP,就可以破解。
破解完运行结果为,如图7、8。
完成!第一个逆向工程分析程序。
逆向小白的成长记录,学习于李承远著的《逆向工程核心原理》