首页
社区
课程
招聘
[求助]dex文件混淆dex文件中的字符串表中的字符串可以重新排列顺序吗
发表于: 2013-9-29 17:38 9326

[求助]dex文件混淆dex文件中的字符串表中的字符串可以重新排列顺序吗

2013-9-29 17:38
9326
做一个dex混淆类名,方法名,字段名的工具。

但是遇到的问题是,如果把这些类名方法名字段名 混淆成随机的字符串的话,字符串就没有排序。。

造成安装失败的问题。。

比如方法名: getA getB getD 之前是按照顺序排列的。。现在我要混淆方法名getB...

如果我改为getC安装正常,但是改为随机的,比如aaaa就不能安装。。。

这样的话,我的混淆就不给力,所以,希望能够随机混淆字符串,然后重新排序字符串。。

各位大大,这样可行吗。。。感觉很复杂。。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
2
你是直接改的DEX格式中的string表?这种方法要实现所有索引的重修改,可能还不如反汇编以后改名并且改相应的索引来得方便。
2013-9-29 20:18
0
雪    币: 446
活跃值: (723)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
Android 源码 platform\dalvik\libdex\DexSwapVerify.c 

/* Perform cross-item verification of string_id_item. */
static void* crossVerifyStringIdItem(const CheckState* state, void* ptr) {
    const DexStringId* item = ptr;

    if (!dexDataMapVerify(state->pDataMap,
                    item->stringDataOff, kDexTypeStringDataItem)) {
        return NULL;
    }

    const DexStringId* item0 = state->previousItem;
    if (item0 != NULL) {
        // Check ordering.
        const char* s0 = dexGetStringData(state->pDexFile, item0);
        const char* s1 = dexGetStringData(state->pDexFile, item);
        if (dexUtf8Cmp(s0, s1) >= 0) { // 看这里,不排序的话无法过效验
            LOGE("Out-of-order string_ids: '%s' then '%s'\n", s0, s1);
            return NULL;
        }
    }

    return (void*) (item + 1);
}
2013-9-30 09:38
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
那排序复杂度大吗?可行吗?需要修改哪些地方
2013-10-4 10:37
0
游客
登录 | 注册 方可回帖
返回
//