首页
社区
课程
招聘
[原创]OllyDbg手脱UPX壳web组件dll文件
发表于: 2006-4-1 20:09 6105

[原创]OllyDbg手脱UPX壳web组件dll文件

2006-4-1 20:09
6105
【目标程序】:一加了2层壳的dll文件,外层ASPack 2.12 内层是UPX,是某网站管理系统的核心dll,新近发布

名称和版本不便相告。
            
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【感    谢】: fly, rock 等好多位朋友对我的帮助。
         
【调试环境】:WinXP、Ollydbg1.10汉化版、UltraEdit、LordPE、UPXAngela
            
―――――――――――――――――――――――――――――――――
【脱壳过程】:

ASPack 这里就省略了,有很多工具可以直接脱。

开始脱UPX壳

用OD载入该dll文件

------------------------------------
11F1E98F    0080 7C240801   ADD BYTE PTR DS:[EAX+108247C],AL
//OD 载入的起始地址
11F1E995    0F85 A3010000   JNZ unpacked.11F1EB3E
11F1E99B    60              PUSHAD
11F1E99C    BE 00B0D211     MOV ESI,unpacked.11D2B000
11F1E9A1    8DBE 00602DFF   LEA EDI,DWORD PTR DS:[ESI+FF2D6000]
11F1E9A7    57              PUSH EDI
11F1E9A8    83CD FF         OR EBP,FFFFFFFF
11F1E9AB    EB 0D           JMP SHORT unpacked.11F1E9BA
11F1E9AD    90              NOP
11F1E9AE    90              NOP
------------------------------------

Ctrl+s 块寻找
------------------------------------
XCHG AH,AL
ROL EAX,10
XCHG AH,AL
ADD EAX,ESI
------------------------------------

来到这里
------------------------------------
11F1EB06    8D5E FC         LEA EBX,DWORD PTR DS:[ESI-4]
11F1EB09    31C0            XOR EAX,EAX
11F1EB0B    8A07            MOV AL,BYTE PTR DS:[EDI]  
// 2.老规矩,在这里按F2断下,F9运行,此时EDI=11EB9994 ★重定位开始地址
11F1EB0D    47              INC EDI
11F1EB0E    09C0            OR EAX,EAX
11F1EB10    74 2B           JE SHORT unpacked.11F1EB3D
// 3.注意此跳,这是重定位结束的跳转,由于在结束前有很多循环,所以我们直接到此地址断下
11F1EB12    3C EF           CMP AL,0EF
11F1EB14    77 11           JA SHORT unpacked.11F1EB27
11F1EB16    01C3            ADD EBX,EAX
11F1EB18    8B03            MOV EAX,DWORD PTR DS:[EBX]

11F1EB1A    86C4            XCHG AH,AL  // 1.我们找到的位置,向上看
11F1EB1C    C1C0 10         ROL EAX,10
11F1EB1F    86C4            XCHG AH,AL
11F1EB21    01F0            ADD EAX,ESI

11F1EB23    8903            MOV DWORD PTR DS:[EBX],EAX
-------------------------------------

我们来到11F1EB3D,按F2断下,清除原来在11F1EB0B的断点(什么,怎么清除?怎么设置就怎么清除)F9运行。
-------------------------------------
11F1EB3D    61              POPAD
// 来到此处,此时EDI=11F1D8E0 ★重定位结束,清除断点。
11F1EB3E  - E9 E99D0FFF     JMP unpacked.1101892C
11F1EB43    0000            ADD BYTE PTR DS:[EAX],AL
11F1EB45    0000            ADD BYTE PTR DS:[EAX],AL
11F1EB47    0000            ADD BYTE PTR DS:[EAX],AL

按F8 来到 1101892C
-------------------------------------
1101892C    5A              POP EDX                                  ; ntdll.7C9211A7
// OEP ★
1101892D    68 30EFDC11     PUSH unpacked.11DCEF30
11018932    68 34EFDC11     PUSH unpacked.11DCEF34
11018937    52              PUSH EDX
运行  “插件”->“OllyDump”->“脱壳在当前调试的进程” 里面数据无需修改,点击“脱壳” 保存文件

dump.dll
此过程OD可能会有几秒的停顿,生成的文件无需再修改IAT,OllyDump自动完成,并自动修改OEP

重定位的修复

    我尝试了几次,用《ReloX修复DLL脱壳重定位表的简便方法――用Ollydbg手脱Neolite加壳的DLL》中的方法

