Frida 学习之 messages

目录

一、消息发送

二、环境准备

三、从目标进程中发消息

四、在目标进程中接收消息

五、在目标进程中以阻塞方式接收消息


官方链接:Messages | Frida • A world-class dynamic instrumentation toolkit

参考链接:Frida官方手册 - 消息发送_frida send-CSDN博客

一、消息发送

在这篇教程里,我们来讲述如何从目标进程发送消息到主控端以及如何反向发消息。

二、环境准备

  • 创建文件 hello.c
#include <stdio.h>
#include <unistd.h>void f (int n){printf ( "Number: %d\n", n);}int main ( int argc, char * argv[])
{int i = 0;printf ( "f() is at %p\n", f);while (1){f (i++);sleep (1);}
}

添加说明:我是在 pycharm 中来进行这个学习,新建一个文件,改文件名为 hello.c。之后使用下面命令编译,需要GCC环境,下载参考:http://t.csdnimg.cn/jJcdC 。

  • 编译

在 hello.c 所在文件夹 cmd 命令,再使用下方命令编译

gcc -Wall hello.c -o hello

编译后,会在文件夹中生成一个hello.exe文件(这个文件名对应后面的进程名)

  • 然后启动程序,并记录下函数 f() 的地址(at 后面的内容 例如:00007ff78e5a13b4):

启动程序,可以在cmd窗口输入 hello.exe 或者 .\hello.exe会直接启动,保持其的运行。

三、从目标进程中发消息

  • 在下面的这个例子中,脚本从目标进程中给Python主控端发回了一条消息,理论上你可以发送任何可以序列化成JSON的任何JavaScript值。
  • 创建文件 send.py,大致内容如下:
import frida
import sysdef on_message(message, data):print(message)session = frida.attach("hello.exe")script = session.create_script("send (1337);")
script.on('message', on_message)
script.load()
sys.stdin.read()
  • 打开pycharm终端(alt + F12)使用如下命令执行脚本:
python .\send.py 或者 python send.py
# 备注技巧:python 输入个 s ,再按tab按键会出来s开头的文件
  • 正常情况下,应该能看到如下的输出:
  • 从上面的结果可以知道,send(1337) 这段JavaScript代码已经在 hello.exe 这个进程中执行了,可以使用 Ctrl + C 来终止脚本执行。

四、在目标进程中接收消息

  • 也可以从Python主控端往目标进程中的JavaScript代码发消息,比如下面的这个脚本 pingpong.py:
import frida
import sysdef on_message(message, data):print(message)session = frida.attach("hello.EXE")
script = session.create_script("""recv('poke', function onMessage(pokeMessage) { send('pokeBack'); });
""")script.on('message', on_message)
script.load()
script.post({"type": "poke"})
sys.stdin.read()

执行脚本,正常情况下出现如下图:

五、在目标进程中以阻塞方式接收消息

  • 在目标进程中的JavaScript代码可以用阻塞的方式接收来自主控端的消息,下面给一个例子 rpc.py
import frida
import sysdef on_message(message, data):print(message)val = int(message['payload'], 16)script.post({'type': 'input', 'payload': str(val * 2)})session = frida.attach("hello.exe")
script = session.create_script("""
Interceptor.attach(ptr("%s"), {onEnter(args) {send(args[0].toString());const op = recv('input', value => {args[0] = ptr(value.payload);});op.wait();}
});
""" % int(sys.argv[1], 16))script.on('message', on_message)
script.load()
sys.stdin.read()
  • 然后使用如下命令执行脚本(保持程序运行着):
python rpc.py 00007ff78e5a13b4     #上面的地址
  • 然后观察 hello 命令窗口输出,大致应该如下:

hello.exe这个程序界面应该一直输出你输入的数据的2倍的值,直到你按下 Ctrl+C结束。

文章到此结束,欢迎讨论,谢谢大家。

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

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

相关文章

C语言 RTC时间(年月日时分秒) 和 时间戳 互相转换

一、介绍 在C语言中&#xff0c;将年月日时分秒转换为时间戳&#xff08;Unix时间戳&#xff0c;即从1970年1月1日00:00:00 UTC到现在的秒数&#xff09;通常需要使用struct tm结构体和timegm或mktime函数。&#xff08;注意&#xff0c;mktime函数假设struct tm是本地时间&…

Python语法详解module4(函数)

目录 一、函数基础1. 函数的概念和作用2. 函数的定义和调用3. 参数传递 二、返回值和文档字符串返回值的概念和用法1. 返回值的概念2. 使用 return 关键字返回值&#xff1a;3. 多个返回值的情况&#xff1a; 文档字符串&#xff08;docstring&#xff09;的作用和使用方法1. 文…

大坝安全监测自动化技术的规范化设计准则

大坝安全监测自动化技术的规范化设计准则 一、施工阶段自动化系统设计要点 在施工阶段&#xff0c;大坝安全监测自动化系统的设计应当涵盖以下几个核心内容&#xff1a; 监测仪器的布局规划及详细的施工图纸设计。 配套土建项目以及防雷设施的施工设计规划。 明确施工过程中的技…

Jenkins工作流程原理

持续集成&#xff1a;自动部署打包发布代码 Jenkins工作流程 项目已经基于Jenkins实现了持续集成&#xff0c;每当我们push代码时&#xff0c;就会触发项目完成自动编译和打包。而需要运行某个微服务时&#xff0c;我们只需要经过两步&#xff1a; 第一步&#xff0c;访问je…

win10下,python3.7安装xlrd和xlwt

