用OD手脱 Armadillo v4.40 DLL壳到重定位信息这里就卡啦!高手帮忙看看!
【脱壳内容】一、准备工作
1 侦壳:用PEiD查壳 Armadillo 2.51 - 3.xx DLL Stub -> Silicon Realms Toolworks
这里如何判断Arm的版本呢?记得FLY大狭说过Armadillo V4.0新增的反跟踪手段:
OllyDbg在处理调式包含格式串的消息时存在问题,被跟踪的应用程序可以使OllyDbg崩溃,或可能以进程权限执行任意指令。OutputDebugString函数可发送字符串到调试器上,然后OllyDbg会在底端显示相关状态消息,但是如果包含格式串消息,就可能使OllyDbg崩溃。Armadillo以前的版本没有此种Anti,自V4.0始才有。
2 判断进程:DLL文件加壳应该是不可以双进程,所以这里是单进程方式。
二 、脱壳
设置OD忽略全部
1 寻找 Magic Jump
设置Ollydbg忽略所有的异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志
清除断点后OD 重新载入
1001A000 55 push ebp ;停在这里
1001A001 8BEC mov ebp,esp
1001A003 53 push ebx
1001A004 56 push esi
1001A005 57 push edi
前往反汇编地址里输入GetModuleHandleA
下硬件断点
Shift+F9 运行中断后,注意看堆栈:
0006C308/0006C594
0006C30C|00975331返回到 00975331 来自 kernel32.GetModuleHandleA
0006C310|0006C448ASCII "kernel32.dll"
0006C308/0006C594
0006C30C|00975331返回到 00975331 来自 kernel32.GetModuleHandleA
0006C310|0006C448ASCII "user32.dll"
0006C308/0006C594
0006C30C|00975331返回到 00975331 来自 kernel32.GetModuleHandleA
0006C310|0006C448ASCII "advapi32.dll" ; ★注意这句
00975331 8B0D 60D89900 mov ecx,dword ptr ds: ;//返回到这里
00975337 89040E mov dword ptr ds:,eax
0097533A A1 60D89900 mov eax,dword ptr ds:
0097533F 393C06 cmp dword ptr ds:,edi
00975342 75 16 jnz short 0097535A
00975344 8D85 B4FEFFFF lea eax,dword ptr ss:
0097534A 50 push eax
0097534B FF15 B8509900 call dword ptr ds: ; kernel32.LoadLibraryA
00975351 8B0D 60D89900 mov ecx,dword ptr ds:
00975357 89040E mov dword ptr ds:,eax
0097535A A1 60D89900 mov eax,dword ptr ds:
0097535F 393C06 cmp dword ptr ds:,edi
00975362 0F84 AD000000 je 00975415 ;//这里改JMP
00975368 33C9 xor ecx,ecx
0097536A 8B03 mov eax,dword ptr ds:
0097536C 3938 cmp dword ptr ds:,edi
0097536E 74 06 je short 00975376
00975370 41 inc ecx
00975371 83C0 0C add eax,0C
00975374^ EB F6 jmp short 0097536C
改好的!
0097535F 393C06 cmp dword ptr ds:,edi
00975362 E9 AE000000 jmp 00975415
00975367 90 nop
00975368 33C9 xor ecx,ecx
然后往下
00975418 83C6 04 add esi,4
0097541B 397B FC cmp dword ptr ds:,edi
0097541E^ 0F85 CCFEFFFF jnz 009752F0
00975424 EB 03 jmp short 00975429 ;//到这里下F2断点
F9运行,断下后,返回,把这里改回来!
0097535F 393C06 cmp dword ptr ds:,edi
00975362 0F84 AD000000 je 00975415
00975368 33C9 xor ecx,ecx
取消断点!
2 获得重定位信息
前往反汇编地址里输入GetTickCount
7C80932E >BA 0000FE7F mov edx,7FFE0000 ;//这里F2
7C809333 8B02 mov eax,dword ptr ds:
7C809335 F762 04 mul dword ptr ds:
7C809338 0FACD0 18 shrd eax,edx,18
F9 运行中断后,注意看堆栈:
0006BE00 76B144E7/CALL 到 GetTickCount 来自 76B144E5
0006BE00 76B144FE/CALL 到 GetTickCount 来自 76B144FC ; ★ 注意!在这里清除断点后Alt+F9返回程序
返回的和刹那恍惚动画中的不对呀!
在 CPU 窗口按 Ctrl+S 查找如下代码
PUSH EAX
XCHG CX,CX
POP EAX
STC
也无代码!
另:我用OD脱Armadillo1.xx-2.xx单线程标准壳修护好以后运行没问题,关闭的时候弹出很多错误的提示框,怎么回事?
因为是BC++,在查打RVA和 SIZE时会比较麻烦。随便找个已知的API,Enter 跟随进去,向上向下找到开始和结束的地方:
004D910800000000
004D910C1000E3A5offset QQHXDLL.HookOn
004D911000BD6315
004D9114000DA082
004D9118000DA090
004D911C000DA0A0
004D912000000000
004D912477DA6BF0ADVAPI32.RegCloseKey
004D912877DA761BADVAPI32.RegOpenKeyExA
004D912C77DA7883ADVAPI32.RegQueryValueExA
……
004D9FE4770F4D6BOLEAUT32.VariantCopy
004D9FE8770F4E1EOLEAUT32.VariantCopyInd
004D9FEC770F4980OLEAUT32.VariantInit
004D9FF000BD6315
004D9FF458485151
004D9FF82E4C4C44
004D9FFC004C4C44zs.004C4C44
004DA00041564441
004DA00432334950
004DA0084C4C442E
OEP:14C4
RVA:D9124
RVA SIZE:9FEC-9124=ec8
高手看看正确吗?小弟这里先谢谢啦! http://www.unpack.cn/viewthread.php?tid=2141&highlight=
http://www.unpack.cn/viewthread.php?tid=59&highlight= 谢谢楼上的,嘿嘿!
有你像我这样的菜鸟才有进步!
用脚本脱我的这个DLL是错误
我用ArmaFP检测DLL是这样的信息!
======== 12-07-2008 09:07:50 ========
D:\网络下\外挂制作学习\QQ华夏\zs\zs\QQHXDll.dll
★ 目标是Armadillo保护
是不是作者压缩的时候什么都没有选呀!
还有“寂寞的季节” 可以留下你的联系方式吗?
俺想找**学习! 先试试fly的脱文 有天草的教程吗? 没有去下载那个看看。 我还是给你那个建议 先学C
页:
[1]