首先老样子,我们先来到PE节表位置处,并仿写一个.hack的节,该节大小为0x1000字节,在仿写前我们需要先来计算出.hack的虚拟偏移与实际偏移,先来查询一下当前节表结构,如下:

接着我们通过公式计算一下.hack的虚拟偏移与实际偏移应该设置为多少,注意内存对齐,如加上2000是因为要遵循内存对齐,公式如下:

  • .hack 虚拟偏移:虚拟偏移(.rsrc) + 虚拟大小(.hack) => 0x0001B000 + 0x00001000 + 2000 = 1E000
  • .hack 实际偏移:实际偏移(.rsrc) + 实际大小(.rsrc) => 0x00007800 + 0x00002600 = 9E00

经过公式推导我们可得知要仿写.hack节,虚拟偏移应设置为1E000实际偏移设置为9E00节区长度为0x1000字节,将其填充到绿色位置即可,此外还需要注意节属性必须为E00000E0可读可写属性,如下图:

使用WinHEX在文件末尾添加填充0字节数据,填充长度为4096,我们的文件偏移为0x9E00,并且跳转到0xF0处将红色的06改为07,并将底部的1e000 + 1000修正为1F000 此时我们的.hack节添加完成,其对应的虚拟偏移为0x0001E000实际偏移为0x00009E00长度都是0x1000字节。

接着使用工具找到导入表的位置,如下导入表位置0x00006DE0 长度是0x00000050

我们使用WinHex定位过去,将其拷贝一份,选中右键复制选快->十六进制复制即可

接着定位到0x9E00也就是.hack节的开头位置,将其复制到这里来,这里的留白位置就是我们需要添加进来的IID数组暂时为空。

先来把仿写的位置标注上序号,这里为大家具体解释一下原因,以及为什么这样来写。

首先红色位置代表的字段是: OriginalFirstThunk 其指向中间变量FOA = 9E80而中间变量则需要指向一个Image_Thunk_Data结构,这里我们使用FOA = 9E90来模仿,该结构前两个字节为hInt值默认为0,后面则是一个导入的函数字符串。

绿色位置代表的是需要导入的DLL文件名,此处没有中间值,可以直接指向字符串。

棕色部分代表的是FirstThunk 其同样需要指向Image_Thunk_Data结构 FOA = 9E90

我们来转换一下,具体的地址:

红色OriginalFirstThunk需要指向FOA=9E80也就是RVA=0x0001E080 ,然后9E80里面需要再次指向FOA=9E90也就是指向RVA=0x0001E090,9E90里面存储的是MsgBox 你的导入函数字符串。

绿色 DllName 则直接指向FOA=9EB0 也就是指向RVA=0x0001E0B0 里面是导入DLL名称,此处是 lyshark.dll

棕色 FirstThunk 则需要指向FOA=9ED0 也就是指向 RVA= 0x0001E0D0 而9ED0则需要指向FOA=9E90也就是指向RVA=0x0001E090

由于我们增加了导入表,增加了一个结构,所以要跳转到170处修正大小30+20=50,并将导入表地址修正为FOA = 0x9E00也就是RVA =0x0001E000

最后接触输入表绑定状态,也就是将1B0-1B8处的内容全部清0即可。

当一切准备就绪以后,我们只需要编写一个DLL动态链接库,然后将该程序放入同级目录下,当程序运行后即可实现弹窗,当然读者可根据该原理自行发挥,让其具备有反弹后门的功能;

#include <Windows.h>
#include <stdio.h> extern "C"__declspec(dllexport) void MsgBox()
{
MessageBox(0, "hello lyshark", "inject", MB_OK);
} DWORD WINAPI ThreadShow(LPVOID lpParameter)
{
char szPath[MAX_PATH] = { 0 };
char szBuf[1024] = { 0 }; GetModuleFileName(0, szPath, MAX_PATH);
sprintf(szBuf, "路径: %s ---> PID: %d ", szPath, GetCurrentProcessId());
MessageBox(0, szBuf, 0, 0); return 0;
} BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
CreateThread(0, 0, ThreadShow, 0, 0, 0);
} return TRUE;
}

