Frida通过构造方法创建对象 0x05

admin 2025年6月7日01:29:53评论0 views字数 2447阅读8分9秒阅读模式
Frida通过构造方法创建对象 0x05

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

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

Frida通过构造方法创建对象 0x05

字数 565,阅读大约需 3 分钟

前言

本文涉及:
Frida通过类的构造方法构建对象,包括无参构造方法以及有参构造方法。

本文结束时,Java层暂时告一段落。后续的文章将会开始说明native层的hook。
当然,这些只是依据靶场的简单使用。相当于先把Frida用起来,对Frida有所了解之后,深入起来更容易理解。

Challenge 0x6

APP说明

目的:获取flag
Frida通过构造方法创建对象 0x05
474c781d3a6f6eb70f7e5597b238767d.png

直接看反编译吧。

反编译与分析

Frida通过构造方法创建对象 0x05
44428b0579b4cd9a8b961287ac9aeb24.png
Checker类如下:
Frida通过构造方法创建对象 0x05
3c23c09dc817f07c33f9928a53f625e4.png

分析:
要获得flag,需要我们传入一个Checker类的对象,并且这个对象的实例变量需要为指定值。

A.num1 = 1234
A.num2 = 4321

frida脚本编写

我们需要通过frida,创建一个Checker对象,并对实例对象赋值。

AI大模型,启动

你是一个安卓逆向工程师,frida创建一个Checker类的对象,num1赋值整型1234,num2赋值整型4321。

package com.ad2001.frida0x6;

public class Checker {
    int num1;
    int num2;
}

代码如下:

Java.perform(function() {
    // 获取目标类
    var Checker = Java.use('com.ad2001.frida0x6.Checker');
    // 创建对象实例
    var checkerInstance = Checker.$new();

    // 设置字段值
    checkerInstance.num1.value = 1234;
    checkerInstance.num2.value = 4321;

});    

结合主动调用实例方法的脚本,结合起来,如下:

function call_instance_method() {
    Java.perform(function () {
        // 创建Checker对象
        var Checker = Java.use('com.ad2001.frida0x6.Checker');
        var checkerInstance = Checker.$new();
        checkerInstance.num1.value = 1234;
        checkerInstance.num2.value = 4321;


        Java.choose('com.ad2001.frida0x6.MainActivity', {
            onMatch: function (instance) {
                // 调用实例方法
                instance.get_flag(checkerInstance)
            },
            onComplete: function () {

            }
        })
    });
}

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

主动调用call_instance_method()

成功显示flag
Frida通过构造方法创建对象 0x05
ebfb4318b19154b62edb77958fdac686.png

Challenge 0x7

frida通过类的有参构造方法创建对象

APP说明

目的:获取flag
Frida通过构造方法创建对象 0x05
474c781d3a6f6eb70f7e5597b238767d.png

反编译与分析

Frida通过构造方法创建对象 0x05
f913b8ea6a9cfcfd1d90bccecaa26bc4.png
Frida通过构造方法创建对象 0x05
d7b621ba5dc7b07d66b8efa7c28a6f66.png

frida脚本编写

你是一个安卓逆向工程师,利用frida创建一个Checker对象,要求num1赋值555,num2赋值666。

package com.ad2001.frida0x7;

public class Checker {
    int num1;
    int num2;

    public Checker(int a, int b) {
        this.num1 = a;
        this.num2 = b;
    }
}

主要代码

var Checker = Java.use('com.ad2001.frida0x7.Checker');
var checker = Checker.$new(555, 666);

完整代码如下:

function call_instance_method() {
    Java.perform(function () {
        // 创建Checker对象
        var Checker = Java.use('com.ad2001.frida0x7.Checker');
        var checkerInstance = Checker.$new(555, 666);


        Java.choose('com.ad2001.frida0x7.MainActivity', {
            onMatch: function (instance) {
                // 调用实例方法
                instance.flag(checkerInstance)
            },
            onComplete: function () {

            }
        })
    });
}

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

主动调用call_instance_method()

成功显示flag
Frida通过构造方法创建对象 0x05
9a88135a3fc04b0b075031beff2d9c36.png

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

Frida通过构造方法创建对象 0x05

原文始发于微信公众号(进击的HACK):Frida通过构造方法创建对象 0x05

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

发表评论

匿名网友 填写信息