大连在哪个网站做网上核名,seo的基本内容,wordpress小工具popular categories,无敌神马在线观看免费完整一.手动新增节添加代码
1.当预备条件都满足#xff0c;节表结尾没有相关数据时#xff1a;
现在我们将ipmsg.exe用winhex打开#xff0c;在节的最后新增一个节用于存放我们要增加的数据
注意#xff1a;飞鸽的文件对齐和内存对齐是一致的
先判断节表末尾到第一个节之间…一.手动新增节添加代码
1.当预备条件都满足节表结尾没有相关数据时
现在我们将ipmsg.exe用winhex打开在节的最后新增一个节用于存放我们要增加的数据
注意飞鸽的文件对齐和内存对齐是一致的
先判断节表末尾到第一个节之间是否够80字节可选PE头中SizeOfHeaders值为0x1000标准PE头中SizeOfOptionalHeader获取可选pe头的大小值为0xE0NumberOfSections获取节的数量为0x4DOS头中e_lfanew获取NT的地址为0xE0PE签名大小0x04标准PE头大小0x14通过0x1000 - 0xE0 0x4 0x14 0xE0 0x4 * 0x28 0xD88获取节表到节之间的空白区大小因为0xD88 0x50所以可以存下新增节表。在实际操作中我们肉眼便可判断空间是否足够
我们将.text节表注意是第一个节表的40字节复制一份到节表末尾地址0x278选中.text40字节复制再选中0x278到后面40字节数据粘贴这样我们就把.text节表内容复制一份添加到节表末尾作为新节表的40字节 注winhex中write是覆盖选中数据,paste是插入
接着为了满足Windows格式要求将新增节后面的40字节数据改为0 修改PE标准头中的NumberOfSections值为4 1 5 先看一下文件对齐和内存对齐都是0x1000所以我们新增的节大小为了方便后面修改可以设定为0x1000字节大小这已经足够存放我们想要添加的代码了。如果文件对齐和内存对齐不一样那可以选择两个的最小公倍数方便后面的修改 接着修改可选PE头中SizeOfImage值由于我们想要新增节的大小为0x1000考虑了内存对齐所以将SizeOfImage 0x1000即可0x3D000 0x1000 0x3E000 然后修改节表中的字段
Name名字改为.tttt 2E 74 74 74 74
Misc.VirtualSize直接写0x1000,即内存中对齐前的长度
VirtualAddress0x30000 0x4000 0x4000 0x4000 0x4000 0x3D000 第一个节的VirtualAddress时0x300000一共四个节每个节对齐后是0x4000大小加起来就是0xD0000
SizeOfRawData0x1000
PointerToRawData0x2C000 0xD000 0x39000
属性值不用变因为复制的.text节表已经满足了可执行的属性 现在我们要在文件第四个节末添加新节选中节末最后一个数据右键–edit–paste zero bytes–输入新节的大小十进制大小4096将其初始化为0 新增节后我们将要添加的代码加到新节中这里就使用前两节应用的shellcode就是运行飞鸽后先弹一个框再正常运行但是此时还要计算一下E8和E9后面的值
E8后面的值X 0x77D36476 - (0x400000 0x3D000 0x8 0x5) 0x778F9469 注意0x77D36476为MessageBoxA API地址
E9后面的值X 0x400000 0x1D26F - (0x400000 0x3D000 0xD 0x5) 0xFFFE025D
所以将完整的代码硬编码添加到新节中 最后将OEP的值改为0x3D000 保存运行后发现先弹框再正常打开程序成功
2.节表结尾有数据整体上移的情况
我们打开记事本复件notepad_test.exe找到节表末发现这里有一些我们不认识的数据而且是紧挨着节表的所以这种情况下我们没法在节表末新增节表 此时我们发现DOS头结尾到PE签名之间是垃圾数据如果将PE签名一直到节表末之间的所有数据整体上紧挨着DOS头后面接着将e_lfanew字段值改为0x40此时节表末便空出来了0xE8 - 0x40 0xA8字节内存足够存放80字节即两个节表大小了 选中0xE8到0x258的全部数据复制从0x40开始write覆盖0x258 - 0xE8 0x170字节数据接着将此时节表末尾多空出来的数据改为0再修改e_lfanew的值为0x40即可。此时0x1B0到0x258之间就空出来了0xA8字节在这里新增节即可 后面新增节的过程与条件都满足时一模一样不再演示 二.代码实现新增一个节并添加代码
三.编程实现扩大最后一个节并添加代码 3.整体上移后空间还不够扩大最后一个节
如果整体上移覆盖DOS Stub后空间还不够两节表宽度那么就要采用扩大最后一个节的方式。注意不要扩大其他的节因为如果不是最后一个节扩大的话其他的节扩大会造成其下面的全部节的数据偏等等诸多问题
需要修改SizeOfImage比如我想扩大500字节那么要满足内存对齐所以SizeOfImage应该 0x1000这里为了方便后面的修改直接就按照内存对齐来扩大所以扩大0x1000字节即可
接着就是修改最后一个节表的属性
VirtualAddress和PointerToRawData的值都不用改变
VirtualSizeSizeOfImage - VirtualAddress Ex再内存对齐这里为了方便Ex可以直接选文件对齐粒度和内存对齐粒度的最小公倍数这样就不用再考虑内存对齐了就是最后注入shellcode时不好判断Ex原来空白区大小是否足够存下shellcode了不过可以直接在Ex区域注入shellcode即可不用考虑原来此节的空白区
SizeOfRawData因为文件对齐一般都为0x200或0x1000这里直接等于VirtualSize即可因为VirtualSize此时肯定即是0x200的整数倍也是0x1000的整数倍
因为扩大节的目的是为了添加shellcode所以还要看最后一个节的属性是否可执行
此时就可以在最后一个节的末尾到结束这之间添加代码了