通过一道CTF题目来认识一下Frida

本文作者:杉木@涂鸦智能安全实验室

Frida

https://github.com/frida/frida
Frida是一个动态代码插入工具,可用于各种应用程序的调试和逆向工程。它提供了多种安装选项,包括Python和Node.js绑定,并提供了详细的命令行参数和选项。Frida还提供了一个服务器端,可以在目标执行环境(如手机)上安装和运行。此外,Frida还提供了多种工具,如frida-apk、frida-compile和frida-ps。Frida的Python库提供了丰富的功能,可以通过Python脚本调用。最后,文档通过一个CTF题目示例展示了如何使用Frida进行调试和逆向工程。

Install

pip install frida-tools # CLI tools
pip install frida       # Python bindings
npm install frida       # Node.js bindings
usage: frida [options] targetpositional arguments:args                  extra arguments and/or targetoptional arguments:-h, --help            show this help message and exit-D ID, --device ID    connect to device with the given ID-U, --usb             connect to USB device-R, --remote          connect to remote frida-server-H HOST, --host HOST  connect to remote frida-server on HOST--certificate CERTIFICATEspeak TLS with HOST, expecting CERTIFICATE--origin ORIGIN       connect to remote server with “Origin” header set to ORIGIN--token TOKEN         authenticate with HOST using TOKEN--keepalive-interval INTERVALset keepalive interval in seconds, or 0 to disable (defaults to -1 to auto-select based ontransport)--p2p                 establish a peer-to-peer connection with target--stun-server ADDRESSset STUN server ADDRESS to use with --p2p--relay address,username,password,turn-{udp,tcp,tls}add relay to use with --p2p-f TARGET, --file TARGETspawn FILE-F, --attach-frontmostattach to frontmost application-n NAME, --attach-name NAMEattach to NAME-N IDENTIFIER, --attach-identifier IDENTIFIERattach to IDENTIFIER-p PID, --attach-pid PIDattach to PID-W PATTERN, --await PATTERNawait spawn matching PATTERN--stdio {inherit,pipe}stdio behavior when spawning (defaults to “inherit”)--aux option          set aux option when spawning, such as “uid=(int)42(supported types are: string, bool, int)--realm {native,emulated}realm to attach in--runtime {qjs,v8}    script runtime to use--debug               enable the Node.js compatible script debugger--squelch-crash       if enabled, will not dump crash report to console-O FILE, --options-file FILEtext file containing additional command line options--version             show program's version number and exit-l SCRIPT, --load SCRIPTload SCRIPT-P PARAMETERS_JSON, --parameters PARAMETERS_JSONparameters as JSON, same as Gadget-C USER_CMODULE, --cmodule USER_CMODULEload CMODULE--toolchain {any,internal,external}CModule toolchain to use when compiling from source code-c CODESHARE_URI, --codeshare CODESHARE_URIload CODESHARE_URI-e CODE, --eval CODE  evaluate CODE-q                    quiet mode (no prompt) and quit after -l and -e-t TIMEOUT, --timeout TIMEOUTseconds to wait before terminating in quiet mode--pause               leave main thread paused after spawning program-o LOGFILE, --output LOGFILEoutput to log file--eternalize          eternalize the script before exit--exit-on-error       exit with code 1 after encountering any exception in the SCRIPT--kill-on-exit        kill the spawned program when Frida exits--auto-perform        wrap entered code with Java.perform--auto-reload         Enable auto reload of provided scripts and c module (on by default, will be required in thefuture)--no-auto-reload      Disable auto reload of provided scripts and c module

Frida详细安装教程

frida server

前面是一些frida的客户端和一些工具类,以及js的工具;接下来是在执行环境下的服务端安装;

https://github.com/frida/frida/releases

先看本地的frida客户端版本;
在这里插入图片描述

登录到执行环境下,也就是手机查看环境,下载对应的版本和环境的frida-server,并移动到手机上执行;

在这里插入图片描述
请添加图片描述
进行端口转发;
请添加图片描述

一开始传到下载目录下面,没有执行权限;

请添加图片描述

要传到/data/local/tmp目录,然后修改文件权限,再执行;

请添加图片描述

如果运行不了,关闭liunx的SELinux: echo 0 > /sys/fs/selinux/enforce

请添加图片描述

