首页
社区
课程
招聘
用Ollydbg手脱PECompact加壳的DLL
发表于: 2004-5-25 17:16 26021

用Ollydbg手脱PECompact加壳的DLL

fly 活跃值
85
2004-5-25 17:16
26021

         
         
         
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
         
【调试环境】:WinXP、Ollydbg1.10C、WinHex、PEiD、LordPE、PEditor、ImportREC
         
―――――――――――――――――――――――――――――――――
【脱壳过程】:
                  
         
         
很多兄弟都不喜欢脱DLL的壳,我也是这样。DLL比EXE多了个重定位表需要修复,况且单独一个DLL连脱壳后的测试都难以彻底进行。但是,并不能因为麻烦就放弃所有,譬如人生中的许多其他事……
         
好几天没写东西了,忙乱且没心情。看到坛子里关于用Ollydbg脱DLL壳的笔记极少,所以写了这篇简单的东西放上来。其实在《加密与解密》第2版里对DLL的脱壳有很多的论述。
         
ftgg.dll有点特殊,如果用Ollydbg1.10C直接加载的话则dll不重定位,用DLL_Loader.exe加载的话则进行重定位。所以这次我们直接用Ollydbg1.10C加载这个DLL,Dump之后再来处理重定位表。
         
―――――――――――――――――――――――――――――――――
一、DUMP
         
        

10037000     EB 06               jmp short ftgg.10037008//进入OD后停在这
10037002     68 90960000         push 9690//OEP的RVA
10037007     C3                  retn
10037008     9C                  pushfd
10037009     60                  pushad
1003700A     E8 02000000         call ftgg.10037011
10009690     55                  push ebp
10009691     8BEC                mov ebp,esp
10009693     53                  push ebx
10009694     8B5D 08             mov ebx,dword ptr ss:[ebp+8]
10009697     56                  push esi
10009698     8B75 0C             mov esi,dword ptr ss:[ebp+C]
1000969B     57                  push edi
1000969C     8B7D 10             mov edi,dword ptr ss:[ebp+10]
1000969F     85F6                test esi,esi
100096A1     75 09               jnz short ftgg.100096AC
1001AFF0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
1001B000  9A 18 DA 77 EA 22 DA 77 0B 59 DA 77 F0 59 DA 77  ...w.".w.Y.w.Y.w
1001B010  00 00 00 00 19 52 31 77 00 00 00 00 B0 1B C4 77  .....R1w.......w
         
1001B390  00 00 00 00 DF 71 F7 72 26 16 F7 72 6C 71 F7 72  .....q.r&..rlq.r
1001B3A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

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

收藏
免费 10
支持
分享
最新回复 (44)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
2004-5-25 17:18
0
雪    币: 221
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gcf
3
这个DLL文件单独可以执行啊,还是好判断脱出来没有的嘛
谢谢FLY兄的贡献,我正想学一下脱DLL壳的办法,主要是输入表
和重定向表的问题,呵呵
2004-5-25 18:29
0
雪    币: 221
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gcf
4
我脱了这个dll,没有这么麻烦。
用大哥你的esp定律1秒钟到oep,然后用ollydump直接脱壳
用importsec修复,搞定!可以运行
总共没有用到1分钟........................
下面是我脱出来的,和你的不太一样

点击下载:附件!
2004-5-25 18:42
0
雪    币: 303
活跃值: (466)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习ing
2004-5-25 19:42
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
6
最初由 gcf 发布
我脱了这个dll,没有这么麻烦。
用大哥你的esp定律1秒钟到oep,然后用ollydump直接脱壳
用importsec修复,搞定!可以运行
总共没有用到1分钟........................
下面是我脱出来的,和你的不太一样

点击下载:附件!


旧版的PECompact壳直接就能看到OEP了
如果不修复重定位表的话则很难跨平台运行,你可以用DLL_Loader.exe加载看看
2004-5-25 20:40
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
最初由 pediy 发布

你的重定位表不完整,虽然一般情况下DLL不重定位可以运行,但如果其基地被占用的话就需要重定位,这种情况下就会出错的。


