日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

抖音xg03算法逆向杂谈

發布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抖音xg03算法逆向杂谈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
抖音xg03算法逆向雜談 @[toc] # 1: 修復jni_onload不能f5 ## 1.1 jni_onload函數初探 使用ida打開libcms.so 定位到Jni_Onload函數。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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腳本,腳本內容如下:

# -*- coding:utf-8 -*- from idc import * from idaapi import * from keystone import *ks = Ks(KS_ARCH_ARM, KS_MODE_THUMB)def ks_dis_asm(dis_str):global ksencoding, count = ks.asm(dis_str)return encodingdef un_junk_code(fun_start, fun_end):patch_start = Nonepatch_end = Nonejmp_addr = []for i in range(fun_start, fun_end):# PUSH {R0-R3} or PUSH {R0-R3,R7}# MOV R0, PC# MOV R1, PCbuf = "".join(['%02x' % ord(j) for j in get_bytes(i, 6)]).lower()if buf == '0fb478467946' or buf == '8fb478467946':patch_start = i# end POP {R0-R3}end_buf_one = "".join(['%02x' % ord(j) for j in get_bytes(i, 2)]).lower()#if end_buf_one == '0fbc':patch_end = i + 2# # end POP {R0-R2}# # POP {R3,R7}end_buf_two = "".join(['%02x' % ord(j) for j in get_bytes(i, 4)]).lower()if end_buf_two == '07bc88bc':patch_end = i + 4if patch_start != None and patch_end != None:for j in range(0, patch_end - patch_start, 2):# patch noppatch_byte(patch_start + j, 0x00)patch_byte(patch_start + j + 1, 0xbf)# 跳轉dis_str = 'b #{}-{}'.format(patch_end, patch_start)jmp_addr.append(patch_start)encoding = ks_dis_asm(dis_str)print dis_str, encodingfor item in encoding:print('{}'.format(hex(item)))for k in range(len(encoding)):patch_byte(patch_start + k, encoding[k])print hex(patch_start), hex(patch_end)patch_start = Nonepatch_end = Noneif __name__ == '__main__':# 函數開始位置與結束位置un_junk_code(0x000551C0, 0x00057784)

修改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算法逆向杂谈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。