通过修改PE文件导入DLL

通过修改PE文件导入DLL

修改思路

在这里插入图片描述

实例

1.查看IDT信息

图1
在这里插入图片描述

由上图我们可以得到以下信息:

IDT的RVA信息在文件偏移160h处,值为84CC

IDT的大小信息在文件偏移164h处,值为64h

1.1转到IDT处查看具体信息

转到84CC也就是文件偏移76CC

在这里插入图片描述

共有5个IID结构体(每个IID20个字节,对应一个DLL相关信息),最后一个IID为NULL

由上图我们发现并没有足够空间添加我们的DLL,

那么转移IDT

2.转移IDT

由图1可知IDT在.rdata节区,

查看.rdata节区是否有多余的空白区域
图二

在这里插入图片描述

由上图可知.rdata节区的文件偏移为5200h,大小为2E00h

转到8000h(5200+2E00),这里我们从后往前看,因为节区中一般后面才会是NULL区域
在这里插入图片描述

从7E60~7FFF都是NULL,

但是还不能直接将IDT转移至此处,

需要先看看.rdata节区头的信息,看看该空白区域是不是有效的NULL区域(不一定是NULL就能用,只有在节区头中规定了的区域才是有效的)

由图2可知:.rdata节区在文件中大小为2E00h,在内存中大小为2C56h,很明显还有1AA(2E00-2C56)的空间可以使用,那么我们可以放心的将IDT转移到此处

3.修改IDT的RVA与SIZE

转到文件偏移160h:
在这里插入图片描述

修改IDT的RVA与SIZE:
在这里插入图片描述

8C80就是文件偏移7E80处,大小多了14h(20个字节),就是我们添加的DLL

4.删除绑定导入表

绑定导入表是一种提高DLL加载速度的技术,如果其值为0,则不用修改,如果不为0,那么要将其置位0,使其不存在(因为绑定导入表不存在是允许的,但如果存在,里面信息记录错误,那么会导致程序运行时出错)

在这里插入图片描述

可以看到其值为0

5.创建IDT

将之前的IDT信息(84CC处)复制到新位置8C80(文件偏移7E80):

在这里插入图片描述

6.写入DLL信息

IID中有3个重要成员需要写入:

  1. INT的RVA
  2. DLL名字的RVA
  3. IAT的RVA

在这里插入图片描述

这里用的8D00,8D10,8D20对应文件偏移7F00,7F10,7F20

正好在下面,比较方便

7.设置INT,NAME,IAT

在这里插入图片描述

8.修改IAT所在节区属性

PE文件加载到内存时,PE装载器会修改IAT,将函数实际地址写入IAT,所以IAT所在节区必须要有可写属性,这是一种方法

因为可选头的最后一个成员Data Directory数组含有IAT,所以直接转到此区域为dummy添加IAT,然后将整个IAT大小添加8个字节即可,这是另外一种方法

先试试方法一

IAT在.rdata节区,修改.rdata属性

在这里插入图片描述

将40000040与80000000(可写属性值)进行bit OR运算,得到C0000040

在这里插入图片描述

9.验证

在这里插入图片描述
在这里插入图片描述

DLL导入成功

原创易语言 版_EXE分析器[PE解析]_可分析DLL函数_导入函数_分析软件三大头_移动表 a.可分进程shuj: 1.进程列表 2.进程模块 模块名 模块句柄 模块基址 模块大小 模块路径 3.通过特征码扫描易语言的程序 b.移动EXE文件到分析器即可对这个软件进行分析         1.可以快速分析PE的一些信息 比如         当前选中程序路径:D:\Program Files (x86)\Tencent\WeChat\WeChat.exe         模块句柄:0x00400000         主模块地址:0x00400000         主模块大小:0x00005000         模块数量:74         内存镜像基址:0x00400000         内存镜像大小:0x00079000         节数量:6         所有头大小:1024 c.分析DOS头:         PE标志 标志PE头的地址 d.分析NT头 e.可以分析标准PE头         1.机器码         2.节的数量         3.PE文件的特征值         4.可选PE头的大小         5.符号的数量         ... f.分析可选PE头         1.机器型号         2.链接器版本         3.代码节的RVa         4.shuj节rva         5.内存中节对其和文件对其值         6.ImaeBase 镜像基址         7.SizeOfImage 整个程序在内存中占用的空间         8.所有头大小         9.程序入口点         ..... g.可以分析shuj目录地址         1.导入表         2.导出表         3.zy表         4.IAT表         5.绑定导入表         ...... j.可以分析节表         Name:  .text          [节名称]         VirtualSize[内存中大小(对齐前的长度)]         VirtualAddress[节区在内存中的偏移地址(RVA)]         SizeOfRawData[文件中大小(对齐后的长度)]         PointerToRawData [文件中偏移(OffSet)]         Characteristics[标志(块属性)] l.可以分析DLL软件到哪些函数,可以分析DLL导出了哪些函数 p.可以分析软件的重定位表 以及移动导出表操作,移动导入表操作,偏移转换器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值