皮皮搞笑sign算法分析

#### 1、反編譯apk,找到java層sign加密邏輯。
使用jadx、全局搜索sign=  可發現sign調用的方法爲:

該方法是一個native方法, 使用ida進行分析libnet_crypto.so, 找到Jni_Onload查看RegisterNatives函數,
點擊off_5A010查看註冊函數基址

很遺憾,該so對字符串進行加密,來到init段發現如下函數![1e725f5be98764a5368e3ffddef06396.png](en-
這是上海交大GoSSIP小組開源的“孤挺花“, 以前寫過一個還原孤挺花加密的腳本,這裏使用一下,可以看到字符串已經解密完成。

uploading.gif正在上傳…重新上傳取消
進入sub_10EEA處

sign爲sub_11758函數返回,追下去

uploading.gif轉存失敗重新上傳取消

其中有一大堆函數,通過動態調試,發現最終的加密是 sub_231E8函數,前面的函數是對字符串進行一些簡單處理,具體處理代碼如下
```
String newStr = "Y0MTBlODcx" + postParams.substring(10) + "ZD" + 
postParams.substring(0, 10);
```
其中postParams爲加密的字符串。
sub_231E8 函數的cfg圖如下

很明顯,這是經過ollvm混淆的一個函數,這個混淆比較簡單,分支較小。改sign算法流程如下:
1、把字符串分割成(字符串長度)/ 64塊。
2、每塊數據經過16次循環,與固定數值進行與、或等位運算,得到4個uint的數據。
3、把得到的數據與271733878, -1732584194,-271733879,1732584193相加。
4、把得到的4個uint的數據反序,得到一個32位的sign。

放一張算法驗證圖

程序計算的sign

結果正確,收工

寫着寫着,發現只有自己能看懂。。。。。。。 下一篇,有時間嘗試對sub_231E8進行反混淆


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章