文章以及修复文件打包下载
附件:Armadillo3.05.rar 3大断点法!
1、BP OpenMutexA
2、BP GetModuleHandleA 或者是he GetModuleHandleA+5
3、BP GetCurrentThreadId
**********************************************
OD载入。。忽略所有异常。。隐藏插件。。
*********************
1、BP OpenMutexA F9&Shift+F9
77E62391 k> 55 push ebp //断在这。看堆栈
77E62392 8BEC mov ebp,esp
77E62394 51 push ecx
77E62395 51 push ecx
******************
0012F5B0 00411DA6 /CALL 到 OpenMutexA 来自 NOTEPAD3.00411DA0
0012F5B4 001F0001 |Access = 1F0001
0012F5B8 00000000 |Inheritable = FALSE
0012F5BC 0012FBF0 \MutexName = "62C::DA2591DD25" //需要用到
******************
Ctrl+G 401000 键入以下代码
00401000 60 pushad
00401001 9C pushfd
00401002 68 B4FB1200 push 0012FBF0 ★ 堆栈里看到的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 B4B2A577 call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 E9 33F7A577 jmp kernel32.OpenMutexA
在401000处新建起源,F9运行,再次中断在OpenMutexA处,取消断点。
再次Ctrl+G 401000
撤消刚才做的选择
**********************************************
2、BP GetModuleHandleA F9
77E5AD86 k> 837C24 04 00 cmp dword ptr ss:[esp+4],0//断在这,取消断点!
77E5AD8B 0F84 37010000 je kernel32.77E5AEC8 //F2,下新断点
77E5AD91 FF7424 04 push dword ptr ss:[esp+4]
77E5AD95 E8 F8050000 call kernel32.77E5B392
按F9,注意堆栈
****************
0012ECE4 77C059FC 返回到 msvcrt.77C059FC 来自 kernel32.GetModuleHandleA
0012ECE8 77BE31AC ASCII "kernel32.dll"
0012ECEC 77C2CA20 msvcrt.77C2CA20
0012EDA8 631C9C01 返回到 SHLWAPI.631C9C01 来自 kernel32.GetModuleHandleA
0012EDAC 6318D3D0 ASCII "KERNEL32.DLL"
0012EDB0 00000000
0012EDB4 63180000 SHLWAPI.63180000
0012ECCC 770FB124 返回到 OLEAUT32.770FB124 来自 kernel32.GetModuleHandleA
0012ECD0 771722E4 ASCII "KERNEL32.DLL"
0012ECD4 770FADAC 返回到 OLEAUT32.770FADAC 来自 OLEAUT32.770FB119
0012ECD8 77172064 OLEAUT32.77172064
0012F55C 00411073 返回到 NOTEPAD3.00411073 来自 kernel32.GetModuleHandleA
0012F560 00000000
0012F564 0012F558
0012C280 003C5331 返回到 003C5331 来自 kernel32.GetModuleHandleA
0012C284 0012C3BC ASCII "kernel32.dll" //看到这里就是返回时机了
0012C288 00000002
****************
此时,取消断点,按Ctrl+F9&F7返回!
003C5331 8B0D 60D83E00 mov ecx,dword ptr ds:[3ED860] //返回到这里
003C5337 89040E mov dword ptr ds:[esi+ecx],eax
003C533A A1 60D83E00 mov eax,dword ptr ds:[3ED860]
003C533F 393C06 cmp dword ptr ds:[esi+eax],edi
003C5342 75 16 jnz short 003C535A
003C5344 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
003C534A 50 push eax
003C534B FF15 B8503E00 call dword ptr ds:[3E50B8] ; kernel32.LoadLibraryA
003C5351 8B0D 60D83E00 mov ecx,dword ptr ds:[3ED860]
003C5357 89040E mov dword ptr ds:[esi+ecx],eax
003C535A A1 60D83E00 mov eax,dword ptr ds:[3ED860]
003C535F 393C06 cmp dword ptr ds:[esi+eax],edi
003C5362 0F84 AD000000 je 003C5415 //Magic Jump,改成jmp
003C5368 33C9 xor ecx,ecx
003C536A 8B03 mov eax,dword ptr ds:[ebx]
003C536C 3938 cmp dword ptr ds:[eax],edi
Btw:你说你修复不了,可能是没修改Magic Jump或者是没找对!
*****************************************
3、bp GetCurrentThreadId F9
注意看堆栈
*************
0012BB80 73391E26 /CALL 到 GetCurrentThreadId 来自 73391E20
0012BB84 00000001
0012BB88 73391C0A 返回到 73391C0A 来自 73391DD2
0012BB8C 73391B50 返回到 73391B50 来自 73391B7C
*************
0012BB60 73393526 /CALL 到 GetCurrentThreadId 来自 73393520
0012BB64 00000000
0012BB68 7349F470
0012BB6C 7349F4D8
*************
0012F5A8 003DCF2D /CALL 到 GetCurrentThreadId 来自 003DCF27
0012F5AC 0012FF2C //是时候返回了
0012F5B0 00000000
0012F5B4 7FFDF000
*************
此时,取消断点,返回!
003DCF2D A3 F0183F00 mov dword ptr ds:[3F18F0],eax //回到这里,接下来一路F8
003DCF32 E8 2487FEFF call 003C565B
003DCF37 6A 00 push 0
003DCF39 E8 4BD9FEFF call 003CA889
003DCF3E 59 pop ecx
003DCF3F E8 7D39FFFF call 003D08C1
003DCF44 8BF8 mov edi,eax
003DCF46 A1 E0183F00 mov eax,dword ptr ds:[3F18E0]
003DCF4B 8B48 74 mov ecx,dword ptr ds:[eax+74]
003DCF4E 3348 5C xor ecx,dword ptr ds:[eax+5C]
003DCF51 3308 xor ecx,dword ptr ds:[eax]
003DCF53 03F9 add edi,ecx
003DCF55 8B0E mov ecx,dword ptr ds:[esi]
003DCF57 85C9 test ecx,ecx
003DCF59 75 2E jnz short 003DCF89
003DCF5B 8B78 5C mov edi,dword ptr ds:[eax+5C]
003DCF5E E8 5E39FFFF call 003D08C1
003DCF63 8B0D E0183F00 mov ecx,dword ptr ds:[3F18E0] ; NOTEPAD3.0043D258
003DCF69 FF76 14 push dword ptr ds:[esi+14]
003DCF6C 8B51 74 mov edx,dword ptr ds:[ecx+74]
003DCF6F FF76 10 push dword ptr ds:[esi+10]
003DCF72 33D7 xor edx,edi
003DCF74 3311 xor edx,dword ptr ds:[ecx]
003DCF76 FF76 0C push dword ptr ds:[esi+C]
003DCF79 03C2 add eax,edx
003DCF7B 8B51 78 mov edx,dword ptr ds:[ecx+78]
003DCF7E 3351 14 xor edx,dword ptr ds:[ecx+14]
003DCF81 33D7 xor edx,edi
003DCF83 2BC2 sub eax,edx
003DCF85 FFD0 call eax
003DCF87 EB 25 jmp short 003DCFAE
003DCF89 83F9 01 cmp ecx,1
003DCF8C 75 22 jnz short 003DCFB0
003DCF8E FF76 04 push dword ptr ds:[esi+4]
003DCF91 FF76 08 push dword ptr ds:[esi+8]
003DCF94 6A 00 push 0
003DCF96 E8 2639FFFF call 003D08C1
003DCF9B 50 push eax
003DCF9C A1 E0183F00 mov eax,dword ptr ds:[3F18E0]
003DCFA1 8B48 78 mov ecx,dword ptr ds:[eax+78]
003DCFA4 3348 5C xor ecx,dword ptr ds:[eax+5C]
003DCFA7 3348 14 xor ecx,dword ptr ds:[eax+14]
003DCFAA 2BF9 sub edi,ecx
003DCFAC FFD7 call edi //F进入,到OEP
*********************
呵呵这里红色一片。。。代表我们的革命到了目的地了。。。^_^
004010CC 55 push ebp //LordPE Dump!
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
004010D2 56 push esi
004010D3 FF15 E4634000 call dword ptr ds:[4063E4] ; kernel32.GetCommandLineA
004010D9 8BF0 mov esi,eax
004010DB 8A00 mov al,byte ptr ds:[eax]
004010DD 3C 22 cmp al,22
004010DF 75 1B jnz short NOTEPAD3.004010FC
修复发现有一个指针无效,CUT,抓取。。修复可以运行的~
***************************
操作平台XP SP1,我修复的文件在你们那可能无法运行。。。嘿嘿,跨平台问题我不会。。。