看了论坛的教材
自己也按着试一下
例子程序下载地址
http://zyq111.vicp.net/down/try.exe
peid查壳知道,该软件的壳为Armadillo 1.xx - 2.xx -> SiliconRealms Toolworks,据说这个是不准的!
OD载入命令行下断点 BP OpenMutexA,F9运行。
断到这里
77E7AFA6 K> 55 push ebp
77E7AFA7 8BEC mov ebp,esp
77E7AFA9 51 push ecx
77E7AFAA 51 push ecx
77E7AFAB 837D 10 00 cmp dword ptr ss:[ebp+1>
77E7AFAF 56 push esi
77E7AFB0 0F84 2DF40100 je KERNEL32.77E9A3E3
77E7AFB6 64:A1 1800000>mov eax,dword ptr fs:[1>
****************************************************************
堆栈内容:
0012D7AC 00A9F321 /CALL 到 OpenMutexA 来自 fantfore.00A9F31B
0012D7B0 001F0001 |Access = 1F0001
0012D7B4 00000000 |Inheritable = FALSE
0012D7B8 0012DDEC \MutexName = "3EC::DA11F914F0"
0012D7BC 0012FF2C
Ctrl+G 401000
填入以下代码:
00401000 60 PUSHAD
00401001 9C PUSHFD
00401002 68 DCFB1200 PUSH 12DDEC
00401007 33C0 XOR EAX,EAX
00401009 50 PUSH EAX
0040100A 50 PUSH EAX
0040100B E8 687BA677 CALL KERNEL32.CreateMutexA
00401010 9D POPFD
00401011 61 POPAD
00401012 - E9 75C7A677 JMP KERNEL32.OpenMutexA
点右键 选在此处新建 Eip ,看到Eip 变为 401000
F9运行
中断到这里
77E7AFA6 K> 55 push ebp
77E7AFA7 8BEC mov ebp,esp
77E7AFA9 51 push ecx
77E7AFAA 51 push ecx
77E7AFAB 837D 10 00 cmp dword ptr ss:[ebp+1>
77E7AFAF 56 push esi
77E7AFB0 0F84 2DF40100 je KERNEL32.77E9A3E3
77E7AFB6 64:A1 1800000>mov eax,dword ptr fs:[1>
****************************************************************
Ctrl+G 401000来到:
00401000 60 PUSHAD
00401001 9C PUSHFD
00401002 68 DCFB1200 PUSH 12DDEC
00401007 33C0 XOR EAX,EAX
00401009 50 PUSH EAX
0040100A 50 PUSH EAX
0040100B E8 687BA677 CALL KERNEL32.CreateMutexA
00401010 9D POPFD
00401011 61 POPAD
00401012 - E9 75C7A677 JMP KERNEL32.OpenMutexA
撤消刚才的修改~~~~~~~~
下bp GetModuleHandleA,
断到这里
77E6AB06 K> 55 push ebp
77E6AB07 8BEC mov ebp,esp
77E6AB09 837D 08 00 cmp dword ptr ss:[ebp+8>
77E6AB0D 0F84 31F50000 je KERNEL32.77E7A044
77E6AB13 FF75 08 push dword ptr ss:[ebp+>
77E6AB16 E8 9EC8FFFF call KERNEL32.77E673B9
77E6AB1B 85C0 test eax,eax
77E6AB1D 74 08 je short KERNEL32.77E6A>
77E6AB1F FF70 04 push dword ptr ds:[eax+>
77E6AB22 E8 5B560000 call KERNEL32.GetModule>
F9运行N次
在此期间仔细观察堆栈内容,
1---
0012D1C4 78001E96 /CALL 到 GetModuleHandleA 来自 MSVCRT.78001E90
0012D1C8 780322D4 \pModule = "KERNEL32"
0012D1CC 78001E46 返回到 MSVCRT.78001E46 来自 MSVCRT.78001E8B
0012D1D0 78001E1A 返回到 MSVCRT.78001E1A
0012D1D4 780010EC 返回到 MSVCRT.780010EC 来自 MSVCRT.78001E0F
2
0012D24C 77A03F02 /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A03EFC
0012D250 779A0630 \pModule = "kernel32.dll"
0012D254 77A04081 返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
0012D258 77990000 offset OLEAUT32.#345
3
0012D240 77A072DB /CALL 到 GetModuleHandleA 来自 OLEAUT32.77A072D5
0012D244 779A0994 \pModule = "KERNEL32"
0012D248 77A0412A 返回到 OLEAUT32.77A0412A 来自 OLEAUT32.77A072D0
0012D24C 77A0620B 返回到 OLEAUT32.77A0620B
0012D250 77A03FAA 返回到 OLEAUT32.77A03FAA 来自 OLEAUT32.77A06200
0012D254 77A04081 返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
0012D258 77990000 offset OLEAUT32.#345
4
0012D178 779A83DB /CALL 到 GetModuleHandleA 来自 OLEAUT32.779A83D5
0012D17C 77A1ADA8 \pModule = "KERNEL32.DLL"
0012D180 779A7A32 返回到 OLEAUT32.779A7A32 来自 OLEAUT32.779A83D0
0012D184 77A1F790 OLEAUT32.77A1F790
0012D188 000003E8
0012D18C 779EFB2D 返回到 OLEAUT32.779EFB2D 来自 OLEAUT32.779A7A10
5
0012D178 779A83DB /CALL 到 GetModuleHandleA 来自 OLEAUT32.779A83D5
0012D17C 77A1ADA8 \pModule = "KERNEL32.DLL"
0012D180 779C0222 返回到 OLEAUT32.779C0222 来自 OLEAUT32.779A83D0
0012D184 77A1F908 OLEAUT32.77A1F908
0012D188 000003E8
0012D18C 779EFB34 返回到 OLEAUT32.779EFB34 来自 OLEAUT32.779C0200
6
0012D750 00A9E463 /CALL 到 GetModuleHandleA 来自 fantfore.00A9E45D
0012D754 00000000 \pModule = NULL
0012D758 0012D764
0012D75C 01197EBE
0012D760 00B1F133 fantfore.00B1F133
0012D764 00000000
0012D768 00AF8000 ASCII "PDATA000"
7
0180F1E0 77E70519 /CALL 到 GetModuleHandleA 来自 KERNEL32.77E70514
0180F1E4 00000000 \pModule = NULL
0180F1E8 77E70502 返回到 KERNEL32.77E70502 来自 KERNEL32.77E70512
0180F1EC 00000000
0180F1F0 77E6CE51 KERNEL32.<ModuleEntryPoint>
8
00126884 011B372E /CALL 到 GetModuleHandleA 来自 011B3728
00126888 011C7474 \pModule = "kernel32.dll"
0012688C 011C8744 ASCII "VirtualAlloc"
9
00126884 011B374B /CALL 到 GetModuleHandleA 来自 011B3745
00126888 011C7474 \pModule = "kernel32.dll"
0012688C 011C8738 ASCII "VirtualFree"
10
0012C98C 011BEAC9 /CALL 到 GetModuleHandleA 来自 011BEAC3
0012C990 00000000 \pModule = NULL
11
0012C9C0 011BE72F /CALL 到 GetModuleHandleA 来自 011BE72D
0012C9C4 00000000 \pModule = NULL
12
0012C9C0 011BE82E /CALL 到 GetModuleHandleA 来自 011BE82C
0012C9C4 00000000 \pModule = NULL
13
0012C9C0 011BE88A /CALL 到 GetModuleHandleA 来自 011BE888
0012C9C4 00000000 \pModule = NULL
14
0012C9C0 011BE9B0 /CALL 到 GetModuleHandleA 来自 011BE9AE
0012C9C4 00000000 \pModule = NULL
15
次的时候
提示框错误
解压程序错误,代码2,请联系我们解决。
见图
http://zyq111.vicp.net/down/err.bmp
我的疑问是什么时候应该返回
就是什么时候能看出返回的时机!
我从第8次第9次等处 alt+f9返回都找不到关键跳
[课程]Android-CTF解题方法汇总!