温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-07 09:51:45 来源:亿速云 阅读:233 作者:柒染 栏目:大数据

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