win10下&#xff0c;执行import xlwt&#xff0c;结果报错 No module named xlwt。 原因&#xff1a;使用的python没有安装xlwt包。 解决方法&#xff1a; 1&#xff09;打开一个命令窗口&#xff0c;执行&#xff1a;where python&#xff0c;可以看到使用的python路径及版…

2024年SQL Editor趋势

SQL Editor已经超越了仅仅执行查询的传统角色&#xff0c;成为提升生产力、协作和数据管理的综合平台。这一演变反映了QA软件测试人员和开发人员日益增长的需求和复杂需求。让我们深入探讨当前的趋势&#xff0c;强调这些变化如何满足用户的基本需求。 1.增强的协作功能 现代S…

Questflow借助MongoDB Atlas以AI重新定义未来工作方式

MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工&#xff0c;助力中小型初创企业自动化工作流程&#xff0c;简化数据分析&#xff0c;提升客户体验&#xff0c;推动AI与员工的协作&#xff0c;重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…

动态规划(多重背包问题+二进制优化)

引言 多重背包&#xff0c;相对于01背包来说&#xff0c;多重背包是每个物品会有相应的个数&#xff0c;最多可以选那么多个&#xff0c;因而对于朴素多重背包&#xff0c;需要在01背包的基础上&#xff0c;再加一层物品的循环 朴素多重背包例题 P2347 [NOIP1996 提高组] 砝…

【因果推断python】19_局部平均效应2

目录 局部平均干预效果&#xff1a;后期 对参与度的影响 关键思想 局部平均干预效果&#xff1a;后期 局部平均处理效应明确了我们可以估计因果效应的人群。这也是查看 IV 的另一种方式&#xff0c;它提供了我们可以使用的其他很酷的直觉。在现代 IV 中&#xff0c;我们将工…

Codeforces Round 951 (Div. 2) C、D(构造、线段树)

1979C - Earning on Bets 构造题&#xff1a;观察到k范围很小&#xff0c;首先考虑最终硬币总数可以是多少&#xff0c;我们可以先假设最终的硬币总数为所有k取值的最小公倍数&#xff0c;这样只需要满足每个结果添加1枚硬币即可赚到硬币。 // Problem: C. Earning on Bets //…

《Kubernetes部署篇:基于Kylin V10+ARM64架构CPU+containerd一键离线部署容器版K8S1.26.15高可用集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要针对不同的客户环境部署基于containerd容器版 K8S 1.26.15集群&…

备份和恢复realme智能手机:综合指南

realme自2018年成立至今&#xff0c;一直秉持着“敢于超越”的品牌精神&#xff0c;专注于为全球年轻用户提供性能卓越、设计新颖的高品质手机。对于如何备份和恢复realme手机&#xff0c;本文将介绍多种不同的方法。 第1部分&#xff1a;使用Coolmuster Android Backup Mana…

用 OpenCV 实现图像中水平线检测与校正

前言 在本文中&#xff0c;我们将探讨如何使用 Python 和 OpenCV 库来检测图像中的水平线&#xff0c;并对图像进行旋转校正以使这些线条水平。这种技术可广泛应用于文档扫描、建筑摄影校正以及机器视觉中的各种场景。 环境准备 首先&#xff0c;确保您的环境中安装了 OpenC…

【RAG提升技巧】查询改写HyDE

简介 提高 RAG 推理能力的一个好方法是添加查询理解层 ——在实际查询向量存储之前添加查询转换。以下是四种不同的查询转换&#xff1a; 路由&#xff1a;保留初始查询&#xff0c;同时查明其所属的适当工具子集。然后&#xff0c;将这些工具指定为合适的选项。查询重写&…

随身WIFI修改MAC(bssid)并接收短信

将SIM卡插入随身WiFi卡槽 将随身WIFI插入电脑 打开 http://ufi.icewifi.com &#xff0c;输入设备IMEI &#xff08;或直接扫描设备包装盒上的二维码&#xff09; 点击“确认” 登录到设备主页&#xff08;网址可收藏保存&#xff09; 点击“WIFI配置”按钮&#xff0c;输入想…

C#——枚举类型详情

枚举类型 枚举类型&#xff08;也可以称为“枚举器”&#xff09;由一组具有独立标识符&#xff08;名称&#xff09;的整数类型常量构成&#xff0c;在 C# 中枚举类型不仅可以在类或结构体的内部声明&#xff0c;也可以在类或结构体的外部声明&#xff0c;默认情况下枚举类型…

【Python报错】已解决AttributeError: Nonetype Object Has NoAttribute Group

解决Python报错&#xff1a;AttributeError: ‘list’ object has no attribute ‘get’ 在Python中&#xff0c;AttributeError通常表示你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute get的错误&#xff0c;这通常意味着…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制&#xff08;Redis Sentinel&#xff09;1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么&#xff1f;如何解决&#xff1f;2、redis缓存穿透是什么&#xff1f;如何解决&am…

如何查询公网IP?

在互联网中&#xff0c;每个设备都有一个唯一的公网IP地址&#xff0c;用于标识设备在全球范围内的位置。查询公网IP是一个常见的需求&#xff0c;无论是用于远程访问、网络配置还是其他目的&#xff0c;了解自己的公网IP地址都是很有必要的。本文将介绍几种常见的方法来查询公…

HQChart使用教程100-自定义Y轴分段背景色

HQChart使用教程100-自定义Y轴分段背景色 效果图步骤1. 注册Y轴自定义刻度创建事件2. 配置Y轴背景色eventdataobj示例 交流QQ群HQChart代码地址 效果图 步骤 1. 注册Y轴自定义刻度创建事件 事件IDSCHART_EVENT_ID.ON_CREATE_CUSTOM_Y_COORDINATE, 如何注册事件详见教程 HQCh…