溫馨提示×

溫馨提示×

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

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

unicorn解決OLLVM字符串混淆通用方法是什么

發布時間:2021-12-07 09:51:45 來源:億速云 閱讀:253 作者:柒染 欄目:大數據

unicorn解決OLLVM字符串混淆通用方法是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

AndroidNativeEmu 在面對沒有加殼的 so 還是挺好用的,不過遇到加殼的 so,就會力不從心的,需要 dbg 才行。

解決字符串混淆思路,其實和 frida 讀取混淆字符串方法一樣,在內存中字符串是被解密狀態的,所以在內存中拿就可以了, 而且 Unicorn 提供了 unicorn.UC_HOOK_MEM_WRITE 來 hook 操作內存中的數據

干貨代碼如下:

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  # 并不是連續加載,是文件中的偏移
        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)

**<br>修改 so_file = so文件地址 運行后就會導出解密后的 so<br>注意事項:

  • 有的時候so有交叉調用,無法直接解密,需要hook住調用函數,來解決異常

關于unicorn解決OLLVM字符串混淆通用方法是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女