首页
社区
课程
招聘
Armadillo加壳某DLL脱壳问题探讨
发表于: 2005-8-21 20:26 5378

Armadillo加壳某DLL脱壳问题探讨

2005-8-21 20:26
5378
Armadillo加壳某DLL脱壳问题探讨

用PEID检测为Armadillo 2.51 - 3.xx DLL Stub -> Silicon Realms Toolworks壳。

这个壳和别的Armadillo壳不一样,到壳入口时IAT已经处理完毕。所以到壳入口后再bp GetModuleHandleA+5 无法找到返回时机。

用OD载入,来到壳入口:

10037405 t>/$  55                 push ebp///壳入口。
10037406   |.  8BEC               mov ebp,esp
10037408   |.  53                 push ebx
10037409   |.  8B5D 08            mov ebx,dword ptr ss:[ebp+8]
1003740C   |.  56                 push esi
1003740D   |.  8B75 0C            mov esi,dword ptr ss:[ebp+C]
10037410   |.  57                 push edi
10037411   |.  8B7D 10            mov edi,dword ptr ss:[ebp+10]
10037414   |.  85F6               test esi,esi
10037416   |.  75 09              jnz short 10037421                                ;  10037421

到壳入口时IAT已经被加密:

1001E000  9A 22 DA 77 34 95 97 00  ?邝4?.
1001E008  B1 63 DB 77 74 91 97 00  便埙t?.
1001E010  8D 5E 97 00 3D 51 31 77  ??=Q1w
1001E018  B1 38 31 77 A0 5E 97 00  ?1w_^?
1001E020  6C 3C 19 7E D7 1C 19 7E  l<~?~
1001E028  82 1D 19 7E A7 50 19 7E  ?~?~

设置OD载入时断在系统断点,然后重新载入DLL,接着bp GetModuleHandleA+5,断下时观察堆栈:

0006D848    00974E83   返回到 00974E83 来自 kernel32.GetModuleHandleA
0006D84C    0006D984   ASCII "advapi32.dll"///注意出现这个时,再F9一下就到返回时机了。
0006D850    0B497BF8

0006D9B0    009756BA   返回到 009756BA 来自 kernel32.GetModuleHandleA///到返回时机了。

返回:

009756BA     3945 08              cmp dword ptr ss:[ebp+8],eax                      ; LOADDLL.00400000
009756BD     75 07                jnz short 009756C6
009756BF     B9 E0539900          mov ecx,9953E0
009756C4     EB 52                jmp short 00975718
009756C6     393D D8599900        cmp dword ptr ds:[9959D8],edi
009756CC     B9 D8599900          mov ecx,9959D8
009756D1     0F84 93000000        je 0097576A  ///改为JMP可以避开IAT加密。
009756D7     8B35 00B89900        mov esi,dword ptr ds:[99B800]
009756DD     A1 80F89900          mov eax,dword ptr ds:[99F880]
009756E2     F641 08 01           test byte ptr ds:[ecx+8],1
009756E6     74 0E                je short 009756F6
009756E8     8B50 5C              mov edx,dword ptr ds:[eax+5C]
009756EB     3350 48              xor edx,dword ptr ds:[eax+48]
009756EE     3350 1C              xor edx,dword ptr ds:[eax+1C]
009756F1     F6C2 80              test dl,80

重定位表处理:

