开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 311|回复: 2
收起左侧

[必备工具] Frida Api调用工具 LRpcSign

[复制链接]
结帖率:100% (2/2)
发表于 2024-9-20 18:57:23 | 显示全部楼层 |阅读模式   湖南省长沙市
本帖最后由 AnxiangLemon 于 2024-9-20 18:58 编辑

LRpcSign

为什么写这个工具  因为有一些机器需要部署Rpc签名计算服务 (每个应用都去搞算法协议有多难你们又不是不知道)
但是每次都需要安装Frida 和 Python 还需要装一些其他python包例如flask等 反正一系列操作下来 就想着能不能搞个包一键部署

然后它就诞生了 采用go编写 封装Frida-core库 然后用gin做服务框架 优化一些细节..嗯 大致如此!
目前用于生产环境

封装了frida底层库,不依赖于Python环境 (自己以前装frida 装Python 那么简单的事情多了 就累 !)

更新记录

v0.0.1

  • 用go模仿python写个frida工具(封装frida-core)
  • 获取设备连接
  • 本地\远程注入
  • 注入模式
  • 进程选择
  • 脚本加载

v0.0.2

  • 接入gin框架 调用rpc功能  /api/call
  • 增加查看服务信息 /api/sysyteminfo
  • call超时防阻塞
  • 速率限制

v0.0.3

  • 优化高并发
  • 去除速率限制
  • 增加call签名验证

v0.0.4

  • 脚本重载 /api/reloadjs
  • 客户端进程崩溃重连
  • 多进程自动选择

v0.0.5

  • debug模式数据分析
  • 重编译frida-core

支持环境

本人是在Win的虚拟机 Ubuntu编译跑的 所以软件运行环境 就是Linux _x86_64
当然你被调试的客户端是需要 frida-server 可自行下载对应的平台

启动

配置文件

配置文件在confi目录下的app.yaml

app:
  name: lrpcsign           # 应用名称
  enable: true             # 是否开启http调用服务
  port: 9722               # 监听端口
  call_timeout: '5s'       # 调用函数的超时时间防止阻塞 默认5s
  sign: false              # 是否开启call签名 
  appkey: 'your-api-key'   # 自定义签名key sign = md5(appkey+fn+时间戳10位+appkey) 如果没有开启签名则不需要时间t
  selected: 'hook'         # 选择的配置节点
  release_mode: false      # false 会有日志打印 多进程多模块需要手动选择... 单进程无影响

hook:
  id: 'HA20DDAV'                  # 设备id 仅在Usb连接有效 
  script: 'script/index2.js'      # JS 脚本路径
  model:  1                       # 默认  0 name 1 path 
  target_name: 'XX'               # 注入的应用名称 直接attach
  target_path: 'com.lemon.demo'   # 应用程序完整路径(Spawn 模式有效)
  remote_attach: false            # 是否远程注入 不开启就是数据线调试
  host: "192.168.0.106:6666"      # 需要被注入的地方开启 frida-server -l 0.0.0.0:6666
  target_module: 'xxx.so'         # 如果这个应用是多进程 选择加载某个模块的进程进行hook

稍微说明一下配置文件

  • app 就是http服务 调用js公开的rpc函数
  • ratelimit 内置速率限制 防止有些call 请求过快 此功能在0.0.3版本已经删除
  • call_timeout 防止调用call阻塞 默认就是5s (5s你的call都不返回数据 哪还有什么好说的 丢垃圾桶)
  • hook 配置就是一些调试工具 http可有可无这个是必须配置的 无法就是把命令行转成了配置文件(懒!每次都输)
  • release_mode 减少不必要的输出 随便开不开
  • target_module 多进程有些模块不会加载 只hook加载了某个模块的进程

也可以 配置多个 但是 selected需要更改节点的名称!!!

运行

配置好了就可以运行了 ./lrpcsign  如果没有权限就先执行这个  chmod 777 lrpcsign  

以下是一个完整的运行过程 说明

# 这是一个启动的过程
$ ./lrpcsign
[N] 2024/09/14 10:07:41
Frida调试小工具 v0.0.2:
[I] 2024/09/14 10:07:41 lrpcsignStarting server port:9722   #你配置的http端口
[N] 2024/09/14 10:07:41 Chosen device:192.168.0.104:8080 #配置的设备这里是远程所以是地址
[I] 2024/09/14 10:07:41 Multiple processes found with the name:AL.exe #发现多个同名进程
[I] 2024/09/14 10:07:41 [0] PID: 15776, Name: AL.exe 
[I] 2024/09/14 10:07:41 [1] PID: 19504, Name: AL.exe
❔ Enter the index of the process to hook: #这里是等待你输入序号0或者1 乱输可能就是第一个
[N] 2024/09/14 10:10:28 ✨ Successfully attached.
..........后面就是js脚本日志了

v0.0.3

v0.0.4

frida脚本

平时怎么写就怎么写 (不行就问AI)例如

const log = console.log
log("你好 这是js脚本里打印的数据")

rpc脚本 只需要把函数公开就可以了

rpc.exports = {
  getsig2: function () {
  // ......一些call调用
    return '返回给你的看的'
  },

  getsign: function (body) {
      // ......一些call调用
    return ret;
  },
  testlog: function (data) {
    log("测试打印输出-->>>>>>", JSON.stringify(data))
    return generateMD5('123456')
  }
}

rpc调用方式

只有3个接口

  • 获取lrpcsign运行状态信息 调用次数等  /api/systeminfo
    callNum就算call请求的次数
{
    "pid": 51304,
    "os": "linux",
    "operating_system": "ubuntu",
    "os_family": "debian",
    "os_version": "22.04",
    "architecture": "x86_64",
    "kernel_version": "6.8.0-40-generic",
    "hostname": "my-Ubuntu",
    "cpu_percent": "0.29%",
    "memory_usage": "20.62 MB",
    "memory_percent": "0.17%",
    "start_time": "2024-09-14 11:10:54",
    "running_time": "0 天 0 小时 1 分钟 0 秒",
    "callNum": 10
}
  • 重载js脚本 /api/reloadjs再生产环境中也许只是需要改改部分 并不需要重启整个程序
  • 调用js call  /api/call

关于call 请求路径 /api/call post请求
body只需要两个字段 fn 就是 rpc.exports 函数名字,还一个字段是 data  data可以传任意结构体或者string int 等

示例数据如下:

{
    "fn": "testlog",
    "data": {
        "deviceid": "E8C4651EDF19F49E7D641D7C36D5D21C",
        "uin": "69AF1234",
        "type": "123",
        "subtype": 5
    }
}

lftools 会把去调用fn然后传给js脚本data数据 所以传入的data 就是js接收的

下载地址

最新版下载地址
[hide]lrpcsign下载 提取码:9722 [/hide]

知识爆炸的时代 可能已经有很多人写过类似的工具了 只不过鼠鼠脑袋没搜到想要的 有好用的工具 可以推给我呀!不想天天写工具了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
结帖率:33% (1/3)

签到天数: 14 天

发表于 2024-9-30 16:05:22 | 显示全部楼层   陕西省西安市
好好好的 东西
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

发表于 2024-9-26 11:29:28 | 显示全部楼层   江苏省苏州市
z这么好的东西竟然没有人
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表