【frida】03 初识frida-node

▒ 目录 ▒

    • 🛫 导读
      • 需求
      • 开发环境
    • 1️⃣ 安装
    • 2️⃣ 创建一个 Frida-Node 脚本
      • 注入js详解
      • 主逻辑
    • 3️⃣ 效果
    • 📖 参考资料

🛫 导读

需求

frida每次安装都需要配置python环境,想想都麻烦,今天来一个纯js的环境:frida-node。

开发环境

版本号描述
文章日期2024-03-13
操作系统Win11 - 22H222621.2715
git地址https://gitcode.net/kinghzking/MyOpen
代码相对路径course\frida\03_frida-node\foo
node -vv20.10.0
npm -v10.2.3
frida-node16.2.1

1️⃣ 安装

Frida 是一种强大的动态分析工具,它可以帮助安全研究人员、逆向工程师和开发者进行应用程序的动态分析和修改。而 Frida-Node 是 Frida 的 Node.js 绑定,它使得在 Node.js 环境中使用 Frida 变得更加方便。

node安装库,一如既往的简单,执行下面命令即可:
npm install frida

2️⃣ 创建一个 Frida-Node 脚本

注入js详解

注入的js详见代码注释,使用了下面几个函数:

  • Module.findExportByName :获取MessageBoxA地址
  • Interceptor.attach :执行hook
  console.log("开始注入脚本");// 获取MessageBoxA地址const funcAddr = Module.findExportByName('user32.dll', 'MessageBoxA')// hook MessageBoxAInterceptor.attach(funcAddr, {// 进入函数前打印第一个参数(从0开始计算,第0个参数为句柄)onEnter(args) {send("HOOK MessageBoxA args[1] = " + args[1].readAnsiString())send("HOOK MessageBoxA args[2] = " + args[2].readAnsiString())}});

简单的将上面的代码封装为函数,直接返回字符串。
async function 获取注入脚本() {}

主逻辑

执行了下面几个逻辑:

  • 获取进程ID
  • 获取注入脚本
  • 设置消息通知处理函数
  • 剩下的就是固定模式:创建session、script;最后load脚本。
// node main.js MyTestMFC-vcpkg.exe
import frida from "frida";// 消息通知处理函数
function onMessage(message, data) {if (message.type === 'send') {console.log('[*] ', message.payload);} else if (message.type === 'error') {console.error(message.stack);}
}async function 获取进程ID() {let exeName = process.argv[2]console.log("exeName:", exeName)var device = await frida.getLocalDevice();var processes = await device.enumerateProcesses();  // 尽量使用管理员权限执行脚本。var pid = -1;processes.forEach(async (p_) => {// console.log(p_.name, p_.pid, p_);if (p_.name == exeName) {// 找到第一个就是if (pid == -1) {pid = p_.pid;}}});console.log("主进程 pid = " + pid);return pid;
}async function 获取注入脚本() {return `console.log("开始注入脚本");// 获取MessageBoxA地址const funcAddr = Module.findExportByName('user32.dll', 'MessageBoxA')// hook MessageBoxAInterceptor.attach(funcAddr, {// 进入函数前打印第一个参数(从0开始计算,第0个参数为句柄)onEnter(args) {send("HOOK MessageBoxA args[1] = " + args[1].readAnsiString())send("HOOK MessageBoxA args[2] = " + args[2].readAnsiString())}});
`
}async function main() {let jsSource = await 获取注入脚本()const pid = await 获取进程ID();if (pid == -1) {return -1;}// 固定模式let session = await frida.attach(pid);let script = await session.createScript(jsSource);script.message.connect(onMessage);await script.load();
}main().catch(error => {console.error(error);
});

3️⃣ 效果

执行脚本node ./course/frida/03_frida-node/foo/main.js MyTestMFC-vcpkg.exe
其中MyTestMFC-vcpkg.exe为小编自己写的测试程序,该程序点击按钮的时候,弹出对话框。

执行脚本,hook成功后,显示下面内容,且不报错。
在这里插入图片描述

点击按钮,弹出对话框时,会打印MessageBoxA的两个参数,效果如下图:
在这里插入图片描述

📖 参考资料

  • [frida] 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580
  • [frida] 01_食用指南(持续更新) https://blog.csdn.net/kinghzking/article/details/126849567

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

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

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

相关文章

蓝桥杯 2022 dp 背包

