奔跑的鱼 发表于 2008-7-9 11:46:25

用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

高手看看正确吗?小弟这里先谢谢啦!

寂寞的季节 发表于 2008-7-11 22:30:01

http://www.unpack.cn/viewthread.php?tid=2141&highlight=
http://www.unpack.cn/viewthread.php?tid=59&highlight=

奔跑的鱼 发表于 2008-7-12 09:10:12

谢谢楼上的,嘿嘿!
有你像我这样的菜鸟才有进步!
用脚本脱我的这个DLL是错误
我用ArmaFP检测DLL是这样的信息!
======== 12-07-2008 09:07:50 ========
D:\网络下\外挂制作学习\QQ华夏\zs\zs\QQHXDll.dll
★ 目标是Armadillo保护

是不是作者压缩的时候什么都没有选呀!
还有“寂寞的季节” 可以留下你的联系方式吗?
俺想找**学习!

寂寞的季节 发表于 2008-7-12 19:20:51

先试试fly的脱文 有天草的教程吗? 没有去下载那个看看。 我还是给你那个建议 先学C
页: [1]
查看完整版本: 用OD手脱 Armadillo v4.40 DLL壳到重定位信息这里就卡啦!高手帮忙看看!