APP版本
唯品会 7.45
打开抓包工具 charles进行分析,可以发现对于API采集需要突破当前这个参数,否则不返回信息
jadx静态分析,打开app搜索关键词api_sign
,可以发现有参数位置
跟进去上边str
赋值方法m52297b
,看看参数是怎么来的
总结:该方法里面传入上下文、MAP类型参数、2个字符串参数,返回值m52298a
对参数进行了系列处理,继续跟进这个方法
总结:这里面可以看到调用了 apiSign
方法对参数进行处理,继续跟进到方法里面
总结:该方法对传入的参数继续调用getMapParamsSign
进行处理、可以跟进这个方法查看
总结:该方法对MAp
类型数据进行迭代处理,然后还是调用getSignHash
方法处理数据
总结:该方法调用m8334gs
总结:到了这个位置、可以看到参数已经到达边界、有可能这里就是数据返回的位置,可以使用frida hook一下结果,与抓包对比一致。
从中可以看到clazz
就是com.vip.vcsp.KeyInfo
类,跟进去这个类继续查找
总结:这里调用gsNav
方法、该方法是加载了一个jni
文件,也被称为app里面的so
文件,由C语言编写的算法,被Java调用。
从上面可以看到so文件名称是private static final String LibName = "keyinfo";
,一般so文件都会打包在apk文件,可以从里面查找文件,用ida汇编工具进行查询。
打开工具,拖进去so文件即可,可以看到这个页面,工具的使用可以看之前的教程,
我们先查询导出函数,看下是否有Java层代码,说明函数是静态注册的
根进去方法、然后按F5
转伪C代码,从这里面分析业务逻辑
根进去前面的方法、可以看到这个界面,里面对入参进行一系列处理
总结:可以看到一系列对map的操作,但是不急着对这部分分析,接着往下看
总结:可以看到一个j_getByteHash
方法,通过函数名推断它极大可能就是执行摘要算法的地方。
通过名称推断是sha1算法。使用frida hook一下,可以发现参数和加密结果都能对上,那就无疑了,后续就可以算法还原了。
贴一张拿数据的结果
到此整个代码分析就算完毕了。
这里给大家准备爬虫脚本,有需要的关注我或者加V-》tl210329 进行领取。