PE格式:新建节并插入DLL的更多相关文章

  1. <原创>在PE最后一节中插入补丁程序(附代码)

    完整文件  http://files.cnblogs.com/Files/Gotogoo/在PE最后一节中插入补丁程序.zip 在PE文件最后一节中插入补丁程序,是最简单也是最有效的一种,因为PE最后 ...

  2. PE格式第五讲,手工添加节表

    PE格式第五讲,手工添加节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 首先我们要用汇编编写一段汇编代码,用来生成 ...

  3. WinHex分析PE格式(1)

    最近在一直努力学习破解,但是发现我的基础太差了,就想学习一下PE结构.可是PE结构里的结构关系太复杂,看这老罗的WiN32汇编最后一章 翻两页又合上了..把自己的信心都搞没了.感觉自己的理解能力不行, ...

  4. PE格式第四讲,数据目录表之导入表,以及IAT表

    PE格式第四讲,数据目录表之导入表,以及IAT表 一丶IAT(地址表) 首先我们思考一个问题,程序加载的时候会调用API,比如我们以前写的标准PE 那么他到底是怎么去调用的? 他会Call 下边的Jm ...

  5. PE格式第六讲,导出表

    PE格式第六讲,导出表 请注意,下方字数比较多,其实结构挺简单,但是你如果把博客内容弄明白了,对你受益匪浅,千万不要看到字数多就懵了,其实字数多代表它重要.特别是第五步, 各种表中之间的关系. 作者: ...

  6. PE格式第七讲,重定位表

    PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...

  7. 基础篇-初步认识PE格式

    1 PE(Portable Executable)格式,是Win32环境可移植可执行文件(如exe.dll.vxd.sys和vdm等)的标准文件格式.PE格式衍生于早期建立在VAX(R)VMS(R)上 ...

  8. PE格式第八讲,TLS表(线程局部存储)

    PE格式第八讲,TLS表(线程局部存储) 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶复习线程相关知识 首先讲解 ...

  9. PE格式第九讲,资源表解析

    PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...

  10. PE格式第三讲扩展,VA,RVA,FA(RAW),模块地址的概念

    PE格式第三讲扩展,VA,RVA,FA的概念 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (vi ...

随机推荐

  1. Mysql--JOIN连表查询

    一.Join查询原理 MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法:通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表 ...

  2. 图标闪烁CSS

    图标闪烁CSS代码 <!DOCTYPE html> <html> <head> <style> #markerDiv { position: absol ...

  3. POJ: 2236 Wireless Network 题解

    POJ 2236 Wireless Network 加工并储存数据的数据结构 并查集 这是并查集的基本应用,两台修好的电脑若距离d内则加入合并.不过不小心的话会TLE,比如: #include < ...

  4. 10、SpringBoot-mybatis-plus-druid多源数据

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  5. 2023全国大学生电子设计竞赛H题全解 [原创www.cnblogs.com/helesheng]

    2023年又是全国大学生电子设计竞赛年,一如既往的指导学生死磕H题.8月2日看到公布的赛题,我自己还沾沾自喜,觉得今年学生用嵌入式系统和数字信号处理知识就可以完成这题,赛前都辅导过,应该成绩不差.哪想 ...

  6. 使用 Docker 安装 MongoDB 数据库

    by emanjusaka from https://www.emanjusaka.top/2024/01/docker-create-mongo-db 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请 ...

  7. asp.net core之Kestrel

    简介 在ASP.NET Core中,Kestrel是一个重要的组件,它是一个跨平台的.开源的Web服务器,专门为ASP.NET Core应用程序而设计.Kestrel以其轻量级和高性能而闻名,本文将介 ...

  8. 【Linux】字符驱动之sysfs接口实现

    [来源]https://blog.csdn.net/qq_20553613/article/details/104556269

  9. [转帖]AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)

    AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1) 适用于: Oracle Database Cloud Schema Service - 版本 N/A ...

  10. [转帖]Nginx内置变量以及日志格式变量参数详解

    https://www.cnblogs.com/wajika/p/6426270.html $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求 ...