lftools frida调试小工具

news2024/11/15 13:26:11

前言

这两天在分析mac程序数据 ,偶尔翻到了以前写的frida代码,如下
在这里插入图片描述
那个时候刚刚接触frida 调试Mac电脑上的程序,通过tcp转发到自己写的分析数据的工具上…(专门研究了一下Python的异步编程,libuv啥的…)

每隔那么久翻到自己写的代码 就有一种吃屎的感觉!!!

为什么写这个工具 我写所有的工具都是表明我懒 所以就写了个小工具 lftools,名字随便取的 工具其实也没太大用 纯纯记录一下文章

lftools

封装了frida底层库,不依赖于Python环境 (自己以前装frida 装Python 那么简单的事情 但是累 !), 顺便写了个rpc http调用

支持环境

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

运行截图

  • 调试mac程序
    在这里插入图片描述

  • usb数据线调试移动端
    在这里插入图片描述

  • win 附加一些exe 调用算法 做成rpc 调用
    在这里插入图片描述

启动

配置文件

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

app:
  name: lftools             # 应用名称
  enable: true              # 是否开启http调用服务
  port: 9722                # 监听端口
  ratelimit: '50ms'         # 速率限制 防止频繁调用
  call_timeout: '5s'        # 调用函数的超时时间防止阻塞 默认5s
  selected: 'hook'          # 选择的配置节点 名字随便取 但是要对应下面的节点名称

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

稍微说明一下配置文件

  • app 就是http服务 调用js公开的rpc函数
  • ratelimit 内置速率限制 防止有些call 请求过快
  • call_timeout 防止调用call阻塞 默认就是5s (5s你的call都不返回数据 哪还有什么好说的 丢垃圾桶)
  • hook 配置就是一些调试工具 http可有可无这个是必须配置的 无法就是把命令行转成了配置文件(懒!每次都输)

也可以 配置多个 但是 selected需要更改节点的名称!!!
在这里插入图片描述

运行

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

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

# 这是一个启动的过程
$ ./lftools
[N] 2024/09/14 10:07:41
阿银的Frida调试小工具 v0.0.2:
[I] 2024/09/14 10:07:41 lftools Starting 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.

>>>>>>>>>>>算法签名计算服务... by-js脚本打印
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调用方式

只有2个接口

  • 获取lftools运行状态信息 调用次数等 /api/systeminfo
{
	"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 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接收的
testlog函数请求图

分析历程

哎? 把自己的痛苦拿出来说真的好嘛?!
我写之前列了个步骤
…不说了 说个比较痛苦的
进程启动Spawn那一块 花了我好几个小时!!这就不得不说Windows的坑了 因为0.0.2版本 我封装的是 frida-core(16.5.1)在windows注入进程会提示 FError: Unexpectedly failed with error code: 0x00000057
在 16.5.1 中,Frida 使用了GetProcessInformation ProcessMachineTypeInfo 根据一些 帖子 win10不支持 所以win的frida-server用16.4.10即可

理论上是通用的啦 毕竟底层封装的frida 我也测试过安卓 mac linux Win…

最后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

21:I2C三:MPU6050的使用

MPU6050的使用 1、MPU6050简介1.1:加速度与姿态测量1.2:陀螺仪与姿态测量1.3:MPU6050内部结构1.4:模块内部寄存器 2、程序模拟I2C读写MPU60502.1:数据的读取2.2:转换为角度并进行融合 3、片上外设I2C2读写M…

支付域——聚合支付设计

摘要 聚合支付是支付行业的一项重要创新,通过整合多种支付方式,极大简化了支付流程,提升了交易效率,为商户和消费者提供了更加便捷的支付体验。随着移动支付的普及,聚合支付在未来的支付场景中将继续发挥重要作用&…

STL之初始迭代器

迭代器 什么是迭代器? - 迭代器是一种检查容器内元素并且遍历容器内元素的数据类型 迭代器的作用: - 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围 为什么需要迭代器? - STL提供每种容器的实现原理各不相同,如果没有迭代器…

心觉:《潜意识显化实操营》首批体验者招募

你是否常常感到困惑,对未来感到迷茫? 你是否在事业、生活中遇到瓶颈,迫切希望突破? 你是否想要把自己3万倍的潜意识能量释放出来 ,助力成功? 你是否想要解锁你财富显化的卡点,顺便实现财富自…

CISSP一站通关

依托轻速云维护了一个专注于CISSP备考通关的在线学习平台,提供知识串讲视频,配合大量针对性的习题和重难点习题解析,帮助备考学习者高效学习和巩固知识点。已经帮助100考友顺利通过考试。 知识串讲视频是我主讲的5天直播课程的录屏&#xff0…

C# 反射之动态生成dll/exe

这个可能应该属于反射的高级使用范围了,平常在项目中使用的人估计也不是很多。由于使用反射的话会降低性能,比如之前用到的GetValue、SetValue等之类,但是使用这种方式会大大提高效率,在这里我只想说,都直接写IL指令了…

Qt学习之旅 I

构建一个跨平台的应用(Create A Cross-Platform Application) 目录 构建一个跨平台的应用(Create A Cross-Platform Application) 设计模式 开始构建 Qt是跨平台的C框架,这里,我们将会构建一个简单的C跨平台项目来熟悉QT是如何实现简单的跨平台的。 …

HTB-MarkUp(XXE漏洞、SSH id_rsa密钥)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解MarkUp靶机 渗透过程 信息搜集 服务器开放了22SSH端口、80HTTP端口 和 443HTTPS端口 弱口令登录后台 抓取http 数据包,进行加载 账号密码字典 账号: admin密码: password 利用XXE漏洞 捕…

超分辨率技术之插值算法

🌞欢迎莅临我的个人主页👈🏻这里是我专注于深度学习领域、用心分享知识精粹与智慧火花的独特角落!🍉 🌈如果大家喜欢文章,欢迎:关注🍷点赞👍🏻评论…

天融信把桌面explorer.exe删了,导致开机之后无windows桌面,只能看到鼠标解决方法

win10开机进入桌面,发现桌面无了,但是可以ctrlaltdelete调出任务管理器 用管理员权限打开cmd,输入: sfc /scanfilec:\windowslexplorer.exe 在运行C:\windows\Explorer.exe;可以进入桌面,但是隔离几秒钟…

链式二叉树的基本操作(C语言版)

目录 1.二叉树的定义 2.创建二叉树 3.递归遍历二叉树 1)前序遍历 2)中序遍历 3)后序遍历 4.层序遍历 5.计算节点个数 6.计算叶子节点个数 7.计算第K层节点个数 8.计算树的最大深度 9.查找值为x的节点 10.二叉树的销毁 从二叉树…

