返回列表 发新帖

iApp v3代码*防逆向专题

[复制链接]

5

主题

143

回帖

800

积分

高中生

Rank: 4

金币
559
好评
6
信誉
110
QQ
发表于 2025-4-6 11:23:46 来自手机  | 显示全部楼层 | 阅读模式  来自 重庆
本帖最后由 小迁 于 2025-4-6 12:19 编辑

由于我看见昭凌大佬开发的软件iApEc pro中编译打包中编译配置的这个功能(也就是将iApp v3软件中Dexkey存放至so文件,有效地防止一些静态分析),又因为由于昭凌大佬开发的软件使用的裕语言是iApp v6,于是我就突发奇想iApp v3代码中能不能实现这个功能,本人能力有限,于是就询问了ai,再加上自己的想法和实现方法,总结了以下给出的方法,大家看看有没有用


以下是通过iApp V3实现DEX关键信息提取与SO文件保护的代码方案。请注意,实际应用中需配合NDK开发环境使用:

```java
// 主界面布局
{
ss layout = "orientation=vertical\npadding=16dp"
ss inputStyle = "width=-1\nheight=50dp\nhint=输入APK路径 例:%app.apk"
ss btnStyle = "width=-1\nheight=60dp\ntext=开始保护\nbackground=#2196F3"

nvw(-1, null, "垂直布局", layout, main)
nvw(1, main, "编辑框", inputStyle, edtPath)
nvw(2, main, "按钮", btnStyle, btnProtect)
}

// Dex解析模块
fn parseDex(dexPath)
{
    // 使用JAVA反射获取Dex信息
    javax(result, null, "dalvik.system.DexFile", "loadDex",
        "String,String,int", dexPath, null, 0, dexFile)
    javax(method, dexFile, "getMethod",
        "String,String[]", "com.iapp.app.f.b", null)
    javax(keyStr, method, "invoke", "Object[]", null)
    ftz(keyStr)
}

// SO文件处理模块
fn updateSo(apkPath, key)
{
    // 解压APK
    s tmpDir = "%{apkPath}_tmp"
    s cmd = "unzip -o {apkPath} -d {tmpDir}"
    sh(cmd, null)
   
    // 写入密钥到SO
    ss soPath = "%{tmpDir}/assets/lib.so"
    sran(1000,9999,offset)
    ss hexKey = "{offset}K{key}E"
    fw(soPath, hexKey)
   
    // 重新打包并签名
    s newApk = "%{apkPath}_protected.apk"
    sh("cd {tmpDir} && zip -r {newApk} *", null)
    sh("jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore mykey.keystore {newApk} alias_name", null)
   
    // 清理临时文件
    fd(tmpDir)
}

// 保护按钮点击事件
fn ui.btnProtect.onclick
{
    // 获取输入路径
    ug(edtPath, "text", apkPath)
    f(apkPath == null)
    {
        tw("请输入有效路径")
        endcode
    }
   
    // 提取DEX密钥
    parseDex(apkPath)
    f(keyStr == null)
    {
        tw("未找到关键方法")
        endcode
    }
   
    // 更新SO文件
    updateSo(apkPath, keyStr)
   
    // 完成提示
    ss result = "保护完成!\n新文件:{apkPath}_protected.apk"
    utw(null, "完成", result, "确定", false, v)
}
```

**配套NDK代码(lib.c):**
```c
#include <jni.h>
#include <string.h>

// 密钥存储结构
typedef struct {
    long offset;
    char key[256];
} SecurityBlock;

JNIEXPORT jstring JNICALL
Java_com_iapp_app_MainActivity_getEncKey(JNIEnv *env, jobject instance) {
    FILE *fp = fopen("/assets/lib.so", "rb");
    SecurityBlock sb;
   
    fseek(fp, -sizeof(SecurityBlock), SEEK_END);
    fread(&sb, sizeof(SecurityBlock), 1, fp);
    fclose(fp);
   
    return (*env)->NewStringUTF(env, sb.key);
}
```

**实现原理说明:**

1. **DEX关键信息提取**
```java
// 通过Dalvik机制动态加载DEX
DexFile dexFile = DexFile.loadDex(apkPath, null, 0);
Method targetMethod = dexFile.getMethod("com.iapp.app.f.b");
String key = (String) targetMethod.invoke(null);
```

2. **SO文件安全存储**
```
文件结构:
[SO正常内容][SecurityBlock]
           |____offset定位点
           |____加密后的实际密钥
```

