Ollvm混淆与反混淆: goron框架间接全局变量引用的实现原理
与间接函数调用同理,可参考
Ollvm混淆与反混淆: goron框架间接函数调用的实现原理
函数实现逻辑在llvm/lib/Transforms/Obfuscation/IndirectCall.cpp文件中,IndirectBranch,集成自类FunctionPass
Ollvm混淆与反混淆: goron框架间接跳转的实现原理
Obfusaction Pass的管理统一在类ObfuscationPassManager中
Ollvm混淆与反混淆: Goron编译使用
很多App实现的定制ollvm框架中都有goron框架的影子,或多或少的借鉴了它的功能,包括
- 间接跳转,并加密跳转目标(-mllvm -irobf-indbr)
- 间接函数调用,并加密目标函数地址(-mllvm -irobf-icall)
- 间接全局变量引用,并加密变量地址(-mllvm -irobf-indgv)
- 字符串(c string)加密功能(-mllvm -irobf-cse)
- 过程相关控制流平坦混淆(-mllvm -irobf-cff)
想要了解怎么针对这些混淆功能完成去混淆,势必要先对其混淆过程有所了解,那么第一步就是对goron框架的编译使用
Frida源码阅读
以14.2.18版本为例
一、frida-server做了什么
1.1 进程注入
Frida调试环境搭建
一、背景
从上手难度上来说frida可以说是开箱即用,几乎没有学习成本,对于大多数使用者来说,任何一个App都可以直接使用一个js脚本搞定。但是当面对繁多的App,如何将这种分析工具进行模块化拆分是需要好好思考思考的,直接使用js来做不太现实,而解决方案是ts+npm,优势在于
- 静态类型系统:提供静态类型检查,编译时即可发现类型错误,提升代码健壮性和可维护性
- 模块化管理:通过类型系统实现模块间的契约式开发,适用于大型项目管理
二、frida ts项目配置
frida接入ts开发可以参考frida-agent-example,使用方式也很简单,参考