frida工具

请添加图片描述

frida-apk

usage: frida-apk [options] path.apkpositional arguments:apk                   apk fileoptional arguments:-h, --help            show this help message and exit-O FILE, --options-file FILEtext file containing additional command line options--version             show program's version number and exit-o OUTPUT, --output OUTPUToutput path

frida-compile

usage: frida-compile [options] <module>positional arguments:module                TypeScript/JavaScript module to compileoptional arguments:-h, --help            show this help message and exit-O FILE, --options-file FILEtext file containing additional command line options--version             show program's version number and exit-o OUTPUT, --output OUTPUTwrite output to <file>-w, --watch           watch for changes and recompile-S, --no-source-maps  omit source-maps-c, --compress        compress using terser-v, --verbose         be verbose

frida-ps

usage: frida-ps [options]optional arguments:-h, --help            show this help message and exit-D ID, --device ID    connect to device with the given ID-U, --usb             connect to USB device-R, --remote          connect to remote frida-server-H HOST, --host HOST  connect to remote frida-server on HOST--certificate CERTIFICATEspeak TLS with HOST, expecting CERTIFICATE--origin ORIGIN       connect to remote server with “Origin” header set to ORIGIN--token TOKEN         authenticate with HOST using TOKEN--keepalive-interval INTERVALset keepalive interval in seconds, or 0 to disable (defaults to -1 to auto-select based on transport)--p2p                 establish a peer-to-peer connection with target--stun-server ADDRESSset STUN server ADDRESS to use with --p2p--relay address,username,password,turn-{udp,tcp,tls}add relay to use with --p2p-O FILE, --options-file FILEtext file containing additional command line options--version             show program's version number and exit-a, --applications    list only applications-i, --installed       include all installed applications-j, --json            output results as JSON

frida API

先看看python的frida库有哪些能力;

请添加图片描述
请添加图片描述
请添加图片描述

通过一道CTF题来认识一下frida

题目文件查看文章绑定的资源。

一道看雪的题目,打开APP执行一下看看;

请添加图片描述

有了关键字,反编译app后搜索一下,就在main中,可以清晰的看到入口处理逻辑;

请添加图片描述

主要处理逻辑在这个vvvv里面,只有vvvv通过验证,就会返回flag;进去vvvv里面看看;

请添加图片描述

有两个判断条件,一个是两个地方输入的长度总共要等于5;一个是要和bytes§一样;也就是说返回跟”6f452303f18605510aac694b0f5736beebf110bf“一样的内容就可以通过,这里为了学习如何使用frida,就先绕过验证;因为要拿flag的话,需要进行爆破,从题目提示得知,5位数字,然后经过eeee处理后等于bytes§就是对应的flag了;

先试着简单打印我们输入的内容;

function main(){//frida的main函数入口Java.perform(function() {				//获取包名类方法Java.use("com.kanxue.pediy1.VVVVV").VVVV.implementation = function(x,y){//hook逻辑var result = this.VVVV(x,y);console.log("x,y,result:",x,y,result);return result;}})
}
setImmediate(main)

请添加图片描述

当然frida支持多种方式调用,上面是js脚本,可以直接用frida命令的方式调用;

也可以使用python的frida库调用js的方式来执行,如下;

import frida# 1. 用户输入目标进程名称
target_process = input("请输入目标进程名称:")# 2. 通过进程名称附加到目标进程
process = frida.get_usb_device().attach(target_process)# 3. 读取JavaScript文件内容
with open("exp.js", "r") as file:js_code = file.read()# 4. 创建一个Frida脚本
script = process.create_script(js_code)# 5. 定义回调函数,用于处理脚本的消息
def on_message(message, data):print("[*] Message:", message)# 6. 注册回调函数
script.on("message", on_message)# 7. 加载并运行脚本
script.load()# 8. 保持脚本运行,直到手动停止
input("[!] Press Enter to stop...")# 9. 分离脚本并关闭Frida会话
script.unload()
process.detach()

请添加图片描述

思路是通过篡改eeee函数执行结果,让eeee返回跟bytes§一样的内容即可让程序验证通过;