蓝桥杯 2022 dp 背包 题目链接&#xff1a; https://www.lanqiao.cn/problems/2186/learning/?subject_code1&group_code4&match_num13&match_flow2&origincup 题目&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#defi…

00后卷王的自述,我真有这么卷?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xff0c;薪资也从12k涨到了18k&#x…

springboot3 打包报错32-bit architecture x86 unsupported或者 returned non-zero result

springboot3 打包异常情况处理记录 在测试springboot3 native打包时候遇到的异常&#xff0c;百度和谷歌上方法都无法解决我的问题&#xff0c;最后记录一下我最后的原因和解决方案。 前置要求&#xff1a;自己处理好vs的相关内容后 报错一&#xff1a; [1/7] Initializing…

[AutoSar]BSW_Com013 CAN TP 模块配置

目录 关键词平台说明一、缩写对照表二、Functional Description&#xff08;vector&#xff09;2.1 Asynchronous and Synchronous behavior of CanTp_Transmit2.1.1 asynchronous 2.1.2 synchronous2.2 Separation Time by Application 三、CanTpChannels3.1 接收端3.2 发送端…

前端实现复制粘贴功能

在前端开发的世界里&#xff0c;复制粘贴功能就像是那个总是被忽视&#xff0c;却在关键时刻能救你一命的老朋友。我们习惯了用那些古老的魔法咒语&#xff08;document.execCommand(copy)&#xff09;来实现这一功能&#xff0c;但时代在进步&#xff0c;技术在更新&#xff0…

代码随想录算法训练营第七天| 454.四数相加II、383.赎金信、15.三数之和、18.四数之和

系列文章目录 目录 系列文章目录454.四数相加II使用HashMap法 383.赎金信哈希解法&#xff08;数组&#xff09; 15.三数之和双指针法 18.四数之和双指针法 454.四数相加II 题解&#xff1a;该题和1.两数之和的方法是一样的&#xff0c;这个题的难点在于key和value分别是什么。…

【Linux】-Linux下的软件商店yum工具介绍(linux和windows互传文件仅仅一个拖拽搞定!!!!)

目录 1.Linux 软件包管理器yum 1.1快速认识yum 1.2 yumz下载方式&#xff08;如何使用yum进行下载&#xff0c;注意下载一定要是root用户或者白名单用户&#xff08;可提权&#xff09;&#xff09; 1.2.1下载小工具rzsz 1.2.2 rzsz使用 1.2.2查看软件包 1.3软件的卸载 2.yum生…

C语言 指针(5) 数组和指针题解析

目录 前言 一、sizeof和strlen 二、数组和指针笔试题解析 2.1、一维数组 2.2 字符数组 2.3 二维数组 三、指针运算笔试题解析 总结 前言 今天我们继续来了解指针&#xff0c;讲一下sizeof和strlen的区别&#xff0c;数组和指针题解析 一、sizeof和strlen 我们之前在讲…

跨境电子商务支付与结算的支撑系统

​1、跨境电子商务支付与结算的核心系统。 核心系统是用户执行跨境电子商务支付的核心模块&#xff0c;包括以下具体流程。 ​ ​①用户从跨境电子商务支付应用启动跨境电子商务支付流程。 ②跨境电子商务支付应用根据应用和用户选择的支付工具&#xff0c;来调用对应的支付产…

与鲸同行,智领未来!和鲸科技高校市场渠道合作伙伴正式开启招募

AI 浪潮来袭&#xff0c;技术日新月异&#xff0c;校企合作已成为高校培养符合产业需求的应用型人才、加速科研创新与成果转化的关键途径。从单一应用到多元化布局&#xff0c;各企业更需要技术领先、战略协同的领域伙伴协力共进。 和鲸科技以“协同平台实践社区竞赛”三位一体…

【数据结构】Set的使用

文章目录 一、Set的使用1.Set的常用方法&#xff1a;1.boolean add(E e)2.void clear()3.boolean contains(Object o)4.boolean remove(Object o)5.int size()6.boolean isEmpty()7.Object[] toArray()8.boolean containsAll(Collection<?> c)9.boolean addAll(Collecti…

C语言函数—关于静态库

具体的函数声明和定义请参考上一篇文章 如果我们成为了库的开发者&#xff0c;要卖给别人C语言库&#xff0c;该怎么办呢&#xff1f; A不会写减法&#xff0c;想找你买一个函数 但是&#xff0c;他给的太少了&#xff0c;你不想把源码卖给他 那怎么办呢&#xff1f; 首先&…