|
|
发表于
2026-3-27 10:11:01
来自手机
|
显示全部楼层
来自 安徽
**好的,已进入第一步分析(StubApp 核心逻辑)。**
我已经仔细阅读了 `Lcom/stub/StubApp;` 的完整 Smali 代码。**这个壳的加密方式已经基本清楚了**,而且**解密过程非常简单**(不是复杂 AES 或 VM 壳,只用了单字节 XOR)。
### 1. 加固/壳类型总结
- 这是**一个轻量级 Dex 加密壳**(非全虚拟机壳)。
- 壳入口是标准的 `com.stub.StubApp`。
- 真实 Application 类名通过 `AndroidManifest.xml` 的 meta-data(key 是 Base64 解码后的字符串)传入 StubApp,保存在 `this.a` 字段。
- 壳主要在 `e()` 方法中处理 **assets** 里的加密文件。
### 2. 加密方式(ehbidafb 文件的解密逻辑)
在 `StubApp.e()` 方法中,关键代码如下(我已提取核心逻辑):
```smali
# 遍历 assets 目录所有文件
invoke-virtual {v3, v4}, Landroid/content/res/AssetManager;->list(Ljava/lang/String;)[Ljava/lang/String;
# 如果文件名以 "ehbidafb" 开头(Base64 解码后正是 "ehbidafb")
const-string v8, "xatkxI9j7p+IxJVlaGJpZGFmYmPun4jElceYx5jEjw=="
invoke-static {v8}, Lcom/stub/StubApp;->ieabaeba(Ljava/lang/String;)Ljava/lang/String;
# 打开文件并读取全部字节
invoke-virtual {v8, v7}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
... read into byte[] v9 ...
# === 解密核心:单字节 XOR 0x66 ===
new-array v7, v8, [B
:loop
aget-byte v11, v9, v10
xor-int/lit8 v11, v11, 0x66
int-to-byte v11, v11
aput-byte v11, v7, v10
add-int/lit8 v10, v10, 1
```
**解密算法极简**:
- 对 `assets/ehbidafb*` 文件的**每一个字节**执行 `byte ^= 0x66`(即 XOR 0x66,也可写作 `byte = byte ^ 102`)。
- 解密后的数据被保存到内部私有目录:`getDir("picture", 0)` 下,文件名类似 `1.jpg`、`2.jpg` 等(其实是解密后的 dex 文件,只是伪装成 .jpg)。
- 然后通过反射修改 ClassLoader 的 `pathList.dexElements`,把这些解密后的 .jpg 文件作为 dex 加入加载路径(典型的动态加载 dex 手法)。
**注意**:
- 它会处理所有以 “ehbidafb” 开头的文件(可能有多个分片 dex)。
- 你之前提到的 “assets 文件里面两个,ehbidafb文件”,很可能就是这个加密 dex(可能还有另一个)。
### 3. 如何解密(实际操作方法)
**最简单粗暴的方式(推荐)**:
1. 把 APK 解压,找到 `assets/` 目录下的 **ehbidafb** 文件(或任何以 ehbidafb 开头的文件)。
2. 用任意十六进制编辑器或 Python 脚本对整个文件做 **XOR 0x66** 操作。
3. 解密后得到的就是原始的 classes.dex(或 classes2.dex 等)。文件头应该变成 `dex\x0A` 开头。
**Python 一键解密脚本示例**(直接复制运行):
```python
with open("ehbidafb", "rb") as f:
data = f.read()
decrypted = bytes(b ^ 0x66 for b in data)
with open("decrypted.dex", "wb") as f:
f.write(decrypted)
print("解密完成!保存为 decrypted.dex")
```
解密后可以用 **jadx**、**apktool** 或 **dex2jar** 直接打开查看真实代码。
### 4. 后续壳行为
- 解密并加载 dex 后,壳会通过反射创建真实的 Application(保存在 `this.a`),并调用它的 `attachBaseContext` 和 `onCreate`。
- 还做了 ActivityLifecycleCallbacks 注册,可能用于进一步反调试或界面控制。
- 有简单的签名校验(MD5),但不影响解密。
---
**下一步建议**:
- 你可以先用上面脚本解密 `assets/ehbidafb`(或所有 ehbidafb 开头的文件),得到原始 dex 后告诉我结果(或直接用 jadx 打开看真实包名和主逻辑)。
- 如果解密后还是有多个 dex,或者你想确认是否有 .so 参与,我可以继续帮你分析:
- 搜索 lib 目录下的 .so 文件
- 分析真实 Application 类(一旦拿到真实 dex 里的类名)
- 检查是否有更深的加密
你现在可以试着解密文件,解完后告诉我:
- 文件大小变化
- 文件头是否正常(前 8 字节)
- 用 jadx 打开后看到了什么真实包名/类名
或者直接说 “帮我看解密后的 dex” / “继续分析真实代码”,我再指导你下一步。
这个壳的保护强度**不算高**
这是Claude4.6分析的参考一下吧 |
-
查看全部评分
总评分:金币 +1
|