1. 程式人生 > >對好搜小說app雜湊演算法的一次逆向

對好搜小說app雜湊演算法的一次逆向

我用的好搜小說版本是1.8.183,需要測試的請自行下載

點選一個小說,抓包之,在androidKill中搜索關鍵字encode_sign

 

開啟關鍵字所在的類;



進去檢視,在靜態程式碼塊載入了個動態連結庫,核心的加密演算法寫在了native層

上IDA,進行動態除錯,將斷點下在urlEncodeFromJNI這個方法處:


然後手機上點選一部小說,執行到strlen的時候,將請求的連結傳了進來


請求的連結長度為87


再次傳進來一個引數,並計算其長度,這個引數是當前的時間戳


將0x97個記憶體長度初試化為0


將時間戳連結到請求連結後邊



連結以後的結果



我們來看看連續三次的連結,然後記下這個緩衝區的地址:


繼續申請長度為0x58的記憶體,並將其填充為0


呼叫md5Init初始化md5計算需要的資料結構



計算需要進行md5的資料段的長度


開始計算md5,在這裡的md5Update函式中,傳遞了緩衝區地址,要進行雜湊運算的地址,長度,這個長度等於拼接後的字串的長度

在放字串的後邊的記憶體地址,再申請一個16個位元組的空間,並用0初始化



呼叫MD5Final方法計算md5值

申請0x20個位元組的記憶體,並用0填充

sprintf這裡是個迴圈,執行和很多次,然後在剛才的緩衝區添加了一堆字串,md5final方法計算而來的值並不是字串,是一些十六進位制的字元,sprintf將這些字元按照assic碼轉換成人能夠看清的字元。總之md5+sprinf的值為在cmd5網站上計算的人眼能識別的字母,不瞭解可以等sprintf迴圈過去去看看給緩衝區寫的值,這些值和CMD5網站計算出來的一樣



將0x98長度的記憶體初始化為0


這個strcat將第一次拼接好的字串連線到第一次計算的md5的值後邊:



我們來看看連結完成後的結果


初始化0x58個位元組的記憶體,為MD5Init初始化用


將剛才初始化的記憶體的地址給md5Init


計算所有需要md5的字串長度(不明白一隻計算長度幹啥,也沒有仔細分析)

呼叫md5Update函式,這裡注意了:md5Update函式的第三個引數,為需要計算的字串的長度,這裡為0xa8,第一次我就是卡在這裡了,全部計算,當然結果不對

到這個sprintf又和上一個sprintf的作用一樣,不多解釋


最終的計算結果為連結中的encode_sign值

總結一下計算過程:
1.將請求連結中的部分欄位提取出來,加上時間戳,"eha",格式如下:
http://reader.m.so.com/app/index.php?m=Api&c=BookIntro&bid=3227333191007413155&uid=0dbc710c48e3d9ac0ebde

b116de326fe&ver=183&src=napp_sz1490169346086eha
2.計算步驟一中的雜湊得到雜湊結果
3.將步驟1中的字串拼接到步驟二中計算的雜湊結果後面
4.將步驟3中的字串取前168(0xA8)位進行雜湊,得到的結果就是連線中的

encode_sign欄位

實驗證明:

1.請求連結:

GET /app/index.php?m=Api&c=BookIntro&bid=3534808458083825046&uid=0dbc710c48e3d9ac0

ebdeb116de326fe&ver=183&src=napp_sz&encode_id=201703221490176124881&encode_sign=5

e9a514b1304f56b5a26f799e1d176df

2.製作成步驟1中的需要雜湊的部分:

http://reader.m.so.com/app/index.php?m=Api&c=BookIntro&bid=3534808458083825046&uid=0dbc710c48e3d9ac0ebdeb116de326fe&ver

=183&src=napp_sz1490176124881eha

3.計算這個字串的雜湊:



3.將這個雜湊放在第一次雜湊的字串前邊:
a6d06f88cecbc5ca342f6d204f15191ahttp://reader.m.so.com/app/index.php?m=Api&c=BookIntro&bid=3534808458083825046&uid=0dbc710c48e3d9ac0ebdeb116de326

fe&ver=183&src=napp_sz1490176124881eha
4.取前168位(上一步中紅色部分)做雜湊:

我們來對比一下原來請求連結中的雜湊:

分析正確