吾愛破解 - LCG - LSG |安卓破解|病毒分析|huihengkj.com

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 5091|回復: 101

[Android 原創] xhs新版shield算法

  [復制鏈接]
樓主
三年三班三井壽 發表于 2020-10-28 02:17 回帖獎勵
本帖最后由 三年三班三井壽 于 2020-10-28 02:59 編輯

本文僅供學習交流,勿作其他一切用途

沒有xhs的業務,純粹最近工作比較閑,就下了一個xhs,版本為6.67。
雖然沒做過相關業務,但多少也了解過一點。shield的生成是在libshield.so中利用okhttp攔截器實現的,所以定位起來也沒什么難度。攔截器在Java層的接口也很容易找到:

其中包含四個native函數:


    private static native void initializeNative();

    public native void destroy(long j);

    public native long initialize(String str);

    public native Response intercept(Interceptor.Chain chain, long j) throws IOException;

加載時調用initializeNative,主要通過相關JNI獲取一些方法。該類構造中調用initialize,并返回一個指針ptr,而在intercept中會傳入該指針,shield的計算也在intercept中。
下面進入so層,由于函數都是動態注冊的,所以直接拿hook libart的腳本跑一下,但跑一半報了異常。好在該so沒做什么處理,所以直接搜字符串引用,或者直接在data段往下拉一點就能看到JNINativeMethod結構體:

500彩票邀请码首先是initializeNative:

主要就是初始化,獲取攔截器相關方法,在此之前,還進行了TracerPid的檢測:

不為0時就exit(0)退出程序。
500彩票邀请码 接下來是構造函數中的initialize,該函數實際作用就是創建并返回一個ptr。不過由于僅在XhsHttpInterceptor構造中調用,后續生成shield并不會再次調用構造,所以可能需要主動調用分析其細節:

500彩票邀请码首先將傳入的字符串str拷貝到返回值ptr中,并拼接了一個str+hmac拷貝到ptr+400偏移處。在后續intercept調用參數中,我們可以知道傳入的str為main。接著通過getSharedPreferences獲取s.xml中的鍵值,key就是拼接后的main_hmac,我們可以從手機上pull出該文件:

500彩票邀请码實際上,在s.xml中也僅存在這一個key。然后進入sub_AAAC,對main_hmac進行解碼后,和device_id一并傳入sub_200B8:

500彩票邀请码sub_200B8判斷了一下main_hmac長度,又進入sub_1FE48:

500彩票邀请码sub_1FE48則是hmac的哈希算法,但通過幻數來看是做了一些變形。


這一塊將相關代碼摳出來即可。最后根據main_hmac計算得出的一串hash會拷貝到ptr的末尾:

通過putString引用可以找到main_hmac相關邏輯,當請求返回406時,返回頭中的xy_ter_str即是main_hmac

 if ( code != 406 )
    goto LABEL_26;
hash = j_CallObjectMethodV(v8, v9, method_header_0, NewStringUTF_xy_ter_str, a5a);
.......
j_CallObjectMethodV(v8, v21, putString, main_hmac, hash);

我們新安裝一個xhs抓包后也能找到該接口,以及返回當前devicec_id所對應的main_hmac值:

最后進入intercept,此時,之前根據main_hmac所生成的一段哈希作為參數ptr中的數據傳入,當dvicec_id不變時,其所對應的main_hmac也是固定的,最終傳入的ptr數據也是固定的。
intercept中很容易找到shield賦值的地方:

500彩票邀请码其值是根據傳入的*(ptr+650)值,來決定走sub_ABB8或是sub_AD14計算分支。ptr+650在sub_AAAC對main_hmac解碼并計算返回為true時,賦值為1:

500彩票邀请码目前版本所走分支為sub_ABB8,sub_AD14可能是舊版的s1-s12,因為我也沒看過:

這個函數就不看了,回過頭來進入到sub_ABB8當中,返回值即是shield:

jstring_shield = ((*jstring_shield)->NewStringUTF)(jstring_shield, shield_ptr);

500彩票邀请码往上找找shield_ptr,可以很容易找到sub_1FC7E(v9, &byte_shield, &v15);該函數執行完后shield也就算好了:

500彩票邀请码計算的參數則是sub_1FC7E中的第一個參數v9:

500彩票邀请码可以把這參數當作一個結構體,在init_buff中new出來,在sub_1FBB0會根據之前的ptr進行第一次計算,在sub_1FC52中會傳入路徑進行第二次計算,最終通過sub_1FC7E得出結果:

500彩票邀请码具體路徑是從sub_ABB8第二個參數arg2中讀取出的:

v6 = j_CallObjectMethodV(a1, arg2, method_clone, a4, shield_ptr);
......
len = j_CallIntMethodV(jstring_shield, v6, method_read, ByteArray

500彩票邀请码往上回到intercept可以找到sub_ABB8第二個參數賦值的邏輯,通過writeString寫入了uri

500彩票邀请码實際上除了uri的路徑,還會判斷xy-相關的頭部進行拼接:

如果是post,還得拼上請求體:

其實這部分結合抓包的鏈接,請求頭請求體也能看出來。

最后的最后,就是把后面的算法摳出來,追求速度的話應該也能模擬調用(大佬們直接重寫算法請無視我)。
init_buff你也同樣構造這樣的一個結構。sub_1FBB0稍有點麻煩,其中會進行賦值,之后會有多處通過偏移進行函數指針的調用:

類似于:
v4 = ((a1 + 16))();
這部分還是得通過匯編確定調用參數等。


然后就是不斷地調試測試

免費評分

參與人數 20吾愛幣 +19 熱心值 +19 收起 理由
槽點 + 1 用心討論,共獲提升!
WAlitudealiy + 1 謝謝@Thanks!
bupa_bu + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
空明哞哞霸 + 1 我很贊同!
JunMoXiao + 1 謝謝@Thanks!
天涯明 + 1 + 1 學習到了
ZZU隔壁老吳 + 1 + 1 我很贊同!
CSHTian + 1 + 1 我很贊同!
0615 + 1 + 1 熱心回復!
azcolf + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
lookerJ + 1 + 1 我很贊同!
zsq + 1 + 1 謝謝@Thanks!
是隨風啊 + 1 謝謝@Thanks!
獨行風云 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
w92vv + 1 + 1 謝謝@Thanks!
fengbolee + 1 + 1 用心討論,共獲提升!
xiaofeng92 + 2 + 1 我很贊同!
逍遙一仙 + 3 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
gaosld + 1 + 1 熱心回復!
空城吖 + 1 + 1 用心討論,共獲提升!

查看全部評分

發帖前要善用論壇搜索500彩票邀请码功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
andyyang886 發表于 2020-10-28 07:44
一個沒看懂的來集合咯!
推薦
weiniuda 發表于 2020-11-16 09:47
推薦
 樓主| 三年三班三井壽 發表于 2020-10-29 11:02 |樓主
3#
QuiryRain 發表于 2020-10-28 07:57
學習了學習了
4#
xinghe280 發表于 2020-10-28 08:43
學習了看的不是太明白
5#
恒大大 發表于 2020-10-28 08:44
完全沒看懂,太高級了,感謝大佬分享
6#
qq380369832 發表于 2020-10-28 08:47
謝謝樓主分享啊,謝謝啊
7#
lzhyy1314520 發表于 2020-10-28 09:14
學習一下
8#
憤怒的平頭哥 發表于 2020-10-28 09:35
感謝大佬分享
9#
lateautumn4lin 發表于 2020-10-28 10:05
牛逼啊大佬
10#
積木工具箱 發表于 2020-10-28 11:03
看不懂哈哈
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|處罰記錄|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-11-27 04:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表

500彩票邀請碼-彩經網