买车报价APP sign分析
VSole2023-01-12 11:14:54
1、charles抓包图
很明显这里面要分析的就是这个p_sign,那么直接把APK扔jadx看看,果然没那么简单加壳了还是某数字企业壳,这下难度增高了、这里省略脱壳的步骤。数字企业壳懂得都懂不可能全部脱下来的只能用哪些类就脱哪些了,略微麻烦点。
2、寻找sign如何生成的
这里直接通过p_sign是很难搜索到对应代码块的,这里大概尝试了N种方法都没有找到有价值的信息。想着通过url的地址去找对应的发请求的位置是不是可以,于是通过搜索url路径找到了一个类。
通过Hook AppUrlConstant类的getAPPDomain方法找到、然后打印堆栈信息找到跟这个方法相关的一些类,截图如下:
那么接下来就从图上这几个类分析了,最终定位在BaseRequest这个类,在这个类里找到了我们需要分析的p_sign,下面的事情就简单了看看它是怎么生成的了。
这是具体的加密方法,没啥难度了。
frida hook下入参。
D291A30K cityid 430100 kw 宝马X5 lat28.233212lon112.958713 p_appid price.android p_appversion7.4.5 p_chanel tecentmarket p_deviceid 0ac783fa_2b73_4185_871c_84c380da38d7 p_osversion 10 p_timestamp 1649402430107 type 0 D291A30K
基本上一目了然就是把appKey和请求参数加固定参数拼接起来做MD5运算,然后在对md5结果做一些处理。
frida代码也贴上:
Java.perform(function(){ let AppUrlConstant = Java.use("com.cubic.choosecar.data.AppUrlConstant"); AppUrlConstant.getAPPDomain.implementation = function(){ console.log('getAPPDomain is called'); let ret = this.getAPPDomain(); console.log('getAPPDomain ret value is ' + ret); printStack(); return ret; }; let EncryptionHelper = Java.use("com.autohome.baojia.baojialib.tools.EncryptionHelper"); EncryptionHelper.md5s.overload('java.lang.String').implementation = function(str){ console.log('md5s is called str ',str); let ret = this.md5s(str); console.log('md5s ret value is ' + ret); return ret; }; })}function printStack() { Java.perform(function () { console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new())); });}function print(maps){ var JSONObject = Java.use("org.json.JSONObject") var result = JSONObject.$new(maps) console.log(result.toString())}setImmediate(main)

VSole
网络安全专家