抖音xg03算法逆向杂谈
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OE94MTXP-1600281730856)(C:\Users\hcz\AppData\Roaming\Typora\typora-user-images\image-20200917013828865.png)]
發現函數無法f5,按p創建函數,發現如下錯誤信息:
0000A86A DCW 0xB686 a886出的opcode 無法翻譯成指令,竟然ida 無法翻譯,那么原so的流程肯定不會經過改分支,經過的話程序會崩,修復方法是直接patch nop。 nop之后可以p鍵創建函數,但f5 之后又報A872: positive sp value has been found 錯誤,定位到0xa872,指令為 ADD SP, SP, #0xF0
改指令導致堆棧不平衡,導致ida無法f5, 原so肯定不會運行到改分支,會崩潰,所以直接nop。nop之后u鍵->c鍵->p鍵創建函數,AAFA: positive sp value has been found 發現同理直接nop,nop堆棧之后的f5代碼如下:
發現代碼中出現大量jmpout。
1.2 修復jmpoup
截取一塊jmpout代碼塊
可以看到導致jmpoup的原因是mov pc,r1,ida不知道目的地在哪,仔細觀察從0000A9D0 push {r0-r3}開始至0000AA26 POP {R0-R3}結束,寄存器的值不會發生改變,這一段可以認為是花指令,直接在0000A9D0出patch 指令為b 0x0000AA28,0000A9D0- 0x0000AA28 中間的指令用nop填充,為方便修改,編寫ida python腳本,腳本內容如下:
修改un_junk_code 函數的參數,即可修復這類花指令。
2、定位leviathan 函數
2.1 Jni_onload 定位法
長話短說,經過分析sub_7B10函數為RegisterNative函數的關鍵處。
2.2 frida hook registernative
好用的一批,強推,不多bb 直接上代碼
// hook register 打印動態注冊的函數地址 function hook_register(){// libart.so 所有導出函數表var symbols = Module.enumerateSymbolsSync("libart.so");var addr_register = null;for(var i = 0; i < symbols.length; i++){var symbol = symbols[i];var method_name = symbol.name;if(method_name.indexOf("art") >= 0){if(method_name.indexOf("_ZN3art3JNI15RegisterNativesEP7_JNIEnvP7_jclassPK15JNINativeMethodi") >= 0){addr_register = symbol.address;}}}// 開始hookif(addr_register){Interceptor.attach(addr_register, {onEnter: function(args){var methods = ptr(args[2]);var method_count = args[3];console.log("[RegisterNatives] method_count:", method_count);for(var i = 0; i < method_count; i++){var fn_ptr = methods.add(i * Process.pointerSize * 3 + Process.pointerSize * 2).readPointer();var find_module = Process.findModuleByAddress(fn_ptr);if(i == 0){console.log("module name", find_module.name);console.log("module base", find_module.base);}console.log("\t method_name:", methods.add(i * Process.pointerSize * 3).readPointer().readCString(), "method_sign:", methods.add(i * Process.pointerSize * 3 + Process.pointerSize).readPointer().readCString(), "method_fnPtr:", fn_ptr, "method offset:", fn_ptr.sub(find_module.base));}}, onLeave(retval){}})}}function main(){hook_register(); }setImmediate(main);3、算法還原:
1、敏感話題, 不討論。 算法的關鍵位置,f5之后的代碼和匯編代碼出入很多,要想還原得剛匯編。
附上xg03 算法的還原圖:
成功獲取數據
xg0408(最新版)算法的還原圖:
4注意
還原出來的xgorgon只供學習研究,切勿商業用途及非法用途5 發現bug
這兩個發現了bug,unidbg還原出來的xg0408不登錄的情況下不能搜索,正常設備能搜。經過驗證發現是xgorgon中有設備檢測,不正常的設備搜索會需要登錄。 經過一系列的奮斗,已完善。
總結
以上是生活随笔為你收集整理的抖音xg03算法逆向杂谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UTF-8字符集
- 下一篇: 解决C3P0又出現一個問題,如下的Exc