看雪老师,有一事请教,记得在《加密与解密》第2版里对DLL的脱壳时,说过aspack加的壳没有重定位,而upx的重定位了,但是看书上的内容时,两篇文章的基址不都是9DXXXX吗,这样不是都与其400000不一样吗?怎么判断出一个重定位了,而令一个没有呢(记得说判断其是否重定位的方法,就是先查看并记住其甚址,然后看看与加载后的是否一致,若不一致则为重定位)。另:看了一下光盘上脱出来的aspack与upx的文件,确实aspack加壳的脱壳文件在修复后其基址仍为400000,而upx的已经修改为9d0000了。并且我自己练习时也发现脱upx的,须修复一下基址(保证与当时加载时的基址一致)
2004-5-25 21:11
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢FLY!我学习学习再学习;)
2004-5-25 21:18
0
雪    币: 221
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gcf
9
呵呵,多谢两位大哥的指教,又学到了一些东西!真是佩服你们
2004-5-25 21:39
0
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
等这篇文章等了很久……
2004-5-26 10:39
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习ing
2004-5-26 11:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
hao
2004-5-26 11:26
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
13
最初由 sharenpk 发布


我的理解是,如果发现重定位了,也就是跨平台很可能会出问题,或者载入dll 的时候基地址没被占用,才能运行正常。
如果要跨平台或者基地址被占用,就必须要修重定位表

我还有个问题
比如说我第一次载入dll 基地址是10000000,走到OEP过后看下面代码
833D AC300210 00 CMP DWORD PTR DS:[100230AC], 0

第二次载入dll 基地址是20000000,走到OEP过后看下面代码
833D AC300220 00 CMP DWORD PTR DS:[200230AC], 0
脱壳出来后这些都是 绝对地址,那万一基地址被占用就要出错啊。该如何解决?


脱壳后修复重定位表就不必担心这个问题了
2004-5-26 11:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

版主:
  这个DLL古怪,它有30个导出函数,居然指向同一个地址。
导出函数表需要修复吗?
2004-5-26 12:28
0
雪    币: 210
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
目前我在破一个DLL文件,他用JPACK加的壳,通过追踪,找到了他的注册比较指令。我想直接将这条指令修改后保存文件,这样可以吗?这个重新保存的文件是否存在重建输入表的问题?这样修改是否在脱壳后才可以进行?
2004-5-26 12:47
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
16
导出函数 不需要修复吧
2004-5-26 12:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
试试这个
2004-5-26 12:59
0
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
最初由 fly 发布
……

10037000 EB 06 jmp short ftgg.10037008//进入OD后停在这
10037002 68 90960000 push 9690//OEP的RVA
10037007 C3 retn
10037008 9C pushfd
10037009 60 pushad
1003700A E8 02000000 call ftgg.10037011
……


大侠,用Ollydbg1.10C才会停在上面说的地方,而用Ollydbg1.10B不会,为什么会这样?
2004-5-26 13:07
0
雪    币: 210
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我想把我的DLL文件放上论坛,怎么办?
说明一下:
1、它检测反调试软件;
2、输入注册码后不立即比较,而是写成一个INI文件放在WINNT下;
3、根据WINNT下的SYSTEM。INI的时间信息决定使用期限。
目前我分析的只有这些。针对2,我发现其总有一条比较指令CMP EAX,7D,于是我把7D改成了EAX中的值,重新保存。但运行时没有任何反应,而且用OD调试找不到原来的地方。
我的疑问:
1、上面我说的比较指令是否为动态生成的。
2、是这个DLL文件存在反修改指令。
3、是否先脱壳再修改?
4、如果脱壳的话,我怎么断在壳的入口点,因为我发现一加载,程序就过去了,没有办法跟踪壳的加载过程。
谢谢

附件传不上来,给个地址吧:http://myfxj.yeah.net   
的公式区赠送版下载
2004-5-26 13:30
0
雪    币: 226
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
努力学习,争取早日达到如此高度。
2004-5-26 15:20
0
雪    币: 446
活跃值: (758)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
21
纳闷我去年买的《加密解密》第2版放在家里发霉,出门时忘记了带了
2004-5-26 16:42
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
22
谢谢 + 佩服  ( fly 总能找出时间来总结他的经验 )
2004-5-26 17:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
好厉害~~~~~
2004-5-26 17:49
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
24
最初由 guidaon 发布
点击下载:附件!


试试这个


呵呵,兄弟,别说是需要Key的DLL了,就是需要Key的Armadillo壳EXE文件也无法脱壳

当然,你如果能搞到能用Key或许还有希望试试
2004-5-26 23:01
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
25
最初由 zhangld 发布
目前我在破一个DLL文件,他用JPACK加的壳,通过追踪,找到了他的注册比较指令。我想直接将这条指令修改后保存文件,这样可以吗?这个重新保存的文件是否存在重建输入表的问题?这样修改是否在脱壳后才可以进行?


应该是需要脱壳后才能修改保存的
DLL由于重定位的问题,用SMC可能也不行
2004-5-27 00:08
0
游客
登录 | 注册 方可回帖
返回
//