十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
unicorn解決OLLVM字符串混淆通用方法是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)公司主營寧洱網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,手機APP定制開發(fā),寧洱h5微信小程序定制開發(fā)搭建,寧洱網(wǎng)站營銷推廣歡迎寧洱等地區(qū)企業(yè)咨詢
AndroidNativeEmu 在面對沒有加殼的 so 還是挺好用的,不過遇到加殼的 so,就會力不從心的,需要 dbg 才行。
解決字符串混淆思路,其實和 frida 讀取混淆字符串方法一樣,在內(nèi)存中字符串是被解密狀態(tài)的,所以在內(nèi)存中拿就可以了, 而且 Unicorn
提供了 unicorn.UC_HOOK_MEM_WRITE
來 hook 操作內(nèi)存中的數(shù)據(jù)
干貨代碼如下:
import logging import sys import os import unicorn import struct from androidemu.emulator import Emulator sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))) logging.basicConfig( stream=sys.stdout, level=logging.DEBUG, format="%(asctime)s %(levelname)7s %(name)34s | %(message)s" ) logger = logging.getLogger(__name__) emulator = Emulator(vfp_inst_set=True) # 初始化模擬器 # 字符串解密 so_file = "test/test.so" modify_map = {} # 接收字典 def UC_HOOK_MEM_WRITE(mu, _type, address, size, _value, user_data): byte_array = struct.pack("I", value)[:size] modify_map[address] = byte_array return # 加載預設 so emulator.load_library("example_binaries/libdl.so", do_init=False) emulator.load_library("example_binaries/libc.so", do_init=False) emulator.load_library("example_binaries/libstdc++.so", do_init=False) emulator.load_library("example_binaries/libm.so", do_init=False) lib_module = emulator.load_library(so_file, do_init=True) # do_init 需要設置為 true emulator.mu.hook_add(unicorn.UC_HOOK_MEM_WRITE, UC_HOOK_MEM_WRITE) # 準備 UC_HOOK_MEM_WRITE 回調解決字符串加密 """ 讀出代碼,并將被加密的字符串修改回去 """ with open(so_file, 'rb') as f: content = f.read() print(modify_map) for i in modify_map: value = modify_map[i] base = lib_module.base # 加載基質 if base <= i <= (base + lib_module.size): # 利用加載地址判斷 offset = i - base - 0x1000 # 并不是連續(xù)加載,是文件中的偏移 content = content[:offset] + value + content[offset + len(value):] down_file = so_file + ".fix" with open(down_file, 'wb') as df: df.write(content) print('寫出完畢', down_file)
**
修改 so_file = so文件地址
運行后就會導出解密后的 so
注意事項:
有的時候so有交叉調用,無法直接解密,需要hook住調用函數(shù),來解決異常
關于unicorn解決OLLVM字符串混淆通用方法是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。