0098878D     90                   nop
0098878E     90                   nop
0098878F     8B15 84F89900        mov edx,dword ptr ds:[99F884]
00988795     8B02                 mov eax,dword ptr ds:[edx]///eax=2f000 不知这个是不是重定位地址?
00988797     03D7                 add edx,edi
00988799     8915 84F89900        mov dword ptr ds:[99F884],edx
0098879F     8B0A                 mov ecx,dword ptr ds:[edx]///ecx=25f4 不知这个是不是重定位表大小?
009887A1     03D7                 add edx,edi
009887A3     3BC3                 cmp eax,ebx
009887A5     8915 84F89900        mov dword ptr ds:[99F884],edx
009887AB     74 38                je short 009887E5
009887AD     3BCB                 cmp ecx,ebx
009887AF     74 34                je short 009887E5
009887B1     8B55 C0              mov edx,dword ptr ss:[ebp-40]
009887B4     8B75 E8              mov esi,dword ptr ss:[ebp-18]
009887B7     8B52 34              mov edx,dword ptr ds:[edx+34]
009887BA     3BF2                 cmp esi,edx
009887BC     74 2A                je short 009887E8
009887BE     03C6                 add eax,esi
009887C0     51                   push ecx
009887C1     50                   push eax
009887C2     52                   push edx
009887C3     56                   push esi
009887C4     E8 A70B0000          call 00989370
009887C9     83C4 10              add esp,10
009887CC     84C0                 test al,al
009887CE     75 18                jnz short 009887E8
009887D0     8B45 08              mov eax,dword ptr ss:[ebp+8]
009887D3     68 74709900          push 997074                                       ; ASCII "Location CPG"
009887D8     8B08                 mov ecx,dword ptr ds:[eax]
009887DA     C701 07000000        mov dword ptr ds:[ecx],7
009887E0   ^ E9 1BECFFFF          jmp 00987400
009887E5     8B75 E8              mov esi,dword ptr ss:[ebp-18]
009887E8     A1 80F89900          mov eax,dword ptr ds:[99F880]
009887ED     8B48 5C              mov ecx,dword ptr ds:[eax+5C]
009887F0     3348 1C              xor ecx,dword ptr ds:[eax+1C]
009887F3     890D 88F89900        mov dword ptr ds:[99F888],ecx
009887F9     8B48 30              mov ecx,dword ptr ds:[eax+30]
009887FC     3348 14              xor ecx,dword ptr ds:[eax+14]
009887FF     3348 1C              xor ecx,dword ptr ds:[eax+1C]
00988802     51                   push ecx
00988803     FF35 84F89900        push dword ptr ds:[99F884]                        ; Ls_do.100A2660

用ALT+M,找到内存镜像,在10001000段下内存访问断点,F9后直接停在入口处:

10009B2E     55                   push ebp///入口处。
10009B2F     8BEC                 mov ebp,esp
10009B31     53                   push ebx
10009B32     8B5D 08              mov ebx,dword ptr ss:[ebp+8]
10009B35     56                   push esi
10009B36     8B75 0C              mov esi,dword ptr ss:[ebp+C]
10009B39     57                   push edi
10009B3A     8B7D 10              mov edi,dword ptr ss:[ebp+10]
10009B3D     85F6                 test esi,esi
10009B3F     75 09                jnz short 10009B4A               ; 10009B4A
10009B41     833D 40980210 00     cmp dword ptr ds:[10029840],0

这时观察IAT:

1001E000  9A 22 DA 77 D6 27 DA 77  ?邝?邝
1001E008  B1 63 DB 77 D8 17 DA 77  便埙?邝
1001E010  8D 5E 97 00 3D 51 31 77  ??=Q1w
1001E018  B1 38 31 77 A0 5E 97 00  ?1w_^?
......
1001E428  3E BF A2 71 E3 95 A2 71  >竣q?Ⅰ
1001E430  6A 5E 97 00 88 1B 32 76  j^??2v
1001E438  A0 5E 97 00 00 00 00 00  _^?....
1001E440  10 EF 01 10 48 E4 01 10  ?H?

到入口后DUMP下来,然后用ImportREC修复。修改重定位信息rva=2f000 size=25f4.

修复后用OD载入可以到入口,F9后就出错。不知问题出在哪儿,请各位指点。
附件:test.rar

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
一般是重定位的问题
2005-8-21 23:25
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
3
不知哪位兄弟能指教一下?
2005-8-22 11:24
0
雪    币: 266
活跃值: (269)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
用我上次改过的Loaddll和插件脱壳加上修正重定位表可能就十几分钟吧。也许你的 iat还不对吧。附件:dumped_.rar
2005-8-22 11:33
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
5
最初由 jingulong 发布
用我上次改过的Loaddll和插件脱壳加上修正重定位表可能就十几分钟吧。也许你的 iat还不对吧。附件:dumped_.rar


多谢老大,我再试试。
2005-8-22 14:03
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 jingulong 发布
用我上次改过的Loaddll和插件脱壳加上修正重定位表可能就十几分钟吧。也许你的 iat还不对吧。附件:dumped_.rar
厉害
2005-8-22 14:05
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
7
感谢jingulong,用你的改过的改过的Loaddll和插件脱壳成功。
2005-8-22 14:31
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
8
he loadlibraryA
然后ctrl+f2,
2005-8-22 15:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
怎么设置OD载入时断在系统断点

he loadlibraryA

od显示 未知的标识符
2005-10-24 21:20
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
10
注意大小写
he LoadLibraryA
2005-10-24 21:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
多谢老大,终于好了
2005-10-25 16:40
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
12
2005-10-25 16:48
0
游客
登录 | 注册 方可回帖
返回
//