咨询发布 发表于 2026-9-21 09:47:05

用Unicorn模拟执行so函数,跳过环境依赖直接拿返回值

分析一个so里的加密函数,函数本身不复杂,但它依赖一堆初始化,挂在进程里跑还要过反调试,Frida一hook就闪退。后来干脆用Unicorn把整个so加载起来直接调用那个函数,环境问题全绕开了。

python装unicorn和lief,先用lief解析so拿到.text段偏移和目标函数地址,然后Unicorn映射一段内存把so装载进去,再单独分一块栈空间和一块放参数的内存。中间撞到两个问题:一是函数访问了未映射地址,缺页就补映射一块空内存继续跑;二是碰到了对pthread和时钟函数的调用,用UC_HOOK_CODE监控到调用地址,手动往返回寄存器塞个假值再跳回去就行。

跑通之后,给参数内存塞明文,启动执行到函数返回,读返回寄存器和参数区,密文就出来了,一次毫秒级,比挂起整个App快得多,批量生成测试向量也方便。局限是碰到复杂外部依赖的函数,stub会越写越多,那种就不如直接上qemu-user了。这个方案最适合纯算法函数。

https://www.metk.cn/img/posts/unicorn_emulate_so_01.jpg
页: [1]
查看完整版本: 用Unicorn模拟执行so函数,跳过环境依赖直接拿返回值