作为一名来自农村的老表,我终于意识到自己有多菜了。既然无法在短时间内变成技术大佬,那就只能选择动静结合(学习+实践),用时间来换取技术上的进步。于是乎,我开启了 Frida-Labs 靶场的逆向打靶之旅,试图用自己的“菜鸡智慧”来破解一个又一个关卡。


一、靶场下载 & 安装

靶场下载和安装过程就像在村口大喇叭下听广播:一切都很简单,但总有意外。
Frida-Labs 靶场,个人觉得蛮不错的,很适合新手练手。虽然它的目标是帮助你成长,但它也时刻提醒你:菜鸡的路不好走。

下载靶场 APK:

  • 项目地址

https://github.com/DERE-ad2001/Frida-Labs

安装 APK :

  • 检查设备的开发者选项,确保以下选项已正确设置
  1. USB 调试 已启用。

  2. 允许模拟位置 已启用(如果需要)。

  3. 禁用安装权限限制(部分设备可能有此选项)。

这里由于作者没sim卡,报错了【作者是直接从微信下载apk安装,只要能装上就行】:

alt text

一步到位安装 APK 文件

如果不想单独推送和安装,可以直接使用以下命令:

Text
1
2
bash复制代码
adb install /path/to/your-app.apk

这会直接从 Mac 上安装 APK 到设备。

alt text


二、靶场实战

关卡目标:输入数字并与服务端数字匹配,获取flag

实战过程:

  • 静态分析:
    用 JADX 反编译我们拿到的apk,如下:

alt text

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

alt text

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

alt text

大概意思就是判断随机数*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
    14
    Java.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);
    };
    });

    alt text

    虽然输入的参数不满足匹配条件,但是通过hook,我们强制让条件成立,获取flag如下:

    alt text