【破解作者】 wynney
【作者主页】 http://bbs.chinadev.net
【使用工具】 OD
【破解平台】 XP SP2
【软件名称】 XDeskWeather(桌面天气秀) 3.6
【软件简介】 单线程 标准方式加壳
【加壳方式】 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
一个老目标程序了。。呵呵~
经过做的那个Aramdillo总结在里面的5个实例,是通过he GetModuleHandleA寻找Magic Jump的,我发现在返回的时候,kernel32.LoadLibraryA函数离Magic Jump的位置是很近的,所以就试了下,果然方便!现在把心得写出来和大家分享,大虾可以跳过。
OD载入。。忽略所有的异常,隐藏OD!
004FD379 X>/$ 55 push ebp //入口
004FD37A |. 8BEC mov ebp,esp
004FD37C |. 6A FF push -1
004FD37E |. 68 78225200 push XDeskWea.00522278
004FD383 |. 68 60CD4F00 push XDeskWea.004FCD60 ; SE handler installation
004FD388 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
下断BP LoadLibraryA,F9运行,注意观察堆栈
0012F5AC 004F454F /CALL 到 LoadLibraryA 来自 XDeskWea.004F4549
0012F5B0 0051F548 \FileName = "KERNEL32.DLL"
0012F5B4 /0012FD1C
0012F4AC 004F3B30 /CALL 到 LoadLibraryA 来自 XDeskWea.004F3B2A
0012F4B0 00C35F14 \FileName = "WSOCK32.dll"
0012F4B4 00C3B000
0012F4AC 004F3B30 /CALL 到 LoadLibraryA 来自 XDeskWea.004F3B2A
0012F4B0 00C3681A \FileName = "KERNEL32.dll"
0012F4B4 00C3B000
0012F4AC 004F3B30 /CALL 到 LoadLibraryA 来自 XDeskWea.004F3B2A
0012F4B0 00C36CBA \FileName = "USER32.dll"
0012F4B4 00C36702 ASCII "ReleaseMutex"
0012F4AC 004F3B30 /CALL 到 LoadLibraryA 来自 XDeskWea.004F3B2A
0012F4B0 00C36CDA \FileName = "comdlg32.dll"
0012F4B4 00C36856 ASCII "DestroyWindow"
0012F4AC 004F3B30 /CALL 到 LoadLibraryA 来自 XDeskWea.004F3B2A
0012F4B0 00C36DCC \FileName = "ADVAPI32.dll"
0012F4B4 00C36CC8 ASCII "GetSaveFileNameA"
0012F4AC 004F3B30 /CALL 到 LoadLibraryA 来自 XDeskWea.004F3B2A
0012F4B0 00C36DEA \FileName = "SHELL32.dll"
0012F4B4 00C36CF8 ASCII "RegQueryValueExA"
0012ED60 00C148E1 /CALL 到 LoadLibraryA 来自 00C148DF
0012ED64 00C373D8 \FileName = "ws2_32.dll"
0012ED68 01541C3C
0012ED60 00C148EE /CALL 到 LoadLibraryA 来自 00C148EC
0012ED64 00C373C8 \FileName = "inetmib1.dll"
0012ED68 01541C3C
0012ED60 00C148F7 /CALL 到 LoadLibraryA 来自 00C148F5
0012ED64 00C373BC \FileName = "snmpapi.dll"
0012ED68 01541C3C
0012EC84 76D369F1 /CALL 到 LoadLibraryA 来自 iphlpapi.76D369EB
0012EC88 76D42E80 \FileName = "MPRAPI.dll"
0012EC8C 00000000
0012EF54 00C14B78 /CALL 到 LoadLibraryA 来自 00C14B72
0012EF58 00C37228 \FileName = "rpcrt4.dll"
0012EF5C 01541C3C
0012C4C8 00C13CB8 /CALL 到 LoadLibraryA 来自 00C13CB2
0012C4CC 00C37228 \FileName = "rpcrt4.dll"
0012C4D0 00000002
0012C280 00C15351 /CALL 到 LoadLibraryA 来自 00C1534B
0012C284 0012C3BC \FileName = "MSVBVM60.DLL" //动态库
0012C288 00000002
此时取消断点,Alt+F9返回!
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 //下硬件执行断点,给[esi+eax]清0!
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
00C15370 41 inc ecx
00C15371 83C0 0C add eax,0C
00C15374 ^ EB F6 jmp short 00C1536C
接下来重新载入程序,隐藏OD
直接按F9!!由于硬件执行断点的缘故,直接停在
00C1535F 393C06 cmp dword ptr ds:[esi+eax],edi //停在这里,给[esi+eax]清0!
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
00C15370 41 inc ecx
00C15371 83C0 0C add eax,0C
00C15374 ^ EB F6 jmp short 00C1536C
OK,取消硬件断点,操作完毕!
*****************************************************************
401000段 内存断点大法,到OEP!
这里使用前辈们的方法~~在401000段下内存断点,直接到达OEP!
004D12D4 55 push ebp //LordPE纠正ImageSize,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]
用ImportREC 1.6,选择这个进程。把OEP改为D12D4,点IT AutoSearch,CUT掉无效函数(16个),FixDump,正常运行!
Borland Delphi 6.0 - 7.0
--------------------------------------------------------------------------------
【破解总结】
经过我的测试,这个方法能够对付其他版本的标准壳!至于非标准壳当然还是得用fly大虾的办法了!
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[课程]Android-CTF解题方法汇总!