{"repo":"IIIImmmyyy/HybridCLR-Hook","free":true,"listed":false,"github":"https://github.com/IIIImmmyyy/HybridCLR-Hook","clone":"git clone https://github.com/IIIImmmyyy/HybridCLR-Hook.git","description":"Unity HybridCLRHook in runtime","language":"JavaScript","stars":65,"topics":["unity","hybridclr","hybridclr-hook"],"license":null,"category":"game-templates","readme_excerpt":"[Android U3D手游安全中级篇] https://github.com/IIIImmmyyy/u3dCourse 更好的解决方案 -------------------------------------------------------------------- 功能说明 #### 支持对使用了HybirdCLR 的热更游戏 进行函数的Hook（仅支持入参的替换） HybridCLR 工作原理 #### HybridCLR 从原理上来说并不复杂，主要是Runtime下进行元数据的初始化和解析，同时实现了一个解释器，由于是动态的进行解析，基于元数据的Dump自然就失效了得到的偏移地址完全指向了解释器的占位入口 比如一个静态函数 : #### public static void Run(){} 指向的地址的符号表为 ZL7 N2M vPK10MethodInfo 这是因为在动态解析的过程中 生成的methodInfo最终需要解释器来执行，一些固定的函数自然需要固定的入口来进行跳转，HybridCLR 也是生成了非常多的符号表，对应各个类型函数的跳转； #### 根据原理和源码的查看，解释器也是有统一的入口，从此就可以找到一个锚点来进行Hook监控函数的执行。但是目前由于源码的限制，对于return 的参数没有很好的锚点，所以此版本对于return 是无法替换的 #### 基于此的话 代码也就非常简单了 具体实现在HybridCLR.doAttach 实现对methodInfo的解析 从此找到真正想要监控的函数 使用说明 #### 查看示例代码 TestJs.test(); #### 注意！！！该方式只适用与热更的dll 常规的il2cpp函数的无法使用该方式进行监听！ #### 如何修改？ 与frida attach 返回的args参数写法一致 #### 如何获取热更新的cs文件？ #### 请使用我的另外一个 项目frida-il2cppDumper #### https://github.com/IIIImmmyyy/frida-il2cppDumper #### 如果该游戏使用了热更dll 将会在头部的dll 位置将其标志 （该判断可能有版本问题，不一定准确。） 如何编译 #### clone 本项目 #### 安装必要的npm包 #### 执行命令 npm run watch #### 生成-agent.js 脚本 #### frida命令运行 ： frida -U -l agent.js -f com.DefaultCompany.TestHybridCLR 已知问题 #### 1. 由于依赖特征码查找，函数inline的情况下 EnterFrameFromInterpreter有可能会找不到 导致大部分在函数内的循环调用无法监控，此时请屏蔽: #### 2. 由于样本不多，特征码的查找可能会有问题，如果有问题请提issue，并提供样本","default_branch":null,"files":null,"tree":[],"storefront":"/r/IIIImmmyyy","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/IIIImmmyyy/HybridCLR-Hook/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}