Crack App | 某新聞 app 參數(shù) sn 加密邏輯分析
第一時(shí)間關(guān)注Python技術(shù)干貨!

圖源:網(wǎng)絡(luò)
今日目標(biāo)
aHR0cHM6Ly93d3cud2FuZG91amlhLmNvbS9hcHBzLzQwMzYz
爬蟲相關(guān)的 Js 逆向越來(lái)越卷了,嚇得我趕緊開始學(xué) App?
抓包分析
今天分析的是這個(gè) app 的首頁(yè)信息流
使用的抓包組合是charles + postern?抓包如下

通過(guò)這個(gè)包可以看到返回了title還有新聞相關(guān)來(lái)源,參數(shù)中帶有sn
這個(gè)參數(shù)的長(zhǎng)度讓人不得不懷疑是不是md5的加密,不過(guò)還是要看看加密的邏輯是不是
把apk拖入jadx看看

70 + M 一下就反編譯完了,一看就不對(duì)勁,jadx中啥都沒有,應(yīng)該是加殼了
查個(gè)殼看看

用的是騰訊加固,所以分析之前還是要脫殼看看
App 脫殼
app 脫殼的工具有很多,比如:
yang 神 frida_dump : https://github.com/lasting-yang/frida_dump
寒冰大大的 FART : https://github.com/hanbinglengyue/FART
目前世面上的脫殼工具還是很多的,今天我是用的是 BlackDex ,一款脫殼 App,先試試看能不能脫下來(lái)我們需要的內(nèi)容
打開 BlackDex 然后再打開目標(biāo) App 就可以了

脫殼完成就會(huì)保存到指定的目錄下

用ES文件瀏覽器打開對(duì)應(yīng)的路徑

就看到脫好的dex咯
然后將這些個(gè)dex壓縮好,剪切到的/sdcard中,然后用命令拉到 pc上
adb?pull?/sdcard/xxx.zip?[pc?path]

然后再用jadx分析就好了
ps:壓縮的 zip 直接拖到jadx里面就行了
加密參數(shù)定位與分析
拖到jadx里面編譯之后檢索sn=可以找到下面的邏輯
通過(guò)上面的邏輯大概可以知道valueOf是時(shí)間戳然后str是根據(jù)時(shí)間戳計(jì)算出來(lái)的結(jié)果
現(xiàn)在看a,a的方法就在下面

這里對(duì)z做了一個(gè)判斷,所以需要返回看下我們抓包里面有沒有z代表的token,如果有的話這里就要帶上str3也就是token一塊計(jì)算,如果沒有的話就不用
傳入了str和z之后就計(jì)算出一個(gè)str2,這個(gè)str2會(huì)進(jìn)入b方法
跟進(jìn)去看看b,這里的b的邏輯是一個(gè)md5,邏輯很清晰

所以真就是我們文章開頭猜的那樣,最后經(jīng)過(guò)了一次md5計(jì)算
知道最后的邏輯是md5之后,就要看看md5的入?yún)⑹鞘裁?,就要用?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(71, 193, 168);">frida動(dòng)態(tài)調(diào)試了
這個(gè)時(shí)候就有人問了,這些參數(shù)明明在上面的邏輯里面都能看到,為什么還要?jiǎng)討B(tài)調(diào)試?
因?yàn)殪o態(tài)分析的結(jié)果不可信,動(dòng)態(tài)調(diào)試輸出的結(jié)果更加可信,所以要?jiǎng)討B(tài)調(diào)試和靜態(tài)調(diào)試相互印證
Frida hook 動(dòng)態(tài)調(diào)試
用下面的 hook 代碼
Java.perform(function?()?{
????????var?aaa?=?Java.use('類名');
????????aaa.b.overload('java.lang.String').implementation?=?function?(a)?{
????????console.log("參數(shù)===>:"+a);
????????var?result?=?this.b(a);
????????console.log("結(jié)果===>:"+result);
????????return?result;
????};
});
得到的結(jié)果如下

發(fā)現(xiàn)除了jadx里面能找到的參數(shù)之外,后面跟了一串亂碼,這一串亂碼是怎么來(lái)的?
回到jadx里面,可以看到就是NativeSecureparam.readMD5Key();返回的

現(xiàn)在需要分析NativeSecureparam.readMD5Key();是怎么計(jì)算出來(lái)的,通過(guò)這個(gè)方法的名字可以知道,這個(gè)字符串就是md5的鹽值
so 分析
通過(guò)jadx可以知道這個(gè)方法是一個(gè)Native方法

來(lái)自libifeng_secure.so,用IDA打開對(duì)應(yīng)的so文件

32 位的 so 報(bào)錯(cuò)JUMPOUT,所以直接偷懶用64的
找到對(duì)應(yīng)的函數(shù),點(diǎn)進(jìn)去,可以看到下面的邏輯

這里要修改一下參數(shù)類型,可以看到下面的邏輯

其實(shí)就是將一串字符賦值v2并返回,沒有其他的操作,回到jadx再看下邏輯就知道其實(shí)sn的邏輯就是
md5(版本號(hào)?+?proid?+?publishid?+?uid?+?loginid(未登錄是空)?+?""?+?st?+?so中的字符串)
md5 就不用算法還原了吧,大家應(yīng)該都會(huì)。
以上就是今天的全部?jī)?nèi)容了~
公眾號(hào)配套技術(shù)交流群,備注【咸魚666】,入群交流
我是沒有更新就在摸魚的咸魚
收到請(qǐng)回復(fù)~
我們下次再見。
對(duì)了,看完記得一鍵三連,這個(gè)對(duì)我真的很重要。
