写在前面的话

这篇文章将介绍使用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 ..

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

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

    原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决 ...

  2. 20145314郑凯杰《网络对抗技术》PE文件病毒捆绑(插入捆绑)的实现

    20145314郑凯杰<网络对抗技术>PE文件病毒捆绑(插入捆绑)的实现 一.本节摘要 简介:每个应用程序内部都有一定的空间(因为文件对齐余留的00字段)可以被利用,这样就可以保证被插入的 ...

  3. 手写PE文件(一)

    DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE ...

  4. 深入学习PE文件(转)

    PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DO ...

  5. 深入剖析PE文件

    不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一.   ...

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

    PE知识复习之PE文件空白区添加代码 一丶简介 根据上面所讲PE知识.我们已经可以实现我们的一点手段了.比如PE的入口点位置.改为我们的入口位置.并且填写我们的代码.这个就是空白区添加代码. 我们也可 ...

  7. PE格式文件的解析代码

    #include "Global.h" ; //标志,用于表示是否为pe32+文件 ; //标志,用于表示读入的模式,若为0代表是内存读入,不为0,代表是文件打开,此时mode是文 ...

  8. 向PE文件中空白处添加代码

    // mem.cpp : 定义控制台应用程序的入口点. //PE文件从文件加载到内存,再从内存读取,然后存盘到文件 #include "stdafx.h" #include < ...

  9. 在PE文件中简单注入代码,实现在启动前弹窗

    获得的新知识: 1.kernel32.dll,user32.dll,ntdll.dll等一些dll在同一个PC环境下的映射到虚拟内存基址是一样的. 2.在win8以上系统上,更改PE文件的入口点要大于 ...

随机推荐

  1. django “如何”系列5:如何编写自定义存储系统

    如果你需要提供一个自定义的文件存储-一个常见的例子便是在远程系统上存储文件-你可以通过定义一个自己的存储类来做这件事情,你将通过一下步骤: 你自定义的存储系统一定是django.core.files. ...

  2. 切面保存web访问记录

    package com.hn.xf.device.api.rest.aspect; import com.hn.xf.device.api.rest.authorization.manager.Tok ...

  3. [PAT] 1142 Maximal Clique(25 分)

    1142 Maximal Clique(25 分) A clique is a subset of vertices of an undirected graph such that every tw ...

  4. FS Shell命令

    HDFS命令基本格式 hadoop fs -cmd args hdfs dfs -cmd args cat hadoop fs -cat URI [URI .....] 将路径指定文件的内容输出到st ...

  5. mysql-表完整性约束

    阅读目录 一 介绍 二 not null与default 三 unique 四 primary key 五 auto_increment 六 foreign key 七 总结     一 介绍 回到顶 ...

  6. 三:ZooKeeper的ZAB协议

    一:ZAB协议概述--->ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)的协 ...

  7. AC日记——贪婪大陆 洛谷 P2184

    贪婪大陆 思路: 树状数组: 跪烂.. 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int ...

  8. oracle导入DMP步骤

    oracle导入DMP步骤如下:1.已经存在的数据库需要进行以下的操作,如果不存在,可略过:    删除用户     drop user SUDMDB cascade;     删除表空间和数据文件 ...

  9. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)

    #6285. 数列分块入门 9 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给 ...

  10. Xamarin Android SDK无法更新的解决办法

    Xamarin Android SDK无法更新的解决办法   Xamarin Android SDK无法更新的解决办法,更新时候,提示警告信息:A folder failed to be moved. ...