修复,未果,都到的2个dll的比较是0,没法修复。所以参考fly大哥《用Ollydbg手脱UPX加壳的DLL》手动处理。

    UPX破坏了重定位表。在第一步我们已经得到重定位表的地址了,用UltraEdit或者WinHex(Winhex没用过,

不过坛子上的高手都用这个,功能比较强,本站工具板块有下载)打开dump.dll,复制EB9994-F1D8E0之间的16

进制数值,另存为bney.bin(11000000是基址,在用Ollydump的时候会显示在弹出的对话框上。什么是基址?晕

倒,去看新手入门)
运行 看雪 老师写的辅助修复UPX加壳DLL重定位表的工具UPXAngela.exe,打开bney.bin,很快的提示pediy.bin

文件创建成功!
         
从dump.dll找块空白代码,如自UPX1段的dd2100处开始。够用就行,pediy.bin中的数据长度为8d13。
用UltraEdit把pediy.bin中的16进制数值全部复制、写入到dump.dll的dd2100处。
用LordPE修正dump.dll的重定位表RVA=00dd2100、大小=00008d13,保存之。

结果:
    本地测试ok,放到别的服务器上也没问题。如果,诸位讨厌“非常感谢您使用 XXXXXXXX。此版本由XX市

XXXXXXX有限公司开发,并完全免费提供给用户使用。”的信息,可以用getvbres搜索去掉之。

第一次解壳,作此文是为纪念、也是为了感谢pediy.com上朋友们对我的帮助。

有问题可以发mail到 yeelerr@21cn.com 我们可以一起讨论。

我还有几个问题想请教fly:
1. OllyDump插件能处理IAT,为什么老大还要自己找呢?是不是所有的壳,只要程序跑到入口,Ollydump都能修正IAT。
2. 修复后,下图中哪些段可以删除呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己坐沙发 呵呵
2006-4-1 20:12
0
雪    币: 270
活跃值: (176)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
3
1. OllyDump插件能处理IAT,为什么老大还要自己找呢?是不是所有的壳,只要程序跑到入口,Ollydump都能修正IAT。
----------------
不是所有的壳都这么温柔,要不脱壳工作就可以简单多了.
2006-4-1 20:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
意外发现,本来都是用pe_load的,vb的IAT怎么找?现在我都是用ImportREC v1.6 的“IAT AutoSearch”的
2006-4-1 20:32
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
鼓励一下
先成功脱壳,优化可以等到你熟悉PE后再做,免得删了不该删的
2006-4-1 21:33
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢,本文基本是照老大您的文章做的,接下来怎么调试啊。vb的程序,没有getwindowtexta 而且注册的错误信息是被加密的。本dll里很多字符串比较 下 __vbastrcmp断点 能断41个点 晕倒啊。
2006-4-1 22:01
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
小弟是菜鸟~

我知道你说的是哪个,但是里面有两个组件的aspack壳用脱壳软件stripper_v207f脱不了
2006-4-2 18:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
用aspackdie41脱
2006-4-3 09:17
0
雪    币: 230
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主能加我的QQ吗?
120446964  有事请教!
2006-4-3 15:08
0
雪    币: 181
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 fly 发布
鼓励一下
先成功脱壳,优化可以等到你熟悉PE后再做,免得删了不该删的

嘎嘎引用老大的话 不要上来看见是壳的区段就删除 还是先学习一下吧 然后懂的多了再 删除....
2006-4-3 15:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我是想问一下 upx0 upx1 rsrc aspack idata2各自的作用
rsrc 很好理解 是资源段  
aspack 是 外壳,既然已经脱了 size也才1000 是不是可以删了。

结果 。。。。。。  

无语。。。。。
2006-4-3 16:00
0
雪    币: 421
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
看到这儿也不太明白,那些段中的空白怎么去掉!
2006-4-3 16:59
0
雪    币: 225
活跃值: (173)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持一下!
2006-4-4 09:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
兄弟,能不能出个视频教程啊。
2006-6-15 20:29
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
15
最初由 bney 发布
我是想问一下 upx0 upx1 rsrc aspack idata2各自的作用
rsrc 很好理解 是资源段
aspack 是 外壳,既然已经脱了 size也才1000 是不是可以删了。

结果 。。。。。。
........

aspack会移动一些资源到.aspack
要去掉得重建这个段
2006-6-15 20:55
0
游客
登录 | 注册 方可回帖
返回
//