频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

13.5.4 构造重定位表

作者: 段钢等编著 出处:电子工业出版社  2008-06-22 15:30    砖    好    评论   进入论坛
阅读提示:《加密与解密》第13章主要讲的是脱壳技术,任何事物都有两面性,有加壳,就必有脱壳,本节为大家介绍构造重定位表。

13.5.4  构造重定位表

对于DLL的动态链接库文件来说,重定位数据一般是必需的。外壳很可能破坏了原始的重定位表,将原始的重定位表换个形式存储,运行时模拟PE加载器的重定位功能,对相关代码重定位。脱壳必须根据PE文档的重定位表的定义,重新构造一份新的重定位表。
先来回顾一下重定位表的结构:

IMAGE_BASE_RELOCATION STRUCT
VirtualAddress dd 0
SizeOfBlock  dd 0
Type1   dw 0; 其中:Bit15~Bit12为类型 type,Bit11~Bit0 为ItemOffset
IMAGE_RELOCATION ENDS
重定位表以1000h大小为一个段,因为ItemOffset最长为12位,即刚好为1000h。如果还有更多段,将重复上面数据结构,直到VirtualAddress为NULL,表示结束。如图13.48所示是重定位表结构的一个示意图。
  

图13.48  重定位表结构示意图

外壳重定位相关数据时,会根据外壳转储的重定位表确定要重定位的RVA,再加上当前的基址,完成代码重定位工作。本节构造重定位原理就是将这些要重定位的RVA提取出来,再将这些RVA根据重定位表的定义重新生成一份新的重定位表。根据这个原理,笔者写了一款工具来完成这个重建功能,详见光盘映像文件中的ReloREC。

OllyDbg加载EdrLib.dll,来到重定位初始化的地方,代码如下:

003E01F6  mov     esi, dword ptr [ebp+299]      ;取原重定位表RVA
003E01FC  or      esi, esi
003E01FE  je      short 003E0233
003E0200  add     esi, dword ptr [ebp+351]     ;加上载入基址
003E0206  mov     edi, dword ptr [ebp+351]     ;取当前基址
003E020C  mov     ebx, edi
003E020E  sub     edi, dword ptr [ebp+29D]   ;当前基址减去默认基址
003E0214  movzx   eax, byte ptr [esi]          ;从外壳转储的重定位表结构取数据
003E0217  jmp     short 003E022F
003E0219  cmp     al, 3                           ;是本段重定位数据第一项吗
003E021B  jnz     short 003E0227
003E021D  inc     esi                             ;指向下一个数据
003E021E  add     ebx, dword ptr [esi]           ;得到需要重定位项目的地址
003E0220  add     dword ptr [ebx], edi           ;进行重定位
003E0222  add     esi, 4
003E0225  jmp     short 003E022C
003E0227  inc     esi
003E0228  add     ebx, eax                        ;得到需要重定位项目的地址
003E022A  add     dword ptr [ebx], edi          ;进行重定位
003E022C  movzx   eax, byte ptr [esi]           ;从外壳转储的重定位表结构取数据
003E022F  or      al, al
003E0231  jnz     short 003E0219
003E0233  push    dword ptr fs:[30]
接下来在上面代码中找到一个点,将需要重定位的RVA取出来,经分析,3E022F这个点比较合适,执行到这句,EBX寄存器保存的就是需要重定位的地址。补丁的思路是找块代码空间,跳过去执行补丁代码,补丁代码可能是将重定位的地址转成RVA,并保存下来。本例选取3E0289这个地址放补丁,注意此处并不是代码空白处,是存放了外壳的一些参数,当执行3E01FC这句后,这段数据外壳已不用了。因此当OllyDbg第一次来到3E022F这句时,键入如下的补丁指令:
003E022C  movzx   eax, byte ptr [esi]      
003E022F  jmp     short 003E0289               ;补丁此处
003E0231  jnz     short 003E0219
然后在3E0289h处键入如下补丁代码:
003E0289  pushad                        ;保存各寄存器的值
003E028A  mov     edx, dword ptr [3F0000]   ;从全局变量3F0000h取一地址指针
003E0290  sub     ebx, E20000       ;减外壳基址,将ebx中的地址转成RVA
003E0296  mov     dword ptr [edx], ebx     ;将获得的RVA保存下来
003E0298  add     edx, 4        ;指向下一个DWORD地址
003E029B  mov     dword ptr [3F0000], edx    ;将指针保存到全局变量中
003E02A1  popad                          ;恢复各寄存器的值
003E02A2  or      al, al      ;原外壳的指令
003E02A4  jmp     short 003E0231    ;跳回外壳代码

