逆向工程学习笔记#3——分析Abex' Crackme#1

  1. Abex’Crackme
    Abex’Crackme是一个著名的小程序,帮助初学逆向技术的小白,作为练习用的题目。下载地址:https://pan.lanzou.com/1094038

  1. 破解Abex’Crackme#1

    破解之前先运行程序,了解程序的大致过程,双击程序弹出消息窗口,如图1。
    逆向工程学习笔记#3——分析Abex' Crackme#1_第1张图片
    顺着程序的思路,点击确定按钮。之后弹出消息对话框,如图2。
    逆向工程学习笔记#3——分析Abex' Crackme#1_第2张图片
    运行OllyDbg软件,载入Abex’Crackme#1程序,就可以看到程序的汇编代码了,如图3。
    逆向工程学习笔记#3——分析Abex' Crackme#1_第3张图片
    因为这个程序是用汇编语言写的,代码比较简洁,可以直接看到mian函数。
    接下来分析代码段,如图4、5。发现程序调用了Win32 API中的GetDriveType(),此方法是获取C驱动器的类型(一般返回为HDD类型)。
    逆向工程学习笔记#3——分析Abex' Crackme#1_第4张图片
    逆向工程学习笔记#3——分析Abex' Crackme#1_第5张图片
    如果识别为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。
逆向工程学习笔记#3——分析Abex' Crackme#1_第6张图片
也就是说将条件分支语句JE改为无条件跳转语句JMP,就可以破解。
破解完运行结果为,如图7、8。
逆向工程学习笔记#3——分析Abex' Crackme#1_第7张图片
逆向工程学习笔记#3——分析Abex' Crackme#1_第8张图片
完成!第一个逆向工程分析程序。


逆向小白的成长记录,学习于李承远著的《逆向工程核心原理》

你可能感兴趣的:(逆向工程)