function main(){Java.perform(function() {Java.use("com.kanxue.pediy1.VVVVV").eeeee.implementation = function(x){var result = this.eeeee(x);console.log("x,result:",x,result);var v = result;v = Java.use("java.lang.String").$new("6f452303f18605510aac694b0f5736beebf110bf").getBytes();console.log(v);return v;}})
}
setImmediate(main)

请添加图片描述
请添加图片描述

上面只是绕过了程序验证,并非题目实际的flag,要获得真实flag还需要对5位数字进行爆破;

下面是爆破flag的脚本;

function firethehome(){Java.perform(function(){var VVVVV_Class = Java.use("com.kanxue.pediy1.VVVVV")console.log("VVVVV_Class:", VVVVV_Class)VVVVV_Class.eeeee.implementation=function(x){var result = this.eeeee(x);console.log("VVVVV.eeeee is hook! x ,result",x,JSON.stringify(result));return result;}var ByteString = Java.use("com.android.okhttp.okio.ByteString");console.log(ByteString);var pSign = Java.use("java.lang.String").$new("6f452303f18605510aac694b0f5736beebf110bf").getBytes();console.log( ByteString.of(pSign).hex());// 爆破5位for(var i = 9999;i<100000;i++){console.log("i="+i);var v =  Java.use("java.lang.String").$new(String(i));var vSign = VVVVV_Class.eeeee(v);console.log("vSign:",ByteString.of(vSign).hex());if(ByteString.of(vSign).hex() == ByteString.of(pSign).hex()){console.log("i="+i);break;}}})
}
setImmediate(firethehome)

Frida及Brida学习记录 - 先知社区

JavaScript API

Frida Android hook

[原创]举杯邀Frida,对影成三题-Android安全-看雪-安全社区|安全招聘|kanxue.com

漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。

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

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

相关文章

JVM虚拟机系统性学习-运行时数据区(虚拟机栈、本地方法栈)

虚拟机栈 虚拟机栈为每个线程所私有的&#xff0c;如下图&#xff1a; 栈帧是什么&#xff1f; 栈帧存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息 栈内存为线程私有的空间&#xff0c;每个方法在执行时都会创建一个栈帧&#xff0c;执行该方法时&…

Java的NIO工作机制

文章目录 1. 问题引入2. NIO的工作方式3. Buffer的工作方式4. NIO数据访问方式 1. 问题引入 在网络通信中&#xff0c;当连接已经建立成功&#xff0c;服务端和客户端都会拥有一个Socket实例&#xff0c;每个Socket实例都有一个InputStream和OutputStream&#xff0c;并通过这…

企业IT安全:内部威胁检测和缓解

什么是内部威胁 内部威胁是指由组织内部的某个人造成的威胁&#xff0c;他们可能会造成损害或窃取数据以谋取自己的经济利益&#xff0c;造成这种威胁的主要原因是心怀不满的员工。 任何内部人员&#xff0c;无论是员工、前雇员、承包商、第三方供应商还是业务合作伙伴&#…

SSL证书HTTPS保护服务

SSL证书属于数字证书的其中一种&#xff0c;广泛用于https协议&#xff0c;从而可以让数据传输在加密前提下完成&#xff0c;确保HTTPS网络安全是申请SSL证书必要工作。 SSL证书是主要用于https是一种加密协议&#xff0c;仔细观察网站地址会发现目前主流的网址前面都会有http…

【玩转TableAgent数据智能分析】利用TableAgent进行教育数据分析

文章目录 前言九章云极&#xff08;DataCanvas&#xff09;介绍前期准备样例数据集体验1. 样例数据集-Airbnb民宿价格&评价 体验1.1 体验一1.2 体验二 教育数据的分析&#xff08;TableAgent&ChatGLM对比&#xff09;1. 上传文件2. 数据分析与对比2.1 分析一2.1.1 Tabl…

web服务器之——建立两个基于ip地址访问的网站

目录 准备工作&#xff1a;web服务器搭建 第一步&#xff1a;挂载 第二步&#xff1a;编辑配置文件 第三步&#xff1a;安装软件包 第四步&#xff1a;启动httpd 查看配置文件&#xff1a; 第五步&#xff1a;设置防火墙状态&#xff1a; 重启服务: 查看状态&#xff1…

Leetcode—2961.双模幂运算【中等】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—2961.双模幂运算 实现代码 class Solution { public:int func(int a, int b) {int ans 1;for(int i 0; i < b; i) {ans * a;ans % 10;}return ans;}int func2(int a, int b, int m) {int ans 1;for(int i 0; i …

评论送书:以企业架构为中心的SABOE数字化转型五环法

01 传统企业数字化转型面临诸多挑战 即将过去的2023年&#xff0c;chatGPT大模型、数据资产入表等事件的发生&#xff0c;标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态&#xff0c;将推动生产方式、生活方式和治理方式深刻变革&a…

2-Spring

2-Spring 文章目录 2-Spring项目源码地址Spring概述Spring特点&#xff08;优点&#xff09;Spring相关学习网站基于Maven的Spring框架导入Spring的组成及拓展 Spring-IOC--原型理解IOC-原型--示例开发示例-常规开发示例-Set函数&#xff08;IOC原型&#xff09;开发示例-对比思…

C++STL的list(超详解)

文章目录 前言构造函数capacitylist的访问insertswapsort 前言 看一下list, 在任意位置可以进行O(1)插入删除的操作。 它怎么实现这个东西&#xff1f;它其实就是一个带头双向循环链表。 #成员函数 构造函数 这里面的构造函数学完string和vector之后已经相当熟悉了。 capaci…

如何将用户有过行为的item用list形式记录下来,另外如何计算list里的个数

导语&#xff1a; 最近做项目&#xff0c;发现有些语法想一想是知道&#xff0c;但实际操作起来跟想的情况不一样哈哈。不是遇见bug就是输出的结果不是自己想要的&#xff0c;CSDN跟知乎找了很多没怎么解决&#xff0c;后面多摸索多实操终于解决&#xff01; test_data[item_…

数据结构-05-跳表SkipList

1-什么是跳表 跳表SkipList是一种随机化的数据结构&#xff0c;基于并联的链表&#xff0c;实现简单&#xff0c;插入、删除、查找的复杂度均为 O(logN)&#xff08;大多数情况下&#xff0c;因为是实现上是概率问题&#xff09;&#xff0c;因为其性能匹敌红黑树且实现较为简单…

msvcr110.dll丢失的解决方法有哪些-常见方法教程

我们在日常使用电脑中经常遇到各种问题&#xff0c;比如系统文件丢失是最常见的&#xff0c;其中msvcr110.dll丢失也是非常常见的问题&#xff0c;那么msvcr110.dll文件为什么会丢失&#xff0c;丢失对电脑有什么影响呢&#xff0c;丢失了有什么解决方法&#xff1f;今天小编就…

Synchronized 优化

目录 前言 重点 一、 轻量级锁 二、锁膨胀 三、重量锁 四、偏向锁 五、其他优化 我的其他博客 前言 Java synchronized 是一种机制&#xff0c;可以保证多个线程在访问共享资源时的同步性。synchronized 关键字可以用于方法或代码块上&#xff0c;当一个线程获取了这个对…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接&#xff1a;leetcode使用最小花费爬楼梯 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求达到楼梯顶部的最低花费. 由题可得&#xff1a; cost[i] 是从楼梯第 i 个…

第6章:知识建模:概述、方法、实例

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

java--LinkedHashSet集合的底层原理和TreeSet集合

1.LinkedHashSet底层原理 ①依然是基于哈希表(数组、链表、红黑树)实现的 ②但是&#xff0c;它的每个元素都额外的多了一个双链表的机制记录它前后元素的位置。 2.TreeSet ①特点&#xff1a;不重复、无索引、可排序(默认升序排序&#xff0c;按照元素的大小&#xff0c;由…

Nacos热更新(动态获取配置)

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

el-date-picker 限制选择范围最大为一年,设置快捷选项,设置默认时间

el-date-picker 限制选择范围最大为一年&#xff1a; 主要代码为&#xff1a;:picker-options"pickerOptions" 以及 blur"pickerBlur" <el-date-pickerv-model"transactionTime"type"daterange"style"width: 200px"size…

盒马补贴量价-2021KDD

概述&#xff1a; 电商商品定价三个关键问题&#xff1a; 在只有观测数据的时候&#xff0c;怎么构建价格弹性&#xff0c;现在来看这就是一个反事实推断的问题&#xff0c;不仅是如何做的问题&#xff0c;还有如何评估的问题。长周期的规划决策问题怎么建模 & 求解&#…