使用010进行手动加壳

news/2024/12/25 9:06:18/文章来源:https://www.cnblogs.com/zydt10/p/18629225

删除PE_Overlay

找到最后一个节的区块,在那之后的数据全部删除掉。
其实不删掉也行,不过学习起来的时候就不方便区别最后一个节和Overlay了。

网上有资料说PE_Overlay指PE结构的最后一个节的末尾位置,通常用于存储自定义资源

[!NOTE]
PE结构的基础上,增加了处理逻辑代码+自定义的资源

PE_Overlay指PE结构的最后一个节的末尾位置,通常用于存储自定义资源

PE结构的最后一个节末尾+1个字节的位置就是OverLay的起点。(last_section.Raw_offset + last_section.Raw_size) = Overlay;

PE_Overlay指的是PE(Portable Executable)文件格式中的Overlay ,它是PE文件的最后一个节(section)的末尾位置之后的额外数据。 在PE文件加载时,操作系统会将整个文件映射到内存中,其中Overlay部分通常被忽略。这部分数据可以用于存储任意类型的自定义资源,例如图像、音频、配置文件等,而不影响PE文件的正常执行。

Overlay的存在可以让开发者在不修改PE文件的基本结构的情况下,向其添加额外的数据。这对于包含了大量资源或者需要动态更新的程序来说非常有用。在安装包中,Overlay常常被用来存储自定义资源,例如软件的图标、帮助文件、配置文件等等。虽然Overlay不是PE文件的必需部分,但它为软件开发者提供了一个便捷的方式来扩展程序的功能。

关闭随机基址

将1改为0
image

添加节表

插入节表空间

在最后一个节表的地方插入n个字节大小的区域,这一块区域是为了写节表
这个n是参考 NT头的可选文件头里的FileAlignment的,如果是0x200就插入0x200个字节
快捷键:{Ctrl+Shift+I}
image

然后第一个节到最后一个节的PointerToRawData添加0x200,即节在磁盘文件上的偏移
如:400h->600h
image

Tips:如果想要插入的节表的空间足够0x28,那么就不用插入了,可以直接覆盖数据。
但是我编译出来的HelloWorld是需要插入了,就拿HelloWorld.exe学习了。
image

修改节的数量

NT头--文件头--节的数量:15改成16
image

修改SizeOfHeader

SizeOfHeaders是DOS头+PE头+区块表的总大小,后面的区块表更新了,所以这个也要更新的来着。
400h->600h
image

修改插入的节表的数据

参照着上面的填,
节表名字取名为.custom
union:实际使用的区块大小,该值可以不准确,所以申请了多少填多少,主要看壳代码的大小,学习示例申请1000h
VirtualAddresss:装载到内存中的RVA,这个要参照页对齐大小(在NT头的可选文件头里SectionAlignment),是0x1000h,所以在虚拟内存中,上一个表的0x11000+0x200=0x11200会对齐为0x12000h
SizeOfRawData:1000h,参考union,主要看壳代码的大小
PointerToRawData:6A00h,在磁盘文件中的偏移,上一个表的0x6800h+0x200h计算得到的
在节表最后的地方对Characteristics进行修改,修改可读可写可执行权限:0h->1h
image

添加节

申请空间

在最后一个节的末位插入申请的字节空间:0x1000h
image

修改节为壳的代码

为了简化学习,壳变成以下汇编

add ecx,0x17
jmp ???

其中,???为程序原始入口地址,如下图,原入口为:0x4014E0
image

然后将exe文件拖入IDA或者OD用插件patch得到对应字节码,然后在010里面修改
image

83 C1 17   
E9 D8 F4 FE FF

修改入口点

AddressOfEntryPoint表示的是代码入口的RVA地址。也就是说,把一个文件加载到内存的时候,基地址加上AddressOfEntryPoint就是我们的入口代码地址

首先清楚这个0x14E0h是怎么计算得到的:

在磁盘文件中,实际的代码地址是8E0h,位于第一个表中
image

首先得到第一个表的信息:
image

第一个表在磁盘文件中的偏移为400h,实际代码地址为8E0h,
也就是说 实际的代码地址相对于第一个表的起始地址的偏移为4E0h,
这个地址位于第一个表的第0x4E0处,然后加上第一个表的VirtualAddress虚拟起始地址0x1000h,最后就得到了0x14E0h

注意:加的不是BaseOfCode,例如:如果换成了第二个表中的代码的话,那么就是需要用第二个表的VirtualAddress了。
image

然后要将0x14E0h修改为壳的VirtualAddress+偏移为0(因为是直接就在表的开始就注入了那两条简易汇编了)=0x12000h


实际上就三个值:
第一个值:汇编所在的表的 PointerToRawData
第二个值:磁盘文件中的 入口汇编代码 的地址
第三个值:汇编所在的表的 VirtualAddress
AddressOfEntryPoint=2-1+3

image

那是将0x14E0h改为0x6A00h吗?
错误!0x6A00h对应的是磁盘文件的入口,不是映像内存的入口,需要通过以上方法计算:
第一个值:6A00h
第二个值:6A00h
第三个值:12000h
==>相对偏移=0,所以直接就是VirtualAddress=0x12000h

