2009/4/17

手脱Armadillo 1.xx - 2.xx - Silicon Realms Toolworks

1、1.xx--2.xx&单线程&标准方式==========》目标程序“XDeskWeather 3.6(桌面天气秀)”
*******************************************************************************************
方法:2次断点法,即是:
bp GetModuleHandleA/he GetModuleHandleA/bp GetModuleHandleA+5/he GetModuleHandleA+5
bp GetCurrentThreadId
*******************************************************************************************
OD,载入。。。。。
004FD379 X>/$ 55 push ebp //程序入口
004FD37A . 8BEC mov ebp,esp
004FD37C . 6A FF push -1


下断he GetModuleHandleA,F9运行,注意看堆栈!

7C80B529 k> 8BFF mov edi,edi ;ntdll.7C930738 //停在这里
7C80B52B 55 push ebp
7C80B52C 8BEC mov ebp,esp
7C80B52E 837D 08 00 cmp dword ptr ss:[ebp+8],0

***********************************
每一次F9运行时候,所出现的堆栈情况!
***********************************
0012FF38 004FD441 /CALL 到 GetModuleHandleA 来自 XDeskWea.004FD43B
0012FF3C 00000000 \pModule = NULL
0012FF40 00000000

0012ED48 77F45BB0 /CALL 到 GetModuleHandleA 来自 SHLWAPI.77F45BAA
0012ED4C 77F44FF4 \pModule = "KERNEL32.DLL"
0012ED50 00000001

0012EC88 5D175334 /CALL 到 GetModuleHandleA 来自 COMCTL32.5D17532E
0012EC8C 5D175380 \pModule = "kernel32.dll"
0012EC90 5D1E3AB8 COMCTL32.5D1E3AB8

0012F55C 004F3073 /CALL 到 GetModuleHandleA 来自 XDeskWea.004F306D
0012F560 00000000 \pModule = NULL
0012F564 7C939BA0 返回到 ntdll.7C939BA0 来自 ntdll.7C9399B5

0012C280 00C15331 /CALL 到 GetModuleHandleA 来自 00C1532B //到这一次的时间缓冲有点大
0012C284 0012C3BC \pModule = "kernel32.dll"
0012C288 00000002

此时,取消断点,Alt+F9返回!

00C15331 8B0D 60D8C300 mov ecx,dword ptr ds:[C3D860] //返回到这里
00C15337 89040E mov dword ptr ds:[esi+ecx],eax
00C1533A A1 60D8C300 mov eax,dword ptr ds:[C3D860]
00C1533F 393C06 cmp dword ptr ds:[esi+eax],edi
00C15342 75 16 jnz short 00C1535A
00C15344 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00C1534A 50 push eax
00C1534B FF15 B850C300 call dword ptr ds:[C350B8] ; kernel32.LoadLibraryA
00C15351 8B0D 60D8C300 mov ecx,dword ptr ds:[C3D860]
00C15357 89040E mov dword ptr ds:[esi+ecx],eax
00C1535A A1 60D8C300 mov eax,dword ptr ds:[C3D860]
00C1535F 393C06 cmp dword ptr ds:[esi+eax],edi
00C15362 0F84 AD000000 je 00C15415 //Magic Jump,改jmp!
00C15368 33C9 xor ecx,ecx
00C1536A 8B03 mov eax,dword ptr ds:[ebx]
00C1536C 3938 cmp dword ptr ds:[eax],edi
00C1536E 74 06 je short 00C15376

此时第一个断点的任务完成!

********************************************************************************************

下断bp GetCurrentThreadId,F9,注意观察堆栈!

7C809737 k> 64:A1 18000000 mov eax,dword ptr fs:[18] //停在这里
7C80973D 8B40 24 mov eax,dword ptr ds:[eax+24]
7C809740 C3 retn

*************
0012BB40 73391E36 /CALL 到 GetCurrentThreadId 来自 73391E30
0012BB44 00000001
0012BB48 73391C1A 返回到 73391C1A 来自 73391DE2
0012BB4C 73391B60 返回到 73391B60 来自 73391B8C

0012BB20 7339353F /CALL 到 GetCurrentThreadId 来自 73393539
0012BB24 00000000
0012BB28 734A0470

