向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以相反的顺序从堆栈中弹出值,从而恢复所有寄存器值。PUSHAD和POPAD可用于执行通用寄存器的保存和恢复,而无需按下每个寄存器的PUSH和POP。同样,PUSHFD和POPFD用于保存和恢复EFLAGS寄存器。在PUSHFD指令在 code cave中以十六进制格式和二进制的方式从mstoxic生成一个反向tcp shell代码。
在shellcode执行之前和shellcode执行之后记下ESP值,以找出差异并对齐堆栈。shellcode执行之前 :
shellcode执行之后 –
差值= 0018FF68- 0018FD6C
现在通过将此值添加到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文件植入后门代码技术讨论的更多相关文章
- NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案
原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决 ...
- 20145314郑凯杰《网络对抗技术》PE文件病毒捆绑(插入捆绑)的实现
20145314郑凯杰<网络对抗技术>PE文件病毒捆绑(插入捆绑)的实现 一.本节摘要 简介:每个应用程序内部都有一定的空间(因为文件对齐余留的00字段)可以被利用,这样就可以保证被插入的 ...
- 手写PE文件(一)
DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE ...
- 深入学习PE文件(转)
PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. 基本结构. 上图便是PE文件的基本结构.(注意:DO ...
- 深入剖析PE文件
不赖猴的笔记,转载请注明出处. 深入剖析PE文件 PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一. ...
- PE知识复习之PE文件空白区添加代码
PE知识复习之PE文件空白区添加代码 一丶简介 根据上面所讲PE知识.我们已经可以实现我们的一点手段了.比如PE的入口点位置.改为我们的入口位置.并且填写我们的代码.这个就是空白区添加代码. 我们也可 ...
- PE格式文件的解析代码
#include "Global.h" ; //标志,用于表示是否为pe32+文件 ; //标志,用于表示读入的模式,若为0代表是内存读入,不为0,代表是文件打开,此时mode是文 ...
- 向PE文件中空白处添加代码
// mem.cpp : 定义控制台应用程序的入口点. //PE文件从文件加载到内存,再从内存读取,然后存盘到文件 #include "stdafx.h" #include < ...
- 在PE文件中简单注入代码,实现在启动前弹窗
获得的新知识: 1.kernel32.dll,user32.dll,ntdll.dll等一些dll在同一个PC环境下的映射到虚拟内存基址是一样的. 2.在win8以上系统上,更改PE文件的入口点要大于 ...
随机推荐
- Insertion Sort List——链表的插入排序
Sort a linked list using insertion sort. 这道题跟 Sort List 类似,要求在链表上实现一种排序算法,这道题是指定实现插入排序.插入排序是一种O(n^2) ...
- java程序中如何为一个while(true)循环计时,超过一定时间比如10个小时就退出循环?
public void execute(int hour){ long t1 = System.currentTimeMillis(); while(true){ long t2 = System.c ...
- JavaSwing 版本的简单扫雷游戏
JavaSwing 版本的简单扫雷游戏 一.扫雷游戏的基本规则 1.扫雷游戏分为初级.中级.高级和自定义四个级别. 单击游戏模式可以选择"初级"."中级".&q ...
- 三:Ionic Framework开发Android应用
第一步:添加Android平台 ionic cordova platform add android 第二步:编译Android应用 中间等待的过程有点长,需要耐心等待,生成的apk此时可以复制至平板 ...
- 洛谷——P1626 象棋比赛
P1626 象棋比赛 题目描述 有N个人要参加国际象棋比赛,该比赛要进行K场对弈.每个人最多参加两场对弈,最少参加零场对弈.每个人都有一个与其他人不相同的等级(用一个正整数来表示). 在对弈中,等级高 ...
- poj 1050(矩阵求和问题dp)
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44765 Accepted: 23700 Desc ...
- 【BZOJ 4570】【SCOI 2016】妖怪
http://www.lydsy.com/JudgeOnline/problem.php?id=4570 对于每个妖怪的两个值,看成二位平面上的一个点的横纵坐标(x,y). 因为只关心a/b,所以设经 ...
- [Codeforces #210] Tutorial
Link: Codeforces #210 传送门 A: 贪心,对每个值都取最大值,不会有其他解使答案变优 #include <bits/stdc++.h> using namespace ...
- [COCI2011-2012#7] KAMPANJA
这个题似曾相识啊,以前是用搜索剪枝+0/1边权bfs做的(题面可以参照上一篇这个题的博客). 有一类问题就是求 包含若干关键点的最小强联通子图大小是多少. 如果关键点数量是变量,那么就是NP问题了.. ...
- 【推导】【构造】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem E. Space Tourists
给你n,K,问你要选出最少几个长度为2的K进制数,才能让所有的n位K进制数删除n-2个元素后,所剩余的长度为2的子序列至少有一个是你所选定的. 如果n>K,那么根据抽屉原理,对于所有n位K进制数 ...