app版本 6.2.3.0
java层
抓包,请求参数signature是本次分析的目的
jadx中查找signature
继续追踪,此处可知道是对请求参数中的appid,cv,platfrom,reqid,version进行加密
继续跟进,最终跟进都signInternal方法,而此方法通过native修饰,可知加密实在util.so中进行的
so层分析
在ida中通过搜索关键词signInternal。
由下往上分析,可知道returnStr是最终答案,而returnStr是在encryptJavaString中生成的。
这里说下getApkSignature,这个方法是获取apk的签名,这里不用管。
encryptJavaString有6个参数,v4是env不管,cstr是要加密的字符串,hashCode是apk签名,固定字符串和0;
追进encryptJavaString查看,一眼可看出加密过程是在encypt中进行的。returnStra是结果,那encypt次加密后结果一定为0;
继续追进去,看到这里思路应该清晰了,有一个rsa_encrypt_key_ex的方法,这里首先怀疑是rsa对称加密。rsa加密是有一个密钥的,这里要分析密钥是什么。在图6中有一个固定的字符串,这里用这个当密钥试了试,发现不对。
而后看到有个decryptKey的方法,这里
使用frida hook decryptKey方法,在out2的返回结果就是就是密钥,hook的结果我就不展示了。密钥我放出来了。MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP2SYzFccMwZxC05Uxwei6ijFcOoJOHPHBK2oRX6ZVDSZMxb7ghH1HU63abxzcW/+OC845OlxC5XZA9AZtfgEHdYNpEGyaCHE1zu4LsWiovTLpYhV1Ya9Ks/6ynUecn1P8D3OAKaCuD3DLlawLCRmWlc2EpnwYuJIrEf/OnB7A2QIDAQAB
这里展示下最终的请求的结果。
对了,这个request_sign_bj请求参数有加密的,是AES加密,这个加密的key在java层,我这里就不展示了。