【APP 逆向百例】淘某热点 APP 逆向分析
字数 1126 2025-08-29 08:29:41

淘某热点APP逆向分析教学文档

一、逆向目标

  • 目标APP:淘某热点APP
  • 版本:2.6.7
  • 逆向参数:sign签名参数
  • 下载地址:aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzc4Mzc0MTc= (Base64解码后获取真实地址)

二、抓包分析

  1. 使用Charles配合SocksDroid进行抓包
  2. 在APP首页刷新操作时捕获请求
  3. 发现关键参数sign需要逆向分析

三、逆向分析方法

1. 定位sign参数生成位置

方法一:直接搜索关键字sign

方法二:Frida Hook HashMap类

function showStacks() {
    Java.perform(function () {
        console.log(Java.use("android.util.Log").getStackTraceString(
            Java.use("java.lang.Throwable").$new()
        ));
    })
}

// HashMap.put方法Hook
function hook_hashMap(){
    var hashMap = Java.use("java.util.HashMap");
    hashMap.put.implementation = function (a,b){
        if (a === "sign"){
            // 查看调用栈
            showStacks()
        }
        console.log('hook_hashMap输出-->',a,b)
        return this.put(a,b)
    }
}

Java.perform(function() {
    hook_hashMap()
});

执行命令:

frida -UF -l demo.js -o 1.txt

2. Java层分析

  1. 使用JADX反编译APK
  2. 根据堆栈信息定位到com.maihan.tredian.util.TreUtil.sign方法
  3. 验证定位是否正确:
function hook1(){
    let TreUtil = Java.use("com.maihan.tredian.util.TreUtil");
    TreUtil["sign"].implementation = function (str) {
        console.log('sign is called str: ' + str);
        let ret = this.sign(str);
        console.log('sign ret value is ' + ret);
        return ret;
    };
}

Java.perform(function () {
    hook1();
});
  1. 发现最终调用native层加密,加载tre.so文件

3. 主动调用sign方法

// sign function call_taozui(){
    let TreUtil = Java.use("com.maihan.tredian.util.TreUtil");
    // 主动调用sign方法
    let str = "android_id=9a8493c270cc2270&app_ver=87&channel=aliapp&device_id=5e9bdbbc3bc779c18511c1bb26351dad&device_udid=8f6e2b8cf3b2e3c36db8dea8368d7305&first_time=1706003627&from=app&last_time=1695744000&limit=8&mac=0E:D8:C1:64:25:37&nonce=4vlwb71740715028559&os_ver_code=30&system=1&timestamp=1740715028&with_super=0&with_video=1";
    console.log('Before calling sign, str: ' + str);
    // 调用sign方法
    let result = TreUtil.sign(str);
    console.log('After calling sign, result: ' + result);
}

四、SO层分析

1. 获取SO文件

从APK的lib目录下获取tre.so文件

2. IDA静态分析

  1. 在导出表中搜索Java,确认是静态注册
  2. 定位到sign函数
  3. 发现明显的SHA1算法特征
  4. 但直接使用标准SHA1算法计算结果不一致

3. 关键函数分析

发现j_base64_encode_new函数,可能是加密流程中的关键步骤

4. Frida Hook SO层函数

var soAddr = Module.findBaseAddress("libtre.so");
// 32位需要加1
var base64_encode_new = soAddr.add(0x13B4+1);

Interceptor.attach(base64_encode_new,{
    onEnter:function (args){
        console.log("参数1",args[0].readCString());
        console.log("参数2",hexdump(args[1]));
        console.log("参数3",args[2].toInt32());
    },
    onLeave:function (retval){
        console.log("返回值为:",retval.readCString())
    }
});

5. 加密流程分析

  1. 在查询参数后添加特定字符串(加盐)
  2. 对加盐后的字符串进行Base64编码
  3. 对Base64编码结果进行标准SHA1算法加密

五、完整加密流程

  1. 参数拼接:将所有请求参数按固定顺序拼接成字符串
  2. 加盐处理:在参数字符串后添加特定字符串
  3. Base64编码:对加盐后的字符串进行Base64编码
  4. SHA1加密:对Base64编码结果进行标准SHA1算法加密
  5. 生成sign:将SHA1结果作为最终的sign值

六、验证方法

  1. 使用标准SHA1工具验证中间结果
  2. 对比Frida Hook获取的值与计算结果
  3. 确保每一步处理与APP实际处理一致

七、注意事项

  1. 本分析仅供学习交流使用
  2. 严禁用于商业用途和非法用途
  3. 抓包内容、敏感网址、数据接口等均已做脱敏处理
  4. 不提供完整代码,防止滥用

八、总结

通过本次逆向分析,我们完整还原了淘某热点APP的sign参数生成流程,涉及Java层定位、Native层分析、加密算法还原等关键技术点。关键点在于:

  1. 使用Frida Hook快速定位关键函数
  2. Java层与Native层的交互分析
  3. 非标准加密算法的逆向分析
  4. 加盐、Base64编码、SHA1加密的组合使用

这种分析方法可以应用于其他APP的类似参数逆向场景。

淘某热点APP逆向分析教学文档 一、逆向目标 目标APP :淘某热点APP 版本 :2.6.7 逆向参数 :sign签名参数 下载地址 :aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzc4Mzc0MTc= (Base64解码后获取真实地址) 二、抓包分析 使用Charles配合SocksDroid进行抓包 在APP首页刷新操作时捕获请求 发现关键参数sign需要逆向分析 三、逆向分析方法 1. 定位sign参数生成位置 方法一:直接搜索关键字sign 方法二:Frida Hook HashMap类 执行命令: 2. Java层分析 使用JADX反编译APK 根据堆栈信息定位到 com.maihan.tredian.util.TreUtil.sign 方法 验证定位是否正确: 发现最终调用native层加密,加载 tre.so 文件 3. 主动调用sign方法 四、SO层分析 1. 获取SO文件 从APK的lib目录下获取 tre.so 文件 2. IDA静态分析 在导出表中搜索 Java ,确认是静态注册 定位到 sign 函数 发现明显的SHA1算法特征 但直接使用标准SHA1算法计算结果不一致 3. 关键函数分析 发现 j_base64_encode_new 函数,可能是加密流程中的关键步骤 4. Frida Hook SO层函数 5. 加密流程分析 在查询参数后添加特定字符串(加盐) 对加盐后的字符串进行Base64编码 对Base64编码结果进行标准SHA1算法加密 五、完整加密流程 参数拼接 :将所有请求参数按固定顺序拼接成字符串 加盐处理 :在参数字符串后添加特定字符串 Base64编码 :对加盐后的字符串进行Base64编码 SHA1加密 :对Base64编码结果进行标准SHA1算法加密 生成sign :将SHA1结果作为最终的sign值 六、验证方法 使用标准SHA1工具验证中间结果 对比Frida Hook获取的值与计算结果 确保每一步处理与APP实际处理一致 七、注意事项 本分析仅供学习交流使用 严禁用于商业用途和非法用途 抓包内容、敏感网址、数据接口等均已做脱敏处理 不提供完整代码,防止滥用 八、总结 通过本次逆向分析,我们完整还原了淘某热点APP的sign参数生成流程,涉及Java层定位、Native层分析、加密算法还原等关键技术点。关键点在于: 使用Frida Hook快速定位关键函数 Java层与Native层的交互分析 非标准加密算法的逆向分析 加盐、Base64编码、SHA1加密的组合使用 这种分析方法可以应用于其他APP的类似参数逆向场景。