《努力学习的菜鸡之Frida-Labs靶场通关记录(一)》
作为一名来自农村的老表,我终于意识到自己有多菜了。既然无法在短时间内变成技术大佬,那就只能选择动静结合(学习+实践),用时间来换取技术上的进步。于是乎,我开启了 Frida-Labs 靶场的逆向打靶之旅,试图用自己的“菜鸡智慧”来破解一个又一个关卡。
一、靶场下载 & 安装
靶场下载和安装过程就像在村口大喇叭下听广播:一切都很简单,但总有意外。
Frida-Labs 靶场,个人觉得蛮不错的,很适合新手练手。虽然它的目标是帮助你成长,但它也时刻提醒你:菜鸡的路不好走。
下载靶场 APK:
- 项目地址
https://github.com/DERE-ad2001/Frida-Labs
安装 APK :
- 检查设备的开发者选项,确保以下选项已正确设置:
USB 调试 已启用。
允许模拟位置 已启用(如果需要)。
禁用安装权限限制(部分设备可能有此选项)。
这里由于作者没sim卡,报错了【作者是直接从微信下载apk安装,只要能装上就行】:

一步到位安装 APK 文件
如果不想单独推送和安装,可以直接使用以下命令:
1 | bash复制代码 |
这会直接从 Mac 上安装 APK 到设备。

二、靶场实战
关卡目标:输入数字并与服务端数字匹配,获取flag
实战过程:
- 静态分析:
用 JADX 反编译我们拿到的apk,如下:

先从MainActivity分析下主程序运行之后干了些什么事

从这里可以看到,先调用get_random函数,获取了一个随机数,当用户点击button的时候,触发了onclick内部函数,获取了用户从editText控件输入的内容,与get_random函数返回的随机数返回给了check函数,再往下看看,check函数又干了什么呢?

大概意思就是判断随机数*2+4和用户输入的内容是否相等,相等则返回flag。
解题思路:
1、由于我们已经知道check函数判断逻辑,即“(i * 2) + 4 == i2”,那么我们传入俩参数,只要满足条件就行,令i=3,i2=10就行。1
2
3
4
5
6
7
8
9
10
11
12
13
14Java.perform(function() {
var a = Java.use("com.ad2001.frida0x1.MainActivity");
// Hook方法并打印参数
a.check.overload('int', 'int').implementation = function(arg1, arg2) {
// 打印接收到的参数
console.log("Hooked check() method");
console.log("Received parameters: a = " + arg1 + ", b = " + arg2);
// 调用原始方法并传入固定值(3, 10)
this.check(3, 10);
};
});
虽然输入的参数不满足匹配条件,但是通过hook,我们强制让条件成立,获取flag如下:
