向PE文件植入后门代码技术讨论

写在前面的话

这篇文章将介绍使用codecaves对PE文件植入后门代码。有几个很好的工具可以帮到你了。比如BackdoorFactory和Shelter将完成相同的工作,甚至绕过一些静态分析几个防病毒。

开始

让我们理解一些术语:

PE文件:

可移植可执行文件(PE)格式是可执行文件,目标代码和DLL的文件格式,用于32位和64位版本的Windows操作系统。

Code Cave:

根据维基百科介绍 :

Code Cave是进程内存中的一系列空字节。进程内存中的Code Cave通常是对代码的脚本函数一部分的引用,这些函数具有注入自定义指令的能力。例如,如果脚本的内存允许5个字节并且只使用3个字节,则剩余的2个字节可用于向脚本添加外部代码。“

Shellcode:

根据维基百科介绍:

“shellcode是具有payload的一小段代码。它被称为”shellcode“,因为它通常启动一个命令shell,攻击者可以通过该shell控制被入侵的机器,所以任何执行类似任务的代码都可以称为shellcode

让我们开始吧 ….你可以从这里下载我用过的Putty版本。我将使用Immunity Debugger进行调试。您可以使用任何其他调试器,如Ollydbg。首先,我们需要找到可用的Code Cave,然后插入恶意代码。您可以添加一个部分或修改现有的部分来使用Code Cave。我使用cave-miner脚本来定位可用的未使用字节。可以看到cave从00445CD5开始。我将从00445CD6注入我的shellcode。接下来,我将劫持程序的入口点并将执行流程重定向到我们的shellcode。首先,我们必须使用Lord PE或任何PE头编辑器工具使.data部分可执行。完成后,我们复制入口点的前几条指令并将其保存在记事本中。插入第一条指令JMP 00445CD6,这可以将执行流程重定向到我们新发现的code cave。通过JMP指令回复入口点之后,我们需要记录下哪些指令被覆盖,因为这些指令需要在以后恢复。现在,让我们来了解部分指令:

1.PUSHAD
2.PUSHFD
3.Shellcode
4.Stack Allignment(堆栈对齐)
5.POPFD
6.POPAD
7.RETORE instructions
8.JMP to next instruction(JMP到下一条指令PUSHAD指令)

PUSHAD的用法与写作是一样的:

Push EAXPush ECXPush EDXPush EBXPush ESPPush EBPPush ESIPush EDI

POPAD以相反的顺序从堆栈中弹出值,从而恢复所有寄存器值。PUSHADPOPAD可用于执行通用寄存器的保存和恢复,而无需按下每个寄存器的PUSH和POP。同样,PUSHFDPOPFD用于保存和恢复EFLAGS寄存器。在PUSHFD指令在 code cave中以十六进制格式和二进制的方式从mstoxic生成一个反向tcp shell代码。在shellcode执行之前和shellcode执行之后记下ESP值,以找出差异并对齐堆栈。shellcode执行之前 :shellcode执行之后 –差值= 0018FF680018FD6C现在通过将此值添加到esp来对齐堆栈。恢复后保存新修改的可执行文件并监听netcat上的反向连接。一旦我开始putty,它就卡住了,除非我关上反向连接。这是问题是因为在msfvenom shellcode中使用了一个名为WaitforSingleObject的函数。

这有一篇很好的文章关于如何解决这个问题 https://simonuvarov.com/msfvenom-reverse-tcp-waitforsingleobject/

Msfvenom shellcode使用INFINITE作为dwMilliseconds参数的值。通过将dwMilliseconds参数值从-1设置为0来修复waitforsingleobject问题(由于我使用NOP替换的dec esi指令)。最后把它修复并保存可执行文件,大功告成 !!!!!!!!!!!!!!!!

POC

最后

一旦打开putty.exe,它就会产生一个反向shell。..Happy Hacking ..

原文地址:https://www.cnblogs.com/h2zZhou/p/9448623.html

时间: 2024-10-03 02:43:19

