pe系统文件拷贝文件-(pe系统怎么拷贝文件)

来源:191路由网 2022-12-29 06:18:37

(pe系统怎么拷贝文件)

DLL注入指的是向运行中的其他进程强制插入特定的DLL文件。

可以通过修改静态的PE文件,修改输入表结构,使得程序执行时载入特定的DLL文件。

通常可执行文件需要使用其他DLL文件中的代码或数据,这些DLL文件相关的信息会保存在输入表中,因此我们通过修改PE文件中输入表相应的信息,即可实现PE文件在运行时自动载入特定的DLL文件。

pe结构分析之手工段表构建--该实验,明确段结构在windows PE程序中的作用,掌握段在文件和内存中加载的过程。实操请复制下方链接

https://www.hetianlab.com/expc.do?ce=d5bc0c11-a182-474b-8ac1-251194174436?pk_campaign=weixin-wemedia#stu

使用PEview工具可以清晰的看到程序输入表的信息

电脑

【——全网最全的网络安全学习资料包分享给爱学习的你,关注我,私信回复“领取”获取——】

1.网络安全多个方向学习路线

2.全网最全的CTF入门学习资料

3.一线大佬实战经验分享笔记

4.网安大厂面试题合集

5.红蓝对抗实战技术秘籍

6.网络安全基础入门、Linux、web安全、渗透测试方面视频

输入表

由于需要修改输入表信息,因此这里简单介绍一下输入表的结构。

在PE文件的可选头中存在这数据目录项, 里面记载了输出表、输入表等关键信息的偏移及大小。那么理所当然的PE文件在执行时也会通过数据目录项里的信息去找寻输入表。

电脑

输入表是由IMAGE_IMPORT_DESCRIPTOR结构的数组组成,简称IID,没有特定的成员指出IID项数,但是会由全为0的IID结构作为结束。

上图可以看出输入表的起始地址为0x1B1C4,这是RVA(相对偏移地址)地址,我们需要转化为文件的偏移地址才能够在文件中找到相应的内容。工具中提供了RVA与文件偏移地址的转换或者自行计算。

从上图可以看出IID结构确实是由全为0的IID结构作为结束。

输入表结构

IID结构的字段成员如下,其中OriginalFirstThunk、Name以及FirstThunk成员是我们添加DLL文件的关键。

IMAGE_IMPORT_DESCRIPTOR union characteristics DWORD OriginalFirstThunk DWORD //指向IMAGE_THUNK_DATA结构的数组 ends TimeDateStamp DWORD //时间标志 ForwarderChain DWORD //一般为0 Name DWORD //指向DLL名称的指针 FirstThunk DWORD//指向IMAGE_THUNK_DATA结构的数组IMAGE_IMPORT_DESCRIPTOR

在PE文件尚未执行过时,OriginalFirstThunk与FirstThunk字段指向相同的结构,区别在于OriginalFirstThunk不可以重写,而FirstThunk可以被重写,当PE文件执行后FirstThunk指向的结构会用于存放输入函数的真实地址。因此我们修改时将OriginalFirstThunk与FirstThunk字段指向同个地址即可。而Name字段存放的是指向DLL文件名称的指针。

OriginalFirstThunkFirstThunkName指向IMAGE_THUNK_DATA结构的数组指向IMAGE_THUNK_DATA结构的数组指向DLL名称的指针

IMAGE_THUNK_DATA

IMAGE_THUNK_DATA union u1 ForwarderString DWORD //指向一个转向者字符串的RVA Function DWORD //被输入的函数的内存地址 Oridinal DWORD //被输入的API的序数值 AddressOfData DWORD //指向IMAGE_IMPORT_BY_NAMEIMAGE_THUNK_DATA

IMAGE_THUNK_DATA结构在不同情况下的成员不同,但是重点关注AddresOfData字段,该字段指向IMAGE_IMPORT_BY_NAME结构,该结构记录的输入函数的名称。当IMAGE_THUNK_DATA值的双字的最高位为0时,表示函数以字符串类型的函数名方式输入。因此构造时高两个字节为0,低两个字节为IMAGE_IMPORT_BY_NAME结构地址即可。

IMAGE_IMPORT_BY_NAME

IMAGE_IMPORT_BY_NAME STRUCT Hint WORD //忽略设置为0 Name BYTE //输入函数名称IMAGE_IMPORT_BY_NAME

IMAGE_IMPORT_BY_NAME结构的高两字节的值忽略,后门跟着的数据直接填入DLL文件中输出的函数名称,即PE文件运行时会使用到DLL文件中函数的名称。

修改PE文件

这里准备两个文件

文件一:HelloWorld.exe,该文件仅仅是简单在屏幕输出HelloWorld!!!的字符文件二:待注入的DLL文件,show.dll,该DLL文件的功能可以根据实际情况而定,这里我准备的DLL文件可以简单的弹出一个对话框。

将HelloWorld.exe文件拖入PEview工具中,查看输入表内容。可以看到并没有载入show.dll文件。

运行HelloWorld.exe文件

开始修改HelloWorld.exe文件的思路

