首页
社区
课程
招聘
[求助]父子DLL都被加壳
发表于: 2012-11-3 11:55 4433

[求助]父子DLL都被加壳

2012-11-3 11:55
4433
整了快一星期,不得要领,望各位大牛指点一下

A.exe
  |_B.dll
           |_C.dll

1.B.dll 和C.dll都被加TMD的1.9.1.0壳
2.先脱C.dll壳,用带壳的B.dll,运行A.exe时出现TMD的信息:cannot find C.dll.plz re-install.
3.用OD载入B.dll时总失败,此时用的是脱壳后的C.dll。
4.只好用带壳C.dll,脱掉B.dll的壳。
5.用OD载入脱壳后的B.dll失败,此时用的是脱壳后的C.dll。
6.看了一下B.dll的OEP,发现有两处有问题。

100EAE86  /$ 55             PUSH EBP
100EAE87  |. 8BEC           MOV EBP,ESP
100EAE89  |. 83EC 10        SUB ESP,10
100EAE8C  |. A1 882C1410    MOV EAX,DWORD PTR DS:[10142C88]
100EAE91  |. 8365 F8 00     AND DWORD PTR SS:[EBP-8],0
100EAE95  |. 8365 FC 00     AND DWORD PTR SS:[EBP-4],0
100EAE99  |. 53             PUSH EBX
100EAE9A  |. 57             PUSH EDI
100EAE9B  |. BF 4EE640BB    MOV EDI,BB40E64E
100EAEA0  |. 3BC7           CMP EAX,EDI
100EAEA2  |. BB 0000FFFF    MOV EBX,FFFF0000
100EAEA7  |. 74 0D          JE SHORT 3GPIProx.100EAEB6
100EAEA9  |. 85C3           TEST EBX,EAX
100EAEAB  |. 74 09          JE SHORT 3GPIProx.100EAEB6
100EAEAD  |. F7D0           NOT EAX
100EAEAF  |. A3 8C2C1410    MOV DWORD PTR DS:[10142C8C],EAX
100EAEB4  |. EB 60          JMP SHORT 3GPIProx.100EAF16
100EAEB6  |> 56             PUSH ESI
100EAEB7  |. 8D45 F8        LEA EAX,DWORD PTR SS:[EBP-8]
100EAEBA  |. 50             PUSH EAX                                 ; /pFileTime
100EAEBB  |. FF15 B8F15510  CALL DWORD PTR DS:[<&kernel32.GetSystemT>; \GetSystemTimeAsFileTime
100EAEC1  |. 8B75 FC        MOV ESI,DWORD PTR SS:[EBP-4]
100EAEC4  |. 3375 F8        XOR ESI,DWORD PTR SS:[EBP-8]
100EAEC7  |. FF15 24F15510  CALL DWORD PTR DS:[<&kernel32.GetCurrent>; [GetCurrentProcessId
100EAECD  |. 33F0           XOR ESI,EAX
100EAECF  |. FF15 80F65510  CALL DWORD PTR DS:[<&C.#214>]       ;  C.#214
100EAED5  |. 33F0           XOR ESI,EAX
100EAED7  |. FF15 E8F55510  CALL DWORD PTR DS:[<&C.#64>]        ;  C.#64
省略

对比正常的VC8的OEP,上面的100EAECF 和100EAED7处应该调用下面2个
KERNEL32.GetCurrentThreadId
KERNEL32.GetTickCount

用OD跟了一下C.dll的#64

10006097   55               PUSH EBP
10006098   8BEC             MOV EBP,ESP
10006060   60               PUSHAD
10006061   9C               PUSHFD
10006078   A1 B8D70110      MOV EAX,DWORD PTR DS:[1001D7B8]
1000607D   A3 50EF0110      MOV DWORD PTR DS:[1001EF50],EAX
100060D6   9D               POPFD
100060D7   61               POPAD
100060D8   5D               POP EBP
100060D9   FF35 50EF0110    PUSH DWORD PTR DS:[1001EF50]
100060DF   51               PUSH ECX
100060E0   50               PUSH EAX
100060E1   53               PUSH EBX
100060E2   8B1D BCA20110    MOV EBX,DWORD PTR DS:[1001A2BC]
100060E8   8B8B D8D10110    MOV ECX,DWORD PTR DS:[EBX+1001D1D8]
100060EE   5B               POP EBX
100060EF   8B048D B0E70110  MOV EAX,DWORD PTR DS:[ECX*4+1001E7B0]
100060F6   8BC8             MOV ECX,EAX
100060F8   58               POP EAX
100060F9   314C24 04        XOR DWORD PTR SS:[ESP+4],ECX
100060FD   59               POP ECX
100060FE   50               PUSH EAX
100060FF   51               PUSH ECX
10006100   8B0D BCA20110    MOV ECX,DWORD PTR DS:[1001A2BC]
10006106   83C1 04          ADD ECX,4
10006109   8B81 D8D10110    MOV EAX,DWORD PTR DS:[ECX+1001D1D8]
1000610F   59               POP ECX
10006110   314424 04        XOR DWORD PTR SS:[ESP+4],EAX
10006114   58               POP EAX
10006115   C3               RETN

在上面的RETN处出现的是KERNEL32.GetTickCount

不考虑壳的种类,各位见过这种父子DLL加壳方法吗?有没有好的脱壳思路。

我的思路:
1.把B.dll的OEP处的2个C.dll的API调用强改成KERNEL32的API调用。
可是B.dll的庞大IAT里没有上述KERNEL32的两个API,手工追加很容易破坏原有IAT

2.发现B.dll的TMD处理API时,最先处理C.dll的API,其次是KERNEL32的API。脱壳后的
B.dll并不先装载C.dll,这可能是出错的原因?如何让C.dll最先装载,这样的话B.dll的OEP
能执行。
---------------------
望大牛指导!!!!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶一下,望大牛指导!!!!!
2012-11-7 09:52
0
游客
登录 | 注册 方可回帖
返回