中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java數據加密算法實例分析

發布時間:2022-03-17 17:35:57 來源:億速云 閱讀:215 作者:iii 欄目:大數據

本篇內容介紹了“java數據加密算法實例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

分析

今天有空分享一下抖音的加密算法,作為擁有龐大用戶量的APP,其通信協議加密的強度肯定是不弱的,關鍵算法被VM,只能動態分析去理解。我們通過抓包分析,請求的URL上帶有AS、CP兩個加密字段,這兩個字段是早期版本算法,后又陸續添加了MAS、X-GORGON算法。我們今天先對AS、CP兩個字段進行分析,這個只能通過動態調試去跟蹤加密過程。

首先我們通過工具調試定位到函數

- [IESAntiSpam testForAlert:msg:]

定位的詳細過程忽略……,進入繼續調試后發現調用SUB_102E3345函數進行加密排序

1.整理分析流程

 1.時間戳轉十六進制 2.將時間戳排序倆次,  a1 v3 是排序key  sprintf(byte_102323F30, "%08x", a1);  sprintf(byte_102323F3A, "%08x", v3); 3.將url參數用MD5加密一次或倆次根據時間戳&運算 4.將第一次排序結果寫入前16位地址加一寫入(從1插入),隔一位插入,前邊拼a1 5.將第二次排序結果寫入后16位(從0插入)后邊拼e1

2.結果排序

a1d5b43se234dccea7 456dcd5s2320cf3e1 &cp=456fcd5s2320cfs3e1&as=a1d5b43se234dccea7 拼接完成后就可以請求了

后期版本添加了mas算法和最新的X-gorgon算法,目前最新系列版本算法如果需要了解的話可以交流。

3.流程詳述

java數據加密算法實例分析cdn.nlark.com/yuque/0/2020/png/97322/1606705772468-a9630ae1-df91-45b8-8905-e6ac160a3cac.png?x-oss-process=image/resize,w_1500">

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

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

java數據加密算法實例分析

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

       這里我們看到有一個它的值是來自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()跟進去

       java數據加密算法實例分析

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

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

java數據加密算法實例分析

       str4來源:

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

       str5來源:

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

       str6來源:

String c2 = tt.e(str3);if (c2 != null && c2.length() > 0) {     str6 = d.a(c2);     StcSDKFactory.getInstance().setSession(c2);}

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

       這里我們看到它是枚舉了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),我們跟進去看看里面做了什么操作

       我們看到它這里循環了總長度/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是當前都十位時間戳。

   java數據加密算法實例分析

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

java數據加密算法實例分析

0x02:參數確認

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

       java數據加密算法實例分析

       這里我對它進行了調用查找,看到只有1個地方,我們跟進去看看,跟進去之后它就是以下內容,就只是一個簡單對賦值給sAddSecurityFactorProcessCallback,我們在對它進行調用查找,看看是什么地方對它進行對調用。

public static void setAddSecurityFactorProcessCallback(a aVar) {

       sAddSecurityFactorProcessCallback = aVar;

   }    

 

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

//frida -U com.ss.android.ugc.aweme -l test.jsJava.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;    }});

 

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

java數據加密算法實例分析

java數據加密算法實例分析

“java數據加密算法實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林浩特市| 静安区| 南丹县| 庆云县| 获嘉县| 同心县| 台江县| 丹棱县| 亳州市| 英山县| 湘潭县| 黎平县| 兰州市| 浮梁县| 遂平县| 小金县| 临武县| 三都| 时尚| 高阳县| 寻甸| 庆阳市| 乌兰县| 旅游| 安岳县| 淮安市| 尼木县| 会泽县| 康乐县| 板桥市| 集贤县| 莱州市| 阿拉善盟| 科技| 垫江县| 铜鼓县| 楚雄市| 蒙阴县| 太谷县| 察雅县| 安溪县|