脱壳与加壳-加壳-7-修复重定位表

Sna1lGo 2021-08-31 原文


脱壳与加壳-加壳-7-修复重定位表


脱壳与加壳-加壳-7-修复重定位表

 

 

前面采用的方案是:给被加壳的程序添加一个新的区段,然后使用link命令把壳代码的数据段和代码段全部合并在一起合并到.text段里面,然后把壳.dll文件加载到程序的内存,然后把壳的代码段copy到被加壳的程序的壳代码段里面,然后读取壳.dll文件中的.reloc重定位表然后修复壳代码里面的重定位表,然后修改OEP使得先进入壳代码,然后再回到真正的OEP

这里需要的是实现dll的重定位表,因为dll文件肯定是需要随机基址的,有可能一个程序有好几个dll文件,不可能给某一个dll固定地址,所以这里由于dll基址改变所以需要重新修复重定位表

重定位标结构

 

 

首先:拿到对应的重定位表中的小方块的值,然后小方块的值+VirtualAddress= RVA

RVA+imageBase = va

va = xxxxxx

//这里的xxxx才是重定位表中需要修复的地址,因为va对应的就是xxxx也是一个地址

这里唯一需要注意的就是imagebase,因为需要处理的是从dll到exe的imagebase的改变 之后来修复,如果程序没有开随机基址,就可以用0x4000000来对EXE处理,但是如果开了,就不能这样处理,就需要用对应的PE文件来找到ImageBase后处理

如何动态修复壳代码的重定位表?

将被加壳程序的重定位表地址指向壳代码的重定位表地址,让操作系统来修复

.reloc重定位表

.idata导入表

这两个区段不能通过linker命令去合并

所以只有把.reloc继续也移动到区段里面

步骤

1 取消合并区段,将壳.dll所有区段移动到被加壳程序的新区段中

2 修复壳代码的重定位表指向的地址,因为原来的是壳.dll的imagebase,现在是被加壳程序的imagebase

3 修改重定位表:virtualAddress需要修复,因为这里已经是被加壳程序的rva了

4 修改dataDirctory[5].virtualAddress的值和….size的值:也就是修改重定位表指向的地址的值和重定位表的大小,这里操作系统会判断,如果有问题就不会加载

5 壳代码修复被加壳程序的重定位表:也可以解密后用操作系统来修复,当然也可以自己写壳代码来修复

代码实现

  嘿嘿,摸鱼了,不想写了

 

posted on
2021-04-26 00:55 
Sna1lGo 
阅读(78
评论(0
编辑 
收藏 
举报

 

版权声明:本文为Sna1lGo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Sna1lGo/p/14702834.html

脱壳与加壳-加壳-7-修复重定位表的更多相关文章

随机推荐

  1. 常见分布的期望和方差

    常见分布的期望和方差 辛钦大数定律(揭示了均值和数学期望的关系)...

  2. 梯度下降优化算法

    梯度下降优化算法 一、简介 二、梯度下降方法 2.1 批量梯度下降法BGD 2.2 随机梯度下降法SGD 2. […]...

  3. 什么是环境变量?为什么java要配置环境变量?

      说到环境变量,大家可能都很熟悉,但是对于开始学 java 的人,甚至到学了一段 java 时间的人,都可能 […]...

  4. 教你如何设置同时上内外网(单网卡或双网卡)

      最近给一家单位调试网络,他们有自己的内部网络,同时还有外网。现在的要求是一台电脑要同时上内外网,也就是说用 […]...

  5. 不改变图片格式和尺寸,改变图片大小

    文件–》选择“存储为WEB和设备所用格式” 在弹出的对话框中找到颜色选项 可以看到在下拉列表中列出 […]...

  6. 西安地图 百度西安高清卫星地图 最高19级 可商用地图

    西安地图 高清卫星地图的地图展示图片各自是15级别、17级别、19级别的地图,一般来说17级别的地图图片就行用 […]...

  7. Solon 1.2.12 发布,新的惊喜

    Solon 一个类似Springboot的微型开发框架。强调:克制 + 简洁 + 开放的原则。力求:更小、更快 […]...

  8. MySQL之插入数据(添加数据)-INSERT

    基本语法: INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET […]...

展开目录

目录导航