Frida零基础学习 0x03

admin 2025年6月4日10:41:05评论27 views字数 2593阅读8分38秒阅读模式
Frida零基础学习 0x03

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我会立即删除并致歉。谢谢

文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。

Frida零基础学习 0x03

字数 724,阅读大约需 4 分钟

前言

本文介绍了frida对Android Java层的操作

  • • 如何主动调用静态方法
  • • 如何修改静态变量

Challenge 0x2

APP说明

安装

adb install "Challenge 0x2.apk"

打开APK,提示

Frida零基础学习 0x03
cccf3e577a45f075dce8e0d769440896.png

目的:获取flag

反编译分析

查看包名与当前最顶层的Activity是哪一个

adb shell dumpsys window | grep CurrentFocus    // linux
adb shell dumpsys window | findstr CurrentFocus    // windows
Frida零基础学习 0x03
5b2304cee2d5dbae0d765f73dfb523b7.png

或者,我们可以通过frida-ps获取当前运行的APP的包名

frida-ps -Uai
Frida零基础学习 0x03
6bd8909114b584031e01593f418b2bf6.png

jadx反编译apk

Frida零基础学习 0x03
1ebe69a9364e104c4684832fbd6b5298.png

可以看到MainActivity中存在一个方法get_flag

get_flag方法分析:
将加密的字符串解密,然后将flag显示在界面上,也就是替换上面的HOOK ME!的位置。

在方法上按x,查看引用

Frida零基础学习 0x03
c8d77e03023651dd8327213dc0334eb6.png

没有引用,那么久需要主动调用。

public static void get_flag(int a)

它对应的是静态方法,也就是需要frida 主动调用静态方法。

frida 主动调用静态方法的模板

Java.perform(function() {

    var <变量1> = Java.use("<包名>.<类名>");
    <变量1>.<静态方法名>();

})

借助大模型,生成脚本

你是一个安卓逆向工程师,frida主动调用一个静态方法,传入参数a为4919
public static void get_flag(int a)

代码如下:

function call_static_method() {
    Java.perform(function () {
        // 替换为实际的类名
        var targetClass = Java.use('com.ad2001.frida0x2.MainActivity');

        // 调用静态方法 get_flag 并传入参数 4919
        targetClass.get_flag(4919);

        console.log("成功调用 get_flag 方法,参数为 4919");
    });
}
  • • 因为传入的参数是int类型,所以可以直接传入。

frida注入js代码

frida -U -f com.ad2001.frida0x2 -l main.js

注入后,输入方法call_static_method()调用。如果注入成功,输入call的时候,就会给出提示。

Frida零基础学习 0x03
849d3e4665f4b0a2c25610ec5668956b.png

执行

Frida零基础学习 0x03
4adc5c37949c8281d4635faac1215fd4.png

结果:

Frida零基础学习 0x03
1c52f0022e2a5084808a271e47b68ed6.png

Challenge 0x3

APP说明

目的:获取flag

安装

adb install "Challenge 0x3.apk"

启动APP,

Frida零基础学习 0x03
3477e0061a9fcb692158644fd4da587e.png

页面显示flag{xxx},点击按钮,提示try again!

反编译

jadx反编译
直接看MainActivity,分析

Frida零基础学习 0x03
7004fc5069c5f501abb1ad8f2de55384.png

按住 Ctrl + 左键点击Checker.code的code,或者双击code,即可跳转到指定方法

Frida零基础学习 0x03
280e3f94cff0410d7fd146eda6229233.png

可以看到code是静态变量,默认值为0。
有一个方法increase可以增加code的值。

我们这里有两种思路,一种是直接修改code值,另一种是主动调用increase 256次。

frida代码

先说第一种,直接修改静态变量code

参考模板

function change_static_field() {
    Java.perform(function() {

    var <变量1> = Java.use("<包名>.<类名>");
    <变量1>.<静态变量名>.value = <要修改的值>;
})
}

修改后的frida脚本

function change_static_field() {
    Java.perform(function () {
        var targetClass = Java.use('com.ad2001.frida0x3.Checker');
        targetClass.code.value = 512;
    })
}

// 立即执行xx函数
setImmediate(change_static_field)

// frida -U -f com.ad2001.frida0x3 -l main.js

结果:

Frida零基础学习 0x03
0f1339dff40eb69a2b997f6696e6e34b.png

主动调用increase方法256次

function call_static_method() {
    Java.perform(function () {
        // 替换为实际的类名
        var targetClass = Java.use('com.ad2001.frida0x3.Checker');

        for (let i=0; i < 256; i++){
            targetClass.increase();
        }


        console.log("成功调用 increase 方法 256 次");
    });
}

低版本的frida如果报错,将 let 换成 var

结果

Frida零基础学习 0x03
65ebe502ebccb6a7d8641efdf636fd9d.png

免费知识星球,每日推送安全文章,欢迎加入。

Frida零基础学习 0x03

原文始发于微信公众号(进击的HACK):Frida零基础学习 0x03

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月4日10:41:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Frida零基础学习 0x03https://cn-sec.com/archives/4130095.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息