吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23290|回复: 26
收起左侧

[原创] 简单DLL脱壳之PECompact壳脱

  [复制链接]
A-new 发表于 2018-1-3 12:45
看到求助区PECompact壳脱不下来这个帖子,就做个小教程吧,网上DLL脱壳的教程也不是很多,正好前一段整理 ExeinfoPE插件的时候也脱了好几个PECompact,这里偶也就再复习一下
长话短说进入正题
  • 找到OEP

载入od
[Asm] 纯文本查看 复制代码
00276794 >  B8 7C772700     MOV     EAX, 7C96911B.0027777C
00276799    50              PUSH    EAX
0027679A    64:FF35 0000000>PUSH    DWORD PTR FS:[0]  
002767A1    64:8925 0000000>MOV     DWORD PTR FS:[0], ESP
002767A8    33C0            XOR     EAX, EAX
002767AA    8908            MOV     DWORD PTR DS:[EAX], ECX
002767AC    50              PUSH    EAX
002767AD    45              INC     EBP
002767AE    43              INC     EBX


F8两次到0027679A用ESP定律命令窗口 hr esp 然后F9四次到
[Asm] 纯文本查看 复制代码
002777AF    53              PUSH    EBX
002777B0    51              PUSH    ECX
002777B1    57              PUSH    EDI
002777B2    56              PUSH    ESI
002777B3    52              PUSH    EDX
002777B4    8D98 57120010   LEA     EBX, DWORD PTR DS:[EAX+0x1000125>
002777BA    8B53 18         MOV     EDX, DWORD PTR DS:[EBX+0x18]
002777BD    52              PUSH    EDX
002777BE    8BE8            MOV     EBP, EAX
002777C0    6A 40           PUSH    0x40
002777C2    68 00100000     PUSH    0x1000
002777C7    FF73 04         PUSH    DWORD PTR DS:[EBX+0x4]
002777CA    6A 00           PUSH    0x0
002777CC    8B4B 10         MOV     ECX, DWORD PTR DS:[EBX+0x10]
002777CF    03CA            ADD     ECX, EDX
002777D1    8B01            MOV     EAX, DWORD PTR DS:[ECX]
002777D3    FFD0            CALL    EAX
002777D5    5A              POP     EDX
002777D6    8BF8            MOV     EDI, EAX
002777D8    50              PUSH    EAX
002777D9    52              PUSH    EDX
002777DA    8B33            MOV     ESI, DWORD PTR DS:[EBX]
002777DC    8B43 20         MOV     EAX, DWORD PTR DS:[EBX+0x20]
002777DF    03C2            ADD     EAX, EDX
002777E1    8B08            MOV     ECX, DWORD PTR DS:[EAX]
002777E3    894B 20         MOV     DWORD PTR DS:[EBX+0x20], ECX
002777E6    8B43 1C         MOV     EAX, DWORD PTR DS:[EBX+0x1C]
002777E9    03C2            ADD     EAX, EDX
002777EB    8B08            MOV     ECX, DWORD PTR DS:[EAX]
002777ED    894B 1C         MOV     DWORD PTR DS:[EBX+0x1C], ECX
002777F0    03F2            ADD     ESI, EDX
002777F2    8B4B 0C         MOV     ECX, DWORD PTR DS:[EBX+0xC]
002777F5    03CA            ADD     ECX, EDX
002777F7    8D43 1C         LEA     EAX, DWORD PTR DS:[EBX+0x1C]
002777FA    50              PUSH    EAX
002777FB    57              PUSH    EDI
002777FC    56              PUSH    ESI
002777FD    FFD1            CALL    ECX
002777FF    5A              POP     EDX
00277800    58              POP     EAX
00277801    0343 08         ADD     EAX, DWORD PTR DS:[EBX+0x8]
00277804    8BF8            MOV     EDI, EAX
00277806    52              PUSH    EDX
00277807    8BF0            MOV     ESI, EAX
00277809    8B46 FC         MOV     EAX, DWORD PTR DS:[ESI-0x4]
0027780C    83C0 04         ADD     EAX, 0x4
0027780F    2BF0            SUB     ESI, EAX
00277811    8956 08         MOV     DWORD PTR DS:[ESI+0x8], EDX
00277814    8B4B 0C         MOV     ECX, DWORD PTR DS:[EBX+0xC]
00277817    894E 14         MOV     DWORD PTR DS:[ESI+0x14], ECX
0027781A    FFD7            CALL    EDI
0027781C    5A              POP     EDX
0027781D    33C9            XOR     ECX, ECX
0027781F    66:3B4E 2A      CMP     CX, WORD PTR DS:[ESI+0x2A]
00277823    75 12           JNZ     SHORT 7C96911B.00277837
00277825    8BF0            MOV     ESI, EAX
00277827    68 00800000     PUSH    0x8000
0027782C    51              PUSH    ECX
0027782D    8B4B 14         MOV     ECX, DWORD PTR DS:[EBX+0x14]
00277830    03CA            ADD     ECX, EDX
00277832    57              PUSH    EDI
00277833    FF11            CALL    DWORD PTR DS:[ECX]
00277835    8BC6            MOV     EAX, ESI
00277837    5A              POP     EDX
00277838    5E              POP     ESI
00277839    5F              POP     EDI
0027783A    59              POP     ECX
0027783B    5B              POP     EBX
0027783C    5D              POP     EBP
0027783D    FFE0            JMP     EAX    


向下拉找到 0027783D FFE0 JMP EAX  F2下断点,删除硬件断点,再运行然后单步F8到达OEP
[Asm] 纯文本查看 复制代码
0025D670    55              PUSH    EBP
0025D671    8BEC            MOV     EBP, ESP
0025D673    83C4 C0         ADD     ESP, -0x40
0025D676    B8 9CAC2500     MOV     EAX, 7C96911B.0025AC9C           ; UNICODE "("
0025D67B    E8 70F8FCFF     CALL    7C96911B.0022CEF0
0025D680    A1 506C2600     MOV     EAX, DWORD PTR DS:[0x266C50]
0025D685    50              PUSH    EAX
0025D686    E8 39FFFCFF     CALL    7C96911B.0022D5C4
0025D68B    6A 00           PUSH    0x0
0025D68D    6A 00           PUSH    0x0
0025D68F    6A 00           PUSH    0x0
0025D691    68 38AC2500     PUSH    7C96911B.0025AC38
0025D696    6A 00           PUSH    0x0
0025D698    6A 00           PUSH    0x0
0025D69A    E8 1DFFFCFF     CALL    7C96911B.0022D5BC
0025D69F    50              PUSH    EAX
0025D6A0    E8 E7FEFCFF     CALL    7C96911B.0022D58C
0025D6A5    E8 DEABFCFF     CALL    7C96911B.00228288
0025D6AA    8BC0            MOV     EAX, EAX


接着就dump,我用od插件OllyDumpEx
Dump之前记得修正一下Image Base 顺手再点一下Fix Virtual Offfset和Get EIP as OEP
  • 修表

修表也简单说一下吧,和exe不大一样,exe的话直接选对应的进程就好了,dll的话先选od目录下的那个loaddll.exe进程,然后点Pick DLL选中调试的那个dll
然而用ImportREC或者Scylla直接AutoSearch都搜不到任何信息这就要用到修表利器UIF了
我也可以随便找个call进去看看API调用变成什么鬼样子了
[Asm] 纯文本查看 复制代码
002D02BC    B8 0E18F876     MOV     EAX, kernel32.CreateEventW
002D02C1    FFE0            JMP     EAX
002D02C3    B8 6A3BF876     MOV     EAX, kernel32.CompareStringW
002D02C8    FFE0            JMP     EAX
002D02CA    B8 E013F876     MOV     EAX, kernel32.CloseHandle
002D02CF    FFE0            JMP     EAX
002D02D1    B8 FF10F876     MOV     EAX, kernel32.Sleep
002D02D6    FFE0            JMP     EAX


找了几个发现都变成这个样子了也可以手动或者写个脚本自己修复,偶比较懒直接上UIF
填上loaddll的进程ID,代码开始结束就填上调试dll的code段就差不多了,关键是这个NEW IAT VA 这个一定要填一个dll内存范围内的地址,不然后面就麻烦了
接着用ImportREC 填上OEP、RAV、Size,获取输入表修复刚才dump的dll
  • 修复重定位

这个是最后一步,一般DLL都需修复一下,这里用到ReloX,再把此dll加载到不同基址Dump一份,然后用ReloX打开这两份Compare,最后Fix上一步完成修表的dll就好了
  • 总结

PECompact是个压缩壳,载入貌似有点复杂不要怕,绝大多数压缩壳可以用ESP定律搞定的大家记住这一点就好了。
要练手的话也可以用我稍早发布ExeinfoPE插件合集
https://www.52pojie.cn/thread-681775-1-1.html
中的PackUPX.dll这个dll来练练手,这两个要处理的基本差不多

免费评分

参与人数 13吾爱币 +21 热心值 +13 收起 理由
月清晖 + 1 + 1 用心讨论,共获提升!
Halry + 1 用心讨论,共获提升!
liuchang2017 + 1 + 1 热心回复!
Three_fish + 1 + 1 谢谢@Thanks!
我叫初恋 + 1 + 1 我很赞同!
zz0147 + 1 + 1 我很赞同!
太阳下的月亮 + 1 + 1 我很赞同!
zhaoxishm + 1 + 1 好热心 被感动了
Hmily + 8 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
朱朱你堕落了 + 3 + 1 脱DLL的教程很少,论坛基础上没有,希望版主做个动画上传下吧
__秦始皇__ + 1 一脸懵逼
byh3025 + 1 + 1 谢谢@Thanks!
whklhh + 2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| A-new 发表于 2018-1-3 17:54
ReloX,就那几个按钮,没啥可讲的,不行抽空录一下脱壳修复过程好了
轮回v 发表于 2018-6-26 12:14
A-new 发表于 2018-5-2 21:16
是不是有校验,方便的话,发出来让大家都看看

感谢A-new师傅,因为是个外挂所以也没好意思上传。大家分析的话又需要游戏之类的。挺麻烦的,昨天自己找到了解决方法,说一下。。。第一个DLL加载进去,把第二个DLL的入口点改为死循环,注入第二个之后在入口点下断。然后恢复原来的入口点,走到OEP。就不继续运行了再dump下来修复重定位就可以了。。。

我猜是不是因为DLL在完全运行的状态下有些代码会不一样,被错误的识别成了重定位表然后导致了这样的问题。。。
Hmily 发表于 2018-1-3 14:43
DLL脱壳和exe的最大差别就是处理重定位,A哥可以给大家拓展讲解下ReloX的操作,之前用不好还是找ap哥教我的。

免费评分

参与人数 1热心值 +1 收起 理由
朱朱你堕落了 + 1 还是做个动画比较好,论坛上脱DLL的,连个动画都没有。

查看全部评分

bester 发表于 2018-1-3 18:57
到OEP我比较喜欢用virtualfree,或者virtualalloc,用virtualfree断一次,直接返回到程序领空搜push 8000,ctrl+N 搜下一个,然后F2断下,走出retn,下面就是jmp eax,只是昨天看到那个iat被变形了,所以不会修了
吓死宝宝了 发表于 2018-1-3 19:02
A-new 发表于 2018-1-3 17:54
ReloX,就那几个按钮,没啥可讲的,不行抽空录一下脱壳修复过程好了

大佬讲讲DLL 带启动窗口的怎么脱壳修改吧!
weiwj520 发表于 2018-1-3 20:02
本帖最后由 weiwj520 于 2018-1-3 20:16 编辑

求教下版主,刚入门学习破解,脱壳,。
关于脱壳有个疑问:自从VMP的注册版软件放出来后,一般的(或者说相当多的)软件作者都知道用这个加密,这个对于大多数破解者来说都有太高的难度。请问,我们现在再学习这些难度较低的压缩壳类还有价值吗?

点评

不从简单的学起,上来就整vmp这类强壳,就会失去学习动力,学什么都要一步一步来,不积跬步无以至千里  详情 回复 发表于 2018-1-4 11:03
头像被屏蔽
luli1111 发表于 2018-1-4 07:50
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| A-new 发表于 2018-1-4 11:03
weiwj520 发表于 2018-1-3 20:02
求教下版主,刚入门学习破解,脱壳,。
关于脱壳有个疑问:自从VMP的注册版软件放出来后,一般的(或者说 ...

不从简单的学起,上来就整vmp这类强壳,就会失去学习动力,学什么都要一步一步来,不积跬步无以至千里
weiwj520 发表于 2018-1-4 11:26
A-new 发表于 2018-1-4 11:03
不从简单的学起,上来就整vmp这类强壳,就会失去学习动力,学什么都要一步一步来,不积跬步无以至千里

可是VMP这类强壳,越来越高的版本,似乎只有极少数绝世高手能破解,绝大多数人是无法突破的?

点评

那就多看高手的分析文章,自己整个小程序,自己加壳多练手  详情 回复 发表于 2018-1-4 11:52
 楼主| A-new 发表于 2018-1-4 11:52
weiwj520 发表于 2018-1-4 11:26
可是VMP这类强壳,越来越高的版本,似乎只有极少数绝世高手能破解,绝大多数人是无法突破的?

那就多看高手的分析文章,自己整个小程序,自己加壳多练手
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 15:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表