小白的frida入门

Frida,动态插桩工具。

1.安装&基础使用:

可以参考文章:安卓模拟器Frida环境搭建 (mumu+adb+frida)_mumu adb-CSDN博客

需要注意的是:

1.frida版本问题需要结合自身情况选择

2.如果遇到adb.exe: more than one device/emulator情况可以使用-s解决(参考下文)

3.若在执行frida-ps.exe等命令时提示‘命令未找到’,需要将Python的Scripts目录(通常包含frida-ps.exe)以及adb工具所在的目录添加到系统的PATH环境变量中。

本人使用:Mumu模拟器v5.24.0, frida-server-17.9.1-android-x86_64,frida version:17.9.1

先跟文章走一遍后再继续以下内容

使用:

我总结了实操部分(即彻底安装完成后Frida一般流程)

打开Mumu模拟器,运行你要hook的安卓应用。

打开你的 第一个 命令行,如下,运行命令后不要关闭

1
2
3
4
5
6
7
8
adb connect 127.0.0.1:16384
adb -s 127.0.0.1:16384 shell

su
cd /data/local/tmp/
//可以使用 ls 查看文件夹内容
chmod 777 frida-server-17.9.1-android-x86_64 //更换成你的版本喵
./frida-server-17.9.1-android-x86_64

打开你的第二个命令行:

1
adb -s 127.0.0.1:16384 forward tcp:27043 tcp:27043

第三个命令行:

1
2
frida-ps.exe -U -a //获取目标程序Identifier
frida.exe -U -f com.example.challengemobile(你获取的Identifier) -l hook.js//HOOOOOOK!!!!

2.初级练手!

参考博客:动态钩子工具Frida的入门学习 - X’s blog

此博客提供了一道安卓CTF题;Jadx打开可以看到重要的get_flag函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.ctf.test.ctf_100;

import android.os.Bundle;
import android.os.Debug;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;

/* loaded from: classes.dex */
public class MainActivity extends AppCompatActivity {
public int has_gone_int;
public int to_reach_int;

public native String get_flag(int i);
//………………省略部分
public void btn2_onclick(View v) {
TextView tv_result = (TextView) findViewById(R.id.tvResult);
tv_result.setText("{Flag:" + get_flag(this.to_reach_int) + "}");
}

static {
if (!Debug.isDebuggerConnected()) {
System.loadLibrary("ctf");
}
}
}

编辑如下hook.js;

1
2
3
4
5
6
7
8
9
10
11
12
Java.perform(function x() {
setTimeout(function x(){
Java.choose('com.ctf.test.ctf_100.MainActivity', {
onMatch: function (instance) {
console.log(instance.get_flag(0));//直接调用get_flag
},
onComplete: function () {
console.log('Done');
}
});
},1000);//等待函数加载
});

image-20260430190050629

成功获取Flag;

当然,这题还有不同解法,frida的功能除了调用函数外还有直接修改变量,达到类似IDA调试的效果

使用instance.findViewById(0x7f0c0056).setClickable(true);可以直接将题目中获取flag按钮改为可点击;

instance.to_reach_int.value = 10;则是直接将题目中的目标值调小,轻松获取flag;

这是因为 Frida 在访问 Java 字段时,返回的是一个 包装对象,而不是原始值。通过 .value属性来实际读写这个字段值。


小白的frida入门
http://example.com/2026/04/30/1/
作者
266IO
发布于
2026年4月30日
许可协议