台服dnf吧 关注:118,251贴子:1,888,864
  • 10回复贴,共1

来点干货,给 frida 脚本开发者提供一些便利

取消只看楼主收藏回复

如何将 frida 脚本工程化,使用 ES6 语法,甚至用 typescript


IP属地:广东1楼2024-06-15 16:08回复
    正常来说,frida 只能加载一个 js 脚本,于是吧里各位手里的 frida 脚本动辄五六千行,在如此巨大的脚本里进行开发,想想都折磨


    IP属地:广东2楼2024-06-15 16:11
    回复
      说说我这套的优势:
      1. ESModule 多文件和模块,这个不用说,把巨大的 js 脚本拆成多个文件和模块,便于开发和维护
      2. ES6语法,具体可百度阮一峰的ES6 入门教程。说几个好用的:
      - 字符串模板 `this is a ${str} tmpl`
      - 匿名函数 (args) => { return 1 }
      - async/await 异步函数
      3. Typescript 提供类型检查和类型提示,调用 frida API 时尤为实用


      IP属地:广东4楼2024-06-15 16:24
      收起回复
        有人看再更


        IP属地:广东5楼2024-06-15 16:25
        回复
          先科普一下 frida。
          Frida 是一个开源动态代码注入工具,用于执行运行时的分析、调试、逆向工程等操作。它提供了一种强大的能力,可以在应用程序运行时拦截函数调用、修改代码、监控 API 调用等。Frida 支持多种平台,包括 Windows、macOS、Linux、Android 和 iOS,适用于多种开发场景。
          以上来自 ChatGPT
          Frida 通过 Javascript API 提供上述的功能,也就是我们写的 js 脚本。
          Frida 有多种注入方式,在台服一般使用 Gadget。
          上述资料均可在 frida 官网 frida.re 中找到


          IP属地:广东10楼2024-06-15 17:15
          回复
            关于 Frida 版本。
            Frida 在台服的应用最早由神牛大佬发掘并推广,他提供的是 Frida 很早期的版本,好像是 9 还是 10 的了,这也是如今吧内流传的版本。这版本用的 js 引擎是 Duktape,最高只支持到 ES5.1 语法。
            从 Frida12 开始,默认 js 引擎切换为 qjs, 也可以切换到 v8,这两是支持 ES6 的。
            我问过神牛大老为什么不用新版本,说是可能与CentOS5之间有兼容性问题,但是根据我这么长时间的使用情况,高版本的 Frida 完全可以在 CentOS6 稳定运行。
            所以我们要做的第一件事就是升级 Frida 版本,在 github release 页面 (github.com/frida/frida/releases) 下载 gadget-linux-x86(_64) 的 .so 文件替换掉旧的就可以了


            IP属地:广东14楼2024-06-15 17:26
            收起回复
              工程化方面,做过前端开发的都知道,现在的前端框架如 vue/react 等都是由打包工具如 webpack/vite 等打包成单个 js 文件发布的,那么其实也可以用这些工具来打包我们的 Frida 脚本,甚至这些工具支持 ES6 语法转 ES5 语法。
              我在早期的时候甚至还开发过一个轮子自己打包模块化的代码
              但是,后来发现 frida 官方提供了一个编译器 frida-compile (github.com/frida/frida-compile),没错,说这么多就只是为了向你们推荐这个东西。把仓库 clone 下来改吧改吧,npm run build 就完事了!!!


              IP属地:广东15楼2024-06-15 17:32
              收起回复
                frida-compile 支持 typescript,所以把 demo 仓库 github.com/oleavr/frida-agent-example clone 下来就完事了


                IP属地:广东16楼2024-06-15 17:38
                回复
                  划重点,frida-compile 编译结果是用特殊结构拼接的 js 代码,拿编译结果来维护会很困难,所以还是希望各位大佬在分享的时候分享源码,分发可以只发编译结果,共同进步哈


                  IP属地:广东17楼2024-06-15 17:43
                  收起回复
                    还有个坑需要注意的,ESModule 导入时,也就是 import xxx from "xxx.js" 时,文件名必须要加上后缀 .js (不能是.ts)


                    IP属地:广东19楼2024-06-15 17:48
                    收起回复
                      贴一段我封装后的代码看看效果:
                      这是删除装备中的宠物的 gm 命令,当时搞了个有bug的宠物,一切到宠物页面就炸,所以临时加了个这个


                      IP属地:广东21楼2024-06-15 17:53
                      回复