需要在输入表中添加额外的IID结构,该IID成员的信息为show.dll文件的信息由于需要添加IID成员,需要观察原始输入表是否由额外的空间可以容纳新的IID结构,若没有则可以选择文件中的空白区域文件末尾添加新节区

现在观察HelloWorld.exe文件的输入表,可以看见在输入表的结尾处紧跟着的是一串数据,并且大概率不是无用的数据,若我们直接在输入表结尾处添加新的IID结构必定会破坏原文件的结构,导致程序无法正常运行。

因此选择在找空白处,因为PE文件需要对齐,因此会使用大量的空字符进行填充。空白区域可以任取,但是需要记住选取的地址因为后续需要用到。并且我们需要观察该空白区域是否会被载入到内存中去。我们这里选择的是idata段末尾位置,因此需要去查询idata段信息。

如下图所示,文件中idata段的大小比映射到内存中的大小更大,因此我们可以利用这段差值填充伪造输入表。这里选择文件偏移0x8960作为输入表的起始地址。不能将0x8950作为其实地址,这样KERNEL32.DLL字符串会缺失截断符,运行时会提示找不到该DLL文件。

首先将原输入表的数据复制下来,写入文件偏移0x8960处,新增一个IID结构,Name字段填入DLL文件的名字,即show.dll,而OriginalFirstThunk与FirstThunk字段填入填入IMAGE_IMPORT_BY_NAME结构体的地址,IMAGE_IMPORT_BY_NAME的内容填入输入函数的名称,并且高两个字节需要为0。这里所有填入的地址都为RVA地址,因此需要将文件地址转化为RVA地址填入。

接着需要改写idata的权限,前面说到FirstThunk在PE文件运行后是会被改写的,因此输入表所在的区段需要具有写权限。可以看到idata不具备写权限,因此需要将写权限加上。

0x80000000为写权限的标志位,因此将原来的数据或上0x80000000即可

修改后为0xC0000000


最后由于修改了输入表结构以及所在地址并且新增了一个IID结构因此需要去数据目录项的位置修改输入表的地址及大小。

使用PEView工具查看修改后的文件电脑,能够发现修改后的文件使用工具依然能够识别出来,证明没有把文件修坏。

最后执行程序,发现show.dll文件成功注入

参考文章

加密与解密逆向工程核心原理
电脑
点击展开全文

相关阅读

pe系统文件拷贝文件-(pe系统怎么拷贝文件)

(pe系统怎么拷贝文件)DLL注入指的是向运行中的其他进程强制插入特定的DLL文件。可以通过修改静态的PE文件,修改输入表结构,使得程序执行时载入特定的DLL文件。通常可执行文件需要使用其他DLL文件中的代码或数据,这些DLL文件相关的信息会保存在输入表中,因此我们通过修改PE文件中输入表相应...

2022-12-29

win10怎么让qq显示在任务栏-(win10qq图标怎样在任务栏显示)

(win10qq图标怎样在任务栏显示)实时显示游戏帧数、截图、录屏、多重剪贴板、手写输入、定时提醒、桌面便签等等,这些实用的功能你还在找第三方软件吗?其实你所用的系统本身就有这些功能,今天我就总结了10个Windows系统自带你可能没发现的超实用功能,从此再也不用装第三方软件了。1.超级计算器...

2022-12-29

为什么u盘不能显示u盘启动不怎么办-(U盘启动不显示U盘)

(U盘启动不显示U盘)我们日常工作中使用电脑,时间长了,电脑电脑会出现卡顿,死机,甚至蓝屏,黑屏等现象,我们就需要重新安装系统。对于熟悉电脑的朋友而言,十几分钟就能搞定,而对于不太了解电脑的朋友而言,可能需要一段时间。就算我们熟悉电脑,在安装系统时有时也会遇到各种问题,最近这段时间,由于安装系统就遇到了一点麻烦。下来我就给大家说说,具体原因,以及怎么解决问题的。由于原装电脑是机械硬盘,而...

2022-12-29

u盘制作必须格式化-(u盘制作必须格式化吗)

(u盘制作必须格式化吗)在日常操作数据时,有些用户会出现误格式化硬盘。而格式化会清除存储卡上的所有数据。如果小伙伴们日常没有数据备份的话,电脑将会面临数据丢失的问题。当然每个人遇到的情况都不太可能是不一样,常见的是逻辑故障,即文件系统或分区表损坏。如果无法打开格式化的提示,这类问题经常会出现在移...

2022-12-29

rstudio数据恢复软件使用教程-()

()一、首先打开R-studio数据恢复软件,界面如下所示:R-studio软件界面二、选择要恢复数据的U盘/磁盘,点击鼠标右键,点击“scan”;点击Scan开始扫描三、选择U盘/磁盘的文件系统,指定扫描结果的存储路径(不要存到要恢复的磁盘中),然后点击“Scan”开始扫描;电脑电脑选择要扫描的文件格式四、扫描开始,如图所...

2022-12-29

191路由网 - 192.168.1.1,192.168.0.1无线路由器设置教程

版权声明:本站的文章和图片来自互联网收集,仅做分享之用如有侵权请联系站长,我们将在24小时内删除