天天看點

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

介紹:

本次分析抖音版本:11.1.0    x-gorgon版本:0404

抖音作為目前流量最大、日活躍最高的平台,目前也有很多不同行業的人對它進行逆向分析研究,在抓包分析過程中,抖音的通訊會涉及到一個叫x-gorgon的簽名,該簽名是發送資料請求必不可少的基礎參數,本次我就帶大家分析下這個參數。

小編自戀一下,逆向大神 屬于逆向愛好者,如需要交流技術或者算法請在評論區留下郵箱,或者聯系我郵箱[email protected]

抓包

        假設我們的業務需要爬蟲擷取抖音的熱門視訊清單,那麼我們先通過抓包來定位到具體的接口,這裡我選擇使用charles工具進行抓包,具體配置https方法可以百度的方法。安卓手機抓包最好使用6.0以下的!

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

  通過抓包發現接口是來自: https://aweme.snssdk.com/aweme/v2/feed/ 後面跟了很長的參數,具體字面意思分析估計是手機的型号以及抖音自己生成的一些資訊,我們發現其傳回的是protobuf格式,charles已經幫我們解析好了,那麼我們編寫python3腳本構造一個跟他一樣的請求進行嘗試。

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

 我們發現能夠正常的傳回資料,但是我們看到他的header除了 x-gorgon和x-tt-trace-id以外,其他的都很好了解,我們會發現,如果我們改變了URL的參數,但是header内容得不到對應的修改,就會傳回不到資料,如下所示:

{

  • status_code: 2154,
  • aweme_list: [ ],
  • has_more: 1,
  • min_cursor: 0,
  • max_cursor: 0

}

分析

        那麼我們就能夠更加确信header裡的x-gorgon對它進行了一次簽名,是以我們直接jadx上手閱讀一波反編譯後的代碼,這裡我直接搜尋了x-gorgon關鍵字,列出了以下結果:

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

這裡我選擇了hashMap.put("X-Gorgon", a3);這一行,跳轉進去我們來分析一下它的代碼

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

​        這裡我們看到有一個它的值是來自a3,a3則是通過String a3 = a.a(com.ss.sys.ces.a.leviathan(i, currentTimeMillis, a.a(a2 + str4 + str5 + str6)));這行代碼進行擷取到的結果,我們看到它傳了4個參數,我們來仔細看一下這4個參數具體都是什麼内容:

        a2來源:

            String b2 = tt.d(str);

            d.a(b2);

        str它就是該方法傳進來的參數,我們後面可以通過hook方式來擷取它的具體内容,而它會執行tt.d()、d.a() 進行2次操作,我們對其tt.d()跟進去

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

        我們看到它對這個字元串進行了取 ? 和 # 中間值,懷疑是url,如果是url證明它隻是取了url後面的參數,那麼繼續看它的下一個方法:d.a() 

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

        我們看到這裡就是進行了MD5簽名取值,那麼a2分析到此結束,我們繼續分析第2個參數

        str4來源:

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

這裡非常簡單,它就是枚舉傳進來的第二個參數map,判斷如果有X-SS-STUB這個值的話就擷取,反之則填充32個0,那麼我們抓包發現并沒有X-SS-STUB這個參數,實際上如果我們的包是POST的話它就會有,實際上它就是POST資料的一個MD5簽名值。

        str5來源:

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

            str5也非常簡單,也是枚舉map裡面有沒有COOKIE,如果有就把COOKIE進行MD5,那麼該參數也到此結束了

        str6來源:

1

2

3

4

5

String c2 = tt.e(str3);

if