0012F5A8 00C2CF2D /CALL 到 GetCurrentThreadId 来自 00C2CF27 //到这一次的时间缓冲有点大
0012F5AC 0012FF2C
0012F5B0 00000000

此时,取消断点,Alt+F9返回!

00C2CF2D A3 F018C400 mov dword ptr ds:[C418F0],eax //返回到了这里!
00C2CF32 E8 2487FEFF call 00C1565B
00C2CF37 6A 00 push 0
00C2CF39 E8 4BD9FEFF call 00C1A889
00C2CF3E 59 pop ecx
00C2CF3F E8 7D39FFFF call 00C208C1
00C2CF44 8BF8 mov edi,eax
00C2CF46 A1 E018C400 mov eax,dword ptr ds:[C418E0]
00C2CF4B 8B48 74 mov ecx,dword ptr ds:[eax+74]
00C2CF4E 3348 5C xor ecx,dword ptr ds:[eax+5C]
00C2CF51 3308 xor ecx,dword ptr ds:[eax]
00C2CF53 03F9 add edi,ecx
00C2CF55 8B0E mov ecx,dword ptr ds:[esi]
00C2CF57 85C9 test ecx,ecx
00C2CF59 75 2E jnz short 00C2CF89
00C2CF5B 8B78 5C mov edi,dword ptr ds:[eax+5C]
00C2CF5E E8 5E39FFFF call 00C208C1
00C2CF63 8B0D E018C400 mov ecx,dword ptr ds:[C418E0] ; XDeskWea.0051F258
00C2CF69 FF76 14 push dword ptr ds:[esi+14]
00C2CF6C 8B51 74 mov edx,dword ptr ds:[ecx+74]
00C2CF6F FF76 10 push dword ptr ds:[esi+10]
00C2CF72 33D7 xor edx,edi
00C2CF74 3311 xor edx,dword ptr ds:[ecx]
00C2CF76 FF76 0C push dword ptr ds:[esi+C]
00C2CF79 03C2 add eax,edx
00C2CF7B 8B51 78 mov edx,dword ptr ds:[ecx+78]
00C2CF7E 3351 14 xor edx,dword ptr ds:[ecx+14]
00C2CF81 33D7 xor edx,edi
00C2CF83 2BC2 sub eax,edx
00C2CF85 FFD0 call eax
00C2CF87 EB 25 jmp short 00C2CFAE
00C2CF89 83F9 01 cmp ecx,1
00C2CF8C 75 22 jnz short 00C2CFB0
00C2CF8E FF76 04 push dword ptr ds:[esi+4]
00C2CF91 FF76 08 push dword ptr ds:[esi+8]
00C2CF94 6A 00 push 0
00C2CF96 E8 2639FFFF call 00C208C1
00C2CF9B 50 push eax
00C2CF9C A1 E018C400 mov eax,dword ptr ds:[C418E0]
00C2CFA1 8B48 78 mov ecx,dword ptr ds:[eax+78]
00C2CFA4 3348 5C xor ecx,dword ptr ds:[eax+5C]
00C2CFA7 3348 14 xor ecx,dword ptr ds:[eax+14]
00C2CFAA 2BF9 sub edi,ecx
00C2CFAC FFD7 call edi //直接到这下“硬件执行”断点,F9,取消断点,F7进入

004D12D4 55 push ebp //到这里了,OEP!LordPE-纠正映像-Dump!
004D12D5 8BEC mov ebp,esp
004D12D7 83C4 F0 add esp,-10
004D12DA B8 0C0E4D00 mov eax,XDeskWea.004D0E0C
004D12DF E8 004EF3FF call XDeskWea.004060E4
004D12E4 A1 B06E4D00 mov eax,dword ptr ds:[4D6EB0]
004D12E9 8B00 mov eax,dword ptr ds:[eax]
004D12EB E8 08C0F9FF call XDeskWea.0046D2F8
004D12F0 E8 D7E5FFFF call XDeskWea.004CF8CC
004D12F5 A1 B06E4D00 mov eax,dword ptr ds:[4D6EB0]
004D12FA 8B00 mov eax,dword ptr ds:[eax]

OD,不要关!打开import--选择进程--OEP输入D12D4--自动搜索IAT--获取输入表--显示无效函数--CUT!

这样就可以了!因为这个软件是半透明界面,大家在录象中可能看不到,那就这样看吧~~

没有评论:

发表评论