逆向分析实验2 OllyDbg的使用

本文最后更新于:2025年3月1日 中午

逆向分析实验2 OllyDbg的使用

查找main()函数

单步跟踪

先一直使用F8单步步过,发现运行了401144处的函数调用后出现弹窗:

image-20250301095654175

重新运行,并用命令bp 401144在目标函数位置打上断点

运行到断点后F7单步步入

image-20250301100048067

此函数中调用了MessageBox()函数,并且存在MessageBox()函数中出现的Hello World!www.reversecore.com字符串

因此可以确定此函数为main函数,位置为401144

字符串检索

单击右键->查找->所有参考文本字串,找到引用“Hello World!”的地址

image-20250301100722535

双击定位到main()函数中调用MessageBox()函数的代码处,F2设置断点,F9命令运行到该处

image-20250301102443581

在断点窗口查看设置的断点信息

image-20250301102230225

在数据窗口中使用Ctrl+G,输入反汇编代码中的地址4092a0,查看该地址处的字符串

image-20250301102307069

API检索

单击右键->查找->所有模块间的调用,列出程序调用的所有API,找到MessageBoxW()的地址

image-20250301102836661

双击后,定位到main()函数中调用MessageBox()函数的代码处

image-20250301102945342

修改“Hello World!”字符串

直接修改字符串缓冲区

用上面“字符串检索”中的方法找到Hello World!字符串保存的地址,在数据窗口直接编辑修改该段缓冲区的内容为Hello Reversing!

image-20250301104951731

运行程序后,弹出消息窗口,可以看到显示出新的字符串

image-20250301105019385

在其他内存区域新建字符串并传递给消息函数

在程序未使用的NULL填充区域找到一个适当位置,写入新字符串Hello Reversing World!!!,并把新建的缓冲区的地址作为参数传递给MessageBoxW()函数

image-20250301105752285

运行程序后,弹出消息窗口,可以看到显示出新的字符串

image-20250301105852587

破解abexcm1-voiees.exe程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
00401000 >/$  6A 00         push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL
00401002 |. 68 00204000 push abexcm1-.00402000 ; |Title = "abex' 1st crackme"
00401007 |. 68 12204000 push abexcm1-.00402012 ; |Text = "Make me think your HD is a CD-Rom."
0040100C |. 6A 00 push 0x0 ; |hOwner = NULL
0040100E |. E8 4E000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
00401013 |. 68 94204000 push abexcm1-.00402094 ; /RootPathName = "c:\"
00401018 |. E8 38000000 call <jmp.&KERNEL32.GetDriveTypeA> ; \GetDriveTypeA
0040101D |. 46 inc esi
0040101E |. 48 dec eax
0040101F |. EB 00 jmp short abexcm1-.00401021
00401021 |> 46 inc esi
00401022 |. 46 inc esi
00401023 |. 48 dec eax
00401024 |. 3BC6 cmp eax,esi
00401026 |. 74 15 je short abexcm1-.0040103D
00401028 |. 6A 00 push 0x0 ; /Style = MB_OK|MB_APPLMODAL
0040102A |. 68 35204000 push abexcm1-.00402035 ; |Title = "Error"
0040102F |. 68 3B204000 push abexcm1-.0040203B ; |Text = "Nah... This is not a CD-ROM Drive!"
00401034 |. 6A 00 push 0x0 ; |hOwner = NULL
00401036 |. E8 26000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
0040103B |. EB 13 jmp short abexcm1-.00401050
0040103D |> 6A 00 push 0x0 ; |/Style = MB_OK|MB_APPLMODAL
0040103F |. 68 5E204000 push abexcm1-.0040205E ; ||Title = "YEAH!"
00401044 |. 68 64204000 push abexcm1-.00402064 ; ||Text = "Ok, I really think that your HD is a CD-ROM! :p"
00401049 |. 6A 00 push 0x0 ; ||hOwner = NULL
0040104B |. E8 11000000 call <jmp.&USER32.MessageBoxA> ; |\MessageBoxA
00401050 \> E8 06000000 call <jmp.&KERNEL32.ExitProcess> ; \ExitProcess

运行源程序后会弹出消息窗口Make me think your HD is a CD-Rom消息,点击确定后,弹出Error消息Nah…This is not a CD-ROM Drive!

我们的目的是尝试破解这个程序,使得点击确定后,弹出正确的输出。

我注意到0040101F有一个无意义的跳转指令(跳转到下一行指令):

1
0040101F  |.  EB 00         jmp short abexcm1-.00401021

这个跳转指令是在第一次弹窗点击确定后、第二次弹窗之前执行的

或许可以更改跳转地址,使其直接转到弹出正确的输出的代码

更改其跳转地址为0040103D(弹出正确输出的代码)

成功

image-20250301113056362


逆向分析实验2 OllyDbg的使用
http://example.com/2025/03/01/逆向分析实验2 OllyDbg的使用/
作者
sawtooth384
发布于
2025年3月1日
许可协议