修改SizeOfCode

1E00h还要再加上壳的代码的大小(0x1000h)=2E00h

修改SizeOfImage

映像装入内存后的总大小,必须满足页对齐
加上壳的代码的大小,12000h->13000h
image

最后成功加壳并运行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

右键菜单添加复制完整路径和文件名

效果截图:注册表脚本实现 将以下注册表命令保存为 Clip.regWindows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\CopyFileUrl] @="复制完整路径和文件名(&F)"[HKEY_CLASSES_ROOT\*\shell\CopyFileUrl\command] @="cmd /q /c echo %1|clip.exe…

【Rust编程】如何用Rust构建Shellcode

Shellcode是一段可以直接执行的机器码,通常用于漏洞利用或攻击中。它们通常是极小的程序,能直接在目标内存中运行。Rust作为一种系统编程语言,可以用来编写高效、安全的Shellcode。以下是如何用Rust构建Shellcode的详细步骤。 1. 什么是Shellcode? Shellcode是一种直接执行…

如何解决域名转移过程中授权码错误的问题?

您在域名转移过程中遇到了授权码错误的问题。域名转移是一个相对复杂的过程,涉及到多个环节的验证和配置。为了帮助您顺利解决授权码错误的问题,以下是详细的排查步骤和解决方案。 1. 确认授权码格式 首先,确保您输入的授权码格式正确。授权码通常由字母和数字组成,长度固定…

manim边学边做--同伦变换

在Manim中,移动一个元素除了之前介绍的方法之外,还可以通过同伦运算来移动一个元素。 与普通的移动元素方式相比,使用同伦运算移动一个元素时,实际上是在考虑整个空间的连续变形过程中元素的相应变化。 这种移动不是孤立地看待元素的位置改变,而是将元素置于空间的整体结构…

破解多区域协作难题,打造无缝连接新生态,让企业效率倍增!

跨国公司在全球范围内拥有多个分支机构、生产基地和供应链,为了实现高效的运营和多区域协作,跨国公司需要建立稳定、安全的网络连接,确保不同地区之间的数据传输顺畅。例如,苹果、微软、可口可乐等全球知名企业均在全球范围内进行商品和服务的国际贸易、资本投资以及资产配…

网站迁移处理-云服务器问题

关于您提到的网站迁移过程中遇到的问题,包括数据丢失、文件丢失以及迁移前后不一致的情况,我们将为您提供详细的解决方案。确保在迁移过程中不会出现数据丢失和文件丢失,并且迁移后的网站与原网站保持一致是至关重要的。以下是具体的排查和解决步骤:备份与恢复: 在进行任何…

域名解析很久始终无法访问

关于您提到的域名解析很长时间但始终无法访问的问题,这可能是由于DNS传播延迟、服务器配置错误或解析设置不当引起的。为了帮助您顺利解决问题,建议您从以下几个方面进行排查和调整:DNS传播延迟: 域名解析通常需要一定的时间才能在全球范围内传播。DNS传播时间可能从几分钟…

无法访问网站-虚拟主机/数据库问题

关于您提到的无法访问网站的问题,可能是由多种原因引起的,包括DNS解析错误、服务器配置问题、数据库连接失败等。为了帮助您顺利解决问题,建议您从以下几个方面进行排查和调整:域名解析检查: 首先,请确认域名解析是否正常。DNS传播可能需要一定时间才能在全球范围内生效。…

Fortify:静态代码分析器

Fortify静态代码分析器,‌是一款强大的静态代码分析工具,主要用于检测源代码中的安全漏洞和缺陷。它支持多种编程语言,包括Java、C#、C、C++、Swift、PHP等,能够发现并修复潜在的代码泄露风险点‌。 兼容系统: Windows/MacOS/Linux安装步骤 一、解压补丁压缩包,把fortify…

【安全就业】2024年网络安全技术技能人才职业能力图谱+工控安全

工控安全,是指针对工业控制系统进行网络安全保障的相关工作。由于工控系统与一般的民用办公系统、Web系统等都有很大不同,因此想要做好工控安全工作,需要掌握很多工业控制领域的专业知识和能力,具体包括资产识别、工控协议、工业安全检测(漏洞挖掘)、工业自动化、主机安全…

跟着 8.6k Star 的开源数据库,搞 RAG!

过去 9 年里,HelloGitHub 月刊累计收录了 3000 多个开源项目。然而,随着项目数量的增加,不少用户反馈:“搜索功能不好用,找不到想要的项目!” 这让我意识到,仅仅收录项目是不够的,还需要通过更智能的方式,帮助用户找到心仪的开源项目。于是,我开始探索如何通过 RAG 技…

【内网】内网远程桌面密码获取

一、远程桌面历史IP获取 1.1 mstsc查看历史登录IP 1.2 注册表地址获取历史登录IP地址 1.3 ListRDPConnections 二、获取 RDP 远程桌面连接凭据 2.1 在凭据管理器中查看 Windows 凭据 2.2 使用 Mimikatz 导出远程桌面连接凭据 2.3 从 svchost 中获取 RDP 连…