(c2 !=

null

&& c2.length() >

`) {`

str6 = d.a(c2);

StcSDKFactory.getInstance().setSession(c2);

}

        這裡我們記得str3是cookie,它執行了tt.e(str3) 方法擷取一個傳回值,如果它不是空同樣給這個傳回值md5,那麼我們跟進去看一下它是做了什麼處理:

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

        這裡我們看到它是枚舉了cookie裡面有沒有sessionid這個值,如果有就取出來,那麼str6到此結束

        參數整理:

            a2 = md5(url) 疑似對網址的參數進行md5

            str4 = x-ss-stub,隻有post時才有效,否則是32個0

            str5 = md5(cookie)  對cookie進行md5

            str6 = md5(cookie['sessionid'])    對cookie裡面對sessionid進行md5,否則也是32個0

        我們整理完了這4條參數後,繼續分析,它将這4個參數進行了字元串合并,接着執行 a.a(a2+str4+str5+str6),我們跟進去看看裡面做了什麼操作

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

        我們看到它這裡循環了總長度/2次,每次都是把  str[i] 轉換成十進制左移4,然後加上 str[i+1] 都一個簡單運算,并傳回結果,也就是本來是4個32位(128位)然後經過加密後縮短成了64位長度。最後它執行了com.ss.sys.ces.a.leviathan(i, currentTimeMillis, a.a(a2 + str4 + str5 + str6))進行計算,我們看到它還傳了2個參數,i和currentTimeMillis,我們往前可以看到 i是-1,而currentTimeMillis是目前都十位時間戳。

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

        最後把計算好都byteArray經過位移轉換成了string類型,并put到map裡面,那麼我們也清楚到看到,k-khronos也就是剛剛到currentTimeMillis時間戳了。我們發現由于om.ss.sys.ces.a.leviathan是在so層到libcms.so檔案,并且裡面有大量到混淆就沒有再度分析。我們可以通過xposed或者unidbg到方法進行調用。

0x02:參數确認

       這裡我們分析完了它算法到具體參數構造完成後,我們還需要确認它傳到參數是否是我們所聯想到,那麼這裡我們發現由于它這個方法是一個callback,我們往前跟一下,尋找一個合适到hook點,使用frida進行hook

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

        這裡我對它進行了調用查找,看到隻有1個地方,我們跟進去看看,跟進去之後它就是以下内容,就隻是一個簡單對指派給sAddSecurityFactorProcessCallback,我們在對它進行調用查找,看看是什麼地方對它進行對調用。

 public static void setAddSecurityFactorProcessCallback(a aVar) {

        sAddSecurityFactorProcessCallback = aVar;

    }    

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

    這裡我們看到它從這裡取的回調指針變量,然後判斷如果不為null則執行,那麼我們就可以直接hook這個方法:tryAddSecurityFactor$___twin___,這裡我的hook代碼也就比較簡單,直接輸出它傳進去的map和str的值以及傳回的map進行确認。

//frida -U com.ss.android.ugc.aweme -l test.js
Java.perform(function() {
    var NetworkParams = Java.use("com.bytedance.frameworks.baselib.network.http.NetworkParams");
    NetworkParams['tryAddSecurityFactor$___twin___'].implementation = function(str,map){
    var keyset = map.keySet();
    var it = keyset.iterator();
    console.log("str:\t"+str)
    while(it.hasNext()){
        var keystr = it.next().toString();
        var valuestr = map.get(keystr).toString()
        console.log("map:\t"+keystr+"\t"+valuestr)
    }
    var ret
    ret = this.tryAddSecurityFactor$___twin___(str,map);
    var keyset = ret.keySet();
    var it = keyset.iterator();
    while(it.hasNext()){
        var keystr = it.next().toString();
        var valuestr = ret.get(keystr).toString()
        console.log("ret map:\t"+keystr+"\t"+valuestr)
    }
    return ret;
    }
});
           
最新 抖音 x-gorgon 算法定位查找過程筆記 2020-06-03本次分析抖音版本:11.1.0    x-gorgon版本:0404免責聲明

綠色部分就是str參數1的值,黃色則是map,藍色則是傳回的map,我們看下charles的這個包的header裡的xgorgon是不是傳回的值。

總結

        以上就是對抖音對一個簡單的x-gorgon的分析筆記過程,希望能夠有所幫助,也能夠對自身的産品安全方面進行一個參考借鑒。

免責聲明

  1. 請勿使用本服務于商用
  2. 請勿使用本服務大量抓取
  3. 若因使用本服務與抖音官方造成不必要的糾紛,本人蓋不負責
  4. 本人純粹技術愛好,若侵犯抖音貴公司的權益,請告知