app版本 6.2.3.0
java層
抓包,請(qǐng)求參數(shù)signature是本次分析的目的

jadx中查找signature

繼續(xù)追蹤,此處可知道是對(duì)請(qǐng)求參數(shù)中的appid,cv,platfrom,reqid,version進(jìn)行加密

繼續(xù)跟進(jìn),最終跟進(jìn)都signInternal方法,而此方法通過native修飾,可知加密實(shí)在util.so中進(jìn)行的


so層分析
在ida中通過搜索關(guān)鍵詞signInternal。
由下往上分析,可知道returnStr是最終答案,而returnStr是在encryptJavaString中生成的。
這里說下getApkSignature,這個(gè)方法是獲取apk的簽名,這里不用管。
encryptJavaString有6個(gè)參數(shù),v4是env不管,cstr是要加密的字符串,hashCode是apk簽名,固定字符串和0;

追進(jìn)encryptJavaString查看,一眼可看出加密過程是在encypt中進(jìn)行的。returnStra是結(jié)果,那encypt次加密后結(jié)果一定為0;

繼續(xù)追進(jìn)去,看到這里思路應(yīng)該清晰了,有一個(gè)rsa_encrypt_key_ex的方法,這里首先懷疑是rsa對(duì)稱加密。rsa加密是有一個(gè)密鑰的,這里要分析密鑰是什么。在圖6中有一個(gè)固定的字符串,這里用這個(gè)當(dāng)密鑰試了試,發(fā)現(xiàn)不對(duì)。
而后看到有個(gè)decryptKey的方法,這里

使用frida hook decryptKey方法,在out2的返回結(jié)果就是就是密鑰,hook的結(jié)果我就不展示了。密鑰我放出來了。MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDP2SYzFccMwZxC05Uxwei6ijFcOoJOHPHBK2oRX6ZVDSZMxb7ghH1HU63abxzcW/+OC845OlxC5XZA9AZtfgEHdYNpEGyaCHE1zu4LsWiovTLpYhV1Ya9Ks/6ynUecn1P8D3OAKaCuD3DLlawLCRmWlc2EpnwYuJIrEf/OnB7A2QIDAQAB

這里展示下最終的請(qǐng)求的結(jié)果。
對(duì)了,這個(gè)request_sign_bj請(qǐng)求參數(shù)有加密的,是AES加密,這個(gè)加密的key在java層,我這里就不展示了。