向PE文件植入后门代码技术讨论的相关文章

NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案

原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决方案的公司,该公司的产品主要包括Xmanager, Xmanager 3D, Xshell, Xftp 和Xlpd.最近,官方在2017年7月18日发布的软件被发现有恶意后门代码,该恶意的后门代码存在于有合法签名的nssock2.dll模块中.从后门代码的分析来看,该代码是由于攻击者入侵的开发者的主

给PE文件增加执行代码

最近想写一个软件壳,需要给PE文件增加一个区段(Section),来执行一些初始化的工作.只要先学习一下PE文件的格式和结构,有个大概了解后,我想就能很容易写出相关代码.网上有很多PE格式的介绍,这里就不多介绍,直入主题. 增加的执行代码有两个地方可以放,一个是现有PE文件区段在数据对齐时有一些空隙,这样的空隙一般只能存放比较小块的代码,优点是对原有的PE文件数据改动比较小,大小也不会改变:另一个就是增加一个新的区段,这样可以放任意你想放置的代码,发挥的空间也大一些.本文的方法是先判断是否有足够

深入剖析PE文件

不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一.        基本结构. 上图便是PE文件的基本结构.(注意:DOS MZ Header和部分PE header的大小是不变的:DOS stub部分的大小是可变的.) 一个PE文件至少需要两个Section,一个是存放代码,一个存放数据.NT上的PE文件基本上有9个预定义的Section.分别是:.t

手写PE文件(一)

DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE_FILE_HEADER  20个字节 PE文件头       IMAGE_OPTIONAL_HEADER32  96个字节 数据目录表         16*8=128个字节 IMAGE_SECTION_HEADER    40个字节 块表              IMAGE_SECTION_HEADER

深入学习PE文件(转)

PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DOS MZ Header和部分PE header的大小是不变的:DOS stub部分的大小是可变的.) 一个PE文件至少需要两个Section,一个是存放代码,一个存放数据.NT上的PE文件基本上有9个预定义的Section.分别是:.text, .bss, .rdata, .data, .rsrc,

PE知识复习之PE文件空白区添加代码

PE知识复习之PE文件空白区添加代码 一丶简介 根据上面所讲PE知识.我们已经可以实现我们的一点手段了.比如PE的入口点位置.改为我们的入口位置.并且填写我们的代码.这个就是空白区添加代码. 我们也可以利用这个知识.实现PEDLL注入. 原理就是 修改入口. 跳转到我们空白区执行我们的代码.我们空白区进行重定位.调用Loadlibary. 并且load的是我们的DLL 实现功能就是 我们只要给PE注入了代码.那么这个PE程序一旦启动就会加载我们的DLL 关于PEDLL注入,后面会有博客分类中会讲

在32位PE文件中的任意一个节中添加代码

// SectionOp.cpp : 定义控制台应用程序的入口点. // /************************************************ *程序说明:在32位PE文件中的任意一个节中添加代码 *          第一个参数为PE文件 第二个参数为第N个节 * * 时间: 20170718 * Win10 VS2010 测试通过  ver 0.01 **************************************************/ #inc

PE文件数字签名信息读取存储及格式详解图之上(历史代码,贴出学习)

// 注意下图PE文件格式详解图中的 // IMAGE_NT_HEADERS------->OptionalHeader------>DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]字段 #include <windows.h> HANDLE hWriteFileHandle = NULL ; HANDLE hReadFileHandle = NULL ; HANDLE hFileMapping = NULL ; LPVOID lpVoid

手动添加PE文件数字签名信息及格式详解图之下(历史代码,贴出学习)

#include <windows.h> HANDLE hWriteFileHandle = NULL ; HANDLE hReadFileHandle = NULL ; HANDLE hFileMapping = NULL ; LPVOID lpVoidFileBaseAddress = NULL ; IMAGE_DOS_HEADER * lpidh_Dos_Header= NULL ; IMAGE_NT_HEADERS * lpinh_NTHeader= NULL ; #define RE