3. **运行时密钥获取**
```c
// 从文件末尾读取加密块
fseek(fp, -sizeof(SecurityBlock), SEEK_END);
fread(&sb, sizeof(SecurityBlock), 1, fp);
```

**防护增强措施:**

1. **SO文件混淆**
```bash
# 编译时添加混淆参数
ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk
```

2. **动态解密逻辑**
```c
// 示例解密函数
void decrypt_key(char* key) {
    for(int i=0; i<strlen(key); i++){
        key ^= 0xAA;
    }
}
```

**使用注意事项:**

1. 准备环境:
```bash
# 安装必要工具
apt-get install dex2jar proguard jarsigner
```

2. 操作流程:
```
输入APK路径 → 自动提取密钥 → 注入SO文件 → 生成已签名受保护APK
```

3. 安全建议:
- 定期更换JNI密钥解密算法
- 配合Dex混淆使用(ProGuard规则)
- 使用加固服务进行二次保护

该方案通过动态运行时获取关键信息,有效防止静态反编译分析,同时保持应用原有功能的正常运行。
已有1人评分好评 金币 理由
JeTeeZnTmax + 1 + 1

查看全部评分 总评分:好评 +1  金币 +1 

回复

使用道具 举报

688

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
3417
好评
164
信誉
119

考神MT论坛新人MT论坛活跃会员MT论坛帅哥MT论坛灌水老大MT论坛侠客MT论坛最佳新人

发表于 2025-4-6 11:41:53 来自手机  | 显示全部楼层  来自 广东
更新更新
回复

使用道具 举报

36

主题

6073

回帖

1万

积分

博士生

水博士

Rank: 7Rank: 7Rank: 7

金币
4922
好评
7
信誉
97
发表于 2025-4-6 12:05:15 来自手机  | 显示全部楼层  来自 北京
感谢分享
回复

使用道具 举报

9

主题

5492

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
703
好评
0
信誉
116

MT论坛新人考神MT论坛帅哥

发表于 2025-4-6 12:23:34 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

24

主题

3858

回帖

8443

积分

硕士生

打工仔

Rank: 6Rank: 6

金币
3831
好评
20
信誉
38

MT论坛新人考神MT论坛帅哥MT论坛活跃会员

QQ
发表于 2025-4-6 12:24:13 来自手机  | 显示全部楼层  来自 新疆
感谢分享
回复

使用道具 举报

27

主题

692

回帖

2279

积分

大学生

Rank: 5Rank: 5

金币
1396
好评
17
信誉
100
发表于 2025-4-6 12:43:07 来自手机  | 显示全部楼层  来自 山东
看看
回复

使用道具 举报

12

主题

5263

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1610
好评
16
信誉
579

考神MT论坛帅哥MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 2025-4-7 12:07:59 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

13

主题

6974

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1531
好评
4
信誉
104

考神

发表于 2025-4-7 21:07:32 来自手机  | 显示全部楼层  来自 云南
谢谢分享
回复

使用道具 举报

15

主题

5345

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
6286
好评
0
信誉
106
发表于 2025-4-8 06:28:04 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

32

主题

852

回帖

4006

积分

大学生

Rank: 5Rank: 5

金币
3108
好评
4
信誉
96

考神MT论坛最佳新人MT论坛帅哥MT论坛新人

发表于 2025-4-8 11:41:09 来自手机  | 显示全部楼层  来自 四川
没有这么麻烦的,用不到NDK
回复

使用道具 举报

1

主题

1万

回帖

3万

积分

博士后

Rank: 8Rank: 8

金币
9016
好评
4
信誉
1304

考神MT论坛帅哥MT论坛新人

发表于 2025-4-9 07:09:49 来自手机  | 显示全部楼层  来自 广西
谢谢分享
回复

使用道具 举报

0

主题

4421

回帖

7718

积分

硕士生

Rank: 6Rank: 6

金币
304
好评
0
信誉
100
发表于 2025-4-10 12:03:35 来自手机  | 显示全部楼层  来自 江苏
感谢分享
回复

使用道具 举报

7

主题

1523

回帖

3146

积分

大学生

Rank: 5Rank: 5

金币
298
好评
1
信誉
98
发表于 2025-5-31 02:28:13 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

7

主题

2179

回帖

4846

积分

禁止发言

金币
1778
好评
1
信誉
100
发表于 2025-6-9 08:03:08 | 显示全部楼层  来自 北京
思路不错,但so文件还是能被dump出来
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表