物体识别之微特征识别任务综述

“深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的…

一模--解题--71-80

文章目录 9.资源管理71、 [单选] 一个项目连续错过交付日期,项目团队评估完该情况后,项目经理意识到团队绩效差的原因在于团队成员对于自己的职责缺乏清晰认识。项目经理首先应该关注哪一项? 13.干系人管理72、 [单选] 项目团队刚刚完成一个新…

element-plus的面包屑组件el-breadcrumb

面包屑组件主要用来显示当页面路径,以及快速返回之前的页面。 涉及2个组件 el-breadcrumb 和el-breadcrumb-item, el-breadcrumb的spearator指定item的分隔符 el-breadcrumb-item的to和replace属性和vue-router的一致,需要结合vue_router一起使用 用法…

WSL安装Redis

前言 本来一直是在虚拟机的Ubuntu开发 但是 搞着搞着内存不足 导致我某些数据损坏了 然后目前迁移到Wsl开发 运行WSL的相较于虚拟机你不需要很多的性能开销! 我只是代码开发和git交互,如果是搞逆向还是虚拟机。 记录一下redis 安装卸载 免得以后又忘了…

【中等】机试-滑动窗口(双指针)-例:无重复字符的最长子串

※高频、重点 字节(飞书)、百度等大厂测开高频面试题:最长不重复子串 . - 力扣(LeetCode)字节飞书面经里的高频题,没做出来,需要好好复习。 重点考察-滑动窗口这个概念,自学记录一…

攻击者如何在日常网络资源中隐藏恶意软件

近二十年来,安全 Web 网关 (SWG) 一直在监控网络流量,以检测恶意软件、阻止恶意网站并保护企业免受基于 Web 的威胁。 然而,攻击者已经找到了许多绕过这些防御措施的方法,SquareX的安全研究人员对此进行了记录。 最危险的策略之…

【Linux】调试和Git及进度条实现

这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:Linux入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1.…

LinkedHashMap 如何实现排序

目录 一、LinkedHashMap二、排序实现三、代码片段分析 一、LinkedHashMap LinkedHashMap 是 Java 中的一个集合类,它是 HashMap 的一个子类,继承了 HashMap 的所有特性,并且在此基础上增加了一个双向链表来维护元素的插入顺序或者访问顺序。L…

java的内存分配和回收机制

Java 与 C之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 概述 垃圾收集(GC)需要完成的三件事情: 哪些内存需要回收?什么时候回收?如何回收&am…