小紅書的shield引數的演算法計算是在libshield.so中,所以我們要從這個so檔案分析。
先抓個包看看。
演算法原始碼截圖在最下方...可以作為參考!
用ida載入libshield.so檔案,通過jni_load 找到函式偏移
initialize 函式
initialize 函式是從s.xml檔案中讀取key為main_hmac的值value。
把讀取的value使用sub_aaac函式進行傳參, sub_aaac 函式的主要功能是對value和device_id 進行aes得到乙個key,把key存入ptr + 0x28c 處, 如果sub_aaac返回值為1,則使用新版的shield演算法,反之則使用舊版的s1-s12演算法。
intercept函式
intercept 是shield演算法的邏輯部分,
通過ptr+650的值來判斷使用哪種演算法,sub_abb8為新版,sub_ad14為舊版
!sub_1fbb0函式對sub_aaac 函式的key進行異或0x36和0x5c,這裡大膽猜測shield使用的是hmacmd5演算法,sub_1fbb0是對key進行初始化,sub_1fc52是對url進行md5,sub_1fc7e是對前面兩步進行收尾工作計算出真正的shield。
像這種a1+12 是乙個函式指標我是通過動態除錯得到函式位址。使用的是魔改的md5。
aes decrypt方法
aes encrypt方法
在加解密過程中,加密用tbox1-4,解密用tbox5-8,前9輪用t,最後一輪用sbox。
至此initialize函式分析完成。
接下來看看intercept函式,經過除錯得知程式走這個分支
首先看105b0這個函式,該函式主要對請求資料進行md5運算。
md5 update函式
進入sub_404e8函式,初始化結構,儲存資訊,這裡靜態沒看出什麼來,動態調調看吧
繼續對資料進行處理,看字串相關資訊猜了個大概函式功能
對處理完成後的資料進行加密。
初始化加密表
加密函式,就簡單的異或操作
對加密後的資料進行處理,根據相關字串猜測,具體資料除錯看。
最終獲得新版的shield,演算法還原如下,部分**比較敏感,未放出來
花了很大精力和時間 ,把小紅書最新版7.6版本shield轉成了python源**。
歡迎一起交流學習;ping0206guo
小紅書sign演算法和shield演算法
sign演算法如下 import urllib import hashlib def sign with query items data udid data deviceid 將請求引數按key排序 data 拼接成字串 data str for k,v in data.items data st...
演算法 小紅書
薯隊長帶著小紅薯參加密室逃脫團建遊戲,首先遇到了反轉遊戲,小紅薯們根據遊戲提示收集了多個單詞線索,並將單詞按要求加乙個空格組 成了句子,最終要求把句子按單詞反轉解密。說明 收集的時候單詞前後可能會有多個空格,反轉後單詞不能有多個空格,具體見輸入輸出樣例。放在乙個列表中,反轉之後在採用join函式鏈結...
演算法 小紅書
薯隊長寫了n篇筆記,編號從1 n,每篇筆記都獲得了不少點讚數。薯隊長想從中選出一些筆記,作乙個精選集合。挑選的時候有兩個規則 1.不能出現連續編號的筆記。2.總點贊總數最多 如果滿足1,2條件有多種方案,挑選筆記總數最少的那種 動態規劃,按部就班的模擬出來就可以了 這個題目採用動態規劃 import...