某安X-App-Token参数逆向|基于unidbg模拟调用生成
记录使用unidbg还原so层加密函数的一次尝试
目标
使用unidbg
对APP的接口签名字段X-App-Token
进行生成。
目标APP: 6YW35a6JVjEzLjEuMQ==
1. 抓包分析
这一步很简单,使用Postern
配置charles
就可以完成抓包,找到获取动态详情的接口https://api2.coolapk.com/v6/feed/detail?id=44874711
其中id
为发文的id
,这是一个接受post
请求的接口,其中在请求headers
中有两个醒目的字段X-App-Version
和X-App-Device
,经过测试两个字段缺一不可。
缺少字段的其中任一字段或进行篡改会提示请求未验证
1 | { |
2. 反编译APP
这一步我们使用jadx
进行反编译,需要注意这个app使用了360的加固,需要进行脱壳处理,我这使用https://github.com/hluwa/frida-dexdump
进行脱壳。
安装frida-dexdump
可以直接使用pip
进行安装pip install frida-dexdump
,要注意版本需要和你使用的frida-server
版本对应。
这里提供我的版本信息供参考
版本 | 备注 | |
---|---|---|
python | 3.7 | |
frida-server | 16.0.0 | |
frida-dexdump | 2.0.1 | |
frida-tools | 12.0.1 |
之后在手机端打开某安APP,电脑端命令行中执行frida-dexdump -FU
进行脱壳,-FU
的含义是指定前台应用。
完成之后会在当前目录下的{APP_NAME
}目录中写入脱出来的dex
文件。不过这时候脱出来的dex
文件不能直接拿到jadx
中进行反编译还需要使用https://github.com/luoyesiqiu/DexRepair
进行头部修复。这里我写了一个小脚本来调用
1 |
|
将修复后的dex
文件拖入到jadx
中进行分析。
3. 分析字段生成逻辑
在jadx
中全局搜索X-App-Token
(这一步操作可能会很卡)。结果只有一条,不用纠结,就是它

点进去可以看到appToken
由getAS
函数生成
接着使用objection
对这个函数进行hook
。
步骤:
- adb 连接手机,开启frida-server
- 重开一个 shell窗口指定命令
objection -g "com.coolapk.market" explore
- 进入
objection
后在交互窗口指定命令android hooking watch class_method 'com.coolapk.market.util.AuthUtils.getAS' --dump-args --dump-return
没有问题的话会输出提示:
📢这里在使用Objection hook前有个小细节,需要先将app卸载,之后断网环境下重装app,hook成功后再打开网络。如果不这么做的话会提示你Not found class
。猜测是由于360加固的问题,断网是为了防止360加固通过网络更新。
打开网络后,我试着手机上滑动一下app,在objection的窗口那,会显示一些信息。可以看到已经打印出了getAS
函数的入参和返回值。
对比一下请求中的headers
不难发现第二个参数就是X-App-Device
返回值就是X-App-Token
。接着我们进一步分析m44554
函数
有两个关键字:
- base64
- reverse
合理猜测X-App-Device
是经过反转后的base64编码,接着我们X-App-Device
反转回去并尝试base64解码.


最终拿到x-app-device
的明文值DUzuPzp3eMbe8yfL6IeDaAfOOI0Q7ts0KSbc; ; ; ; Google; google; Pixel 3; SP1A.210812.016.C2; null
,这个字符串分了好几个部分,测试后发现第一部分的字符串可以进行篡改不应该最终结果,这里就不再深入了。
总结一下,X-App-Device
参数是由一些信息经过base64编码后又反转得到的;X-App-Token
是由getAS
函数进行加密得到的。
4. 使用unidbg进行模拟调用生成X-App-Token
在jadx中查看一下getAS
函数,可以发现这是一个由jni进行注册的函数,对应so文件的名称是native-lib
。接下来编写unidbg脚本进行模拟调用。

这里不多介绍unidbg的使用,调用脚本源码如下:
1 | package com.kuan; |
执行结果如图:
这里用的知识只是unidbg的基本使用,并没有涉及到补环境,还是非常简单的。
5. 总结
unidbg模拟调用相对于frida rpc来说成本相当低,只需要一台有java环境的服务器即可。
某安X-App-Token参数逆向|基于unidbg模拟调用生成