这段补丁代码读者必须根据本机情况调整一些参数,例如E20000h这是外壳被加载后的基址,3F0000h这个地址是OllyDbg的插件HideOD分配的,如图13.49所示。

 
图13.49  利用OllyDbg插件分配临时空间
这个分配空间的地址是随机的,读者系统环境可能会分配到其他值。在3F0000h地址处键入3F0010h,这个地址用来存放获得的重定位RVA,如图13.50所示。
 
(点击查看大图)图13.50  利用一个全局变量当地址指针
补丁代码键入完成后,外壳在处理重定位相关代码时,这段补丁代码将需要重定位的RVA全部提取出来,执行后效果如图13.51所示。
 
(点击查看大图)图13.51  获得需要重定位地址的RVA
从3F0014h开始就是需要重定位代码的RVA,每个地址占用一个DWORD字节。切换到OllyDbg的数据窗口,将3F0014h~3F0AF8h这段需要重定位的RVA复制出来(选取数据时,最后一个DWORD数据是0),操作时单击鼠标右键,执行菜单“Binary/Binary copy”(二进制复制)功能,再运行WinHex,新建一文档,将这段二进制数据粘贴进去,粘贴时,选择“ASCII Hex”模式(见图13.52),然后将提取的数据保存为Relo.bin。Relo.bin中就是需要重定位的地址,以RVA表示。部分数据如下:
0000101D
00001031
0000106E
0000108D
000010A1
……

ReloREC这款工具,就是根据这些RVA重新生成一份新的重定位表。准备工作完成后,运行ReloREC,将Relo.bin拖放到ReloREC主界面上可打开此文件,如图13.53所示。在“Relocation’s RVA”域里填上原始重定位表的RVA地址,本例为C000h,最后单击“Fix Dump”按钮,打开上节刚修复输入表的dumped_.dll文件,即可完成重定位表的修复。
 
图13.52  WinHex里以ASCII Hex粘贴
 
图13.53  ReloREC工具界面
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
系统应用日志分析管理
主流防火墙性能对比分析
DDoS攻击防御与分析
深入了解PGP加密技术
Windows 系统进程分析
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
网络工程师职业规划与现状
网络工程师职业规划与现状
· 网络工程师职业规划与..
· 浏览器的战国时代
· 运营商封堵ADSL共享 中..
· 微软出价446亿美元收购..
· 技术人求职简历完备手册
· 开源虚拟化技术Xen
· Windows Server 2008专..
· 隐私保护技术探讨
· 绿色IT人健康生存手册
· 杀毒软件评测专题
· 访问控制列表(ACL)介绍
· Vista SP1对决XP SP3
· 华为员工自杀频频拷问..
· 2008中国互联网大会
· 勇闯IT培训黑色围城
· CISSP认证成长之路
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
· 专题:AIX操作系统管理..
· 访问控制列表(ACL)介绍
· 反垃圾邮件技术应用
· ASP.NET 2.0基础开发指..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· 路由器设置与口令恢复
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍
· PHP开发应用手册
· 专题:AIX操作系统管理..
· 交换机故障解决指南
· 三层交换技术专题