TImor 发表于 2018-2-3 00:21

向节表空白区添加代码。

菜鸟一只,最近一直在学PE,刚学的往节表空白区添加代码,就想水个贴,然后算是总结一下,大牛就别看了,太菜……    用的软件是WinHex,OD,Petools,跟vs2013,感染的软件是本地的记事本notepad.exe    这是很简单的一个感染,在打开程序之前加上弹窗。先执行我们的弹窗,之后再执行软件自身的代码。   步骤如下:   
1、获取MessageBox地址,构造ShellCode代码.
2、E8 E9计算公式
3、在代码区手动添加代码
4、修改OEP,指向ShellCode.
    1,用OD随便打开一个软件,BP MessageBoxA,去断点窗口,查看MessageBox的地址,我的地址是77d507ea ,而MessageBox需要四个参数,在反汇编窗口可以看到它的硬编码为6A 00 6A 00 6A 00 6A 00 E8 Address;    2,E8 ,E9 是硬编码的 Call 和JMP,程序在硬盘中存储的方式。这是我写的一个获取这两个硬编码的测试代码:
#include<stdio.h>void Function(){      printf("123");};//执行完这个函数之后会有返回到之前的位置的跳转代码字节为 E9 D5 05 00 00int main(){                Function();//反汇编(只显示代码字节)E8 A8 FD FF FF                return 0;}

但是这个地方E8 之后的地址并不是准确的跳转地址,含有一定的计算关系,计算公式为:X = 想要跳转的地址 - E8运行时的地址+5;    3,这个时候就可以用WinHex在代码区的空白处添加代码。首先用PEtools打开notepad,查看第一个节表的信息,跟SectionAlignment和FileAlignment的大小(因为最后改的代码的地址必须是ImageBuffer的时候的地址,所以一定要看文件对齐跟内存对齐),找到第一个节表也就是代码区节表的信息找到VirtualSize跟PointerTORawData来确定代码区的尾部,看下代码区剩余的空间大小是不是可以添加我们的代码。    准备工作做完可以开始添加代码,根据第一步构造的ShellCode 我们添加的代码的格式为:6A 00 6A 00 6A 00 6A 00 E8 __ __ __ __E9 __ ____ __空白处是需要我们计算的地址 E9的原因是返回原始的OEP 不能影响程序本来的执行顺序。    现在开始计算地址,因为需要在的是运行状态的达到我们感染的目的,所以地址必须是按照运行状态的计算,首先计算E8 之后的Address而这个时候E8的地址是需要计算出程序在ImageBuffer中的地址:计算方式为:   E8运行状态的地址 =E8此时地址+ImageBase + SectionAlignment-FileAlignment之后根据公式 X = 想要跳转的地址 - E8的地址+5;计算出来 在我的电脑上是76 D4 80 8D既E8 8D 80 D4 76。现在再计算E9 以后的地址,同样是根据公式   X = 想要跳转的地址 - E8的地址+5;为E9运行状态的地址 =E9此时地址+ImageBase + SectionAlignment-FileAlignment此时的X就是 X= 原始的OEP - E9运行时的地址+5这个地方的目的是执行完之后调到原始OEPleanote://file/getImage?fileId=5a748be86e4ea83051000001这是我的计算完成添加之后的样子。4,修改OEP让程序从我们改过的地方开始运行通过PEtools查找可以看到是739Dleanote://file/getImage?fileId=5a748cc26e4ea83051000002
leanote://file/getImage?fileId=5a748be86e4ea83051000001
然后用WinHex修改程序的入口点 既为第一个6A的地址7B50+(SectionAIignment-FileAlignment)= 8750leanote://file/getImage?fileId=5a748ced6e4ea83051000003在可选PE头部找到73 9D 改成 leanote://file/getImage?fileId=5a748daf6e4ea83051000005保存文件,大功告成。打开文件实验一下leanote://file/getImage?fileId=5a748e026e4ea83051000008
leanote://file/getImage?fileId=5a748e156e4ea83051000009
正常运行,并且会先运行我们添加的代码,点击确定之后可以功能使用正常。嘿嘿,比较简单,算是水一贴,刚开始学,算是找个存储空间……如果有哪个地方不对,欢迎挑错~~~

Shark恒 发表于 2018-2-3 09:54

楼主,有几张图片打不开,重新上传一下试试。

别管我了行 发表于 2022-4-28 05:35

zg2600 发表于 2022-5-29 13:58

[吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!

zyyujq 发表于 2022-5-29 16:35

学习学习

曾经沧海 发表于 2023-1-12 13:09

感谢楼主无私分享!

一生逍遥 发表于 2023-1-26 00:53

牛啊,感谢分享
页: [1]
查看完整版本: 向节表空白区添加代码。