Android逆向Frida的一些基本使用(个人笔记)

本文详细介绍了使用Frida进行Android逆向工程的一些基本操作,包括参数构造、字符串与数组打印、类与方法的hook、枚举与Map的处理,以及在遇到动态加载和SO文件时的应对策略。此外,还提供了实操笔记和相关参考资料,帮助读者深入理解和应用Frida。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、大概用法

1、参数构造

也可以用来主动调用动态方法, 也可以用最底下的rpc实现

        Java.choose('com.dta.mysecondapplication.MainActivity',{
   
   
            onMatch: function (instance){
   
   
                var result = instance.add(1,2)
                console.log("result is ===>"+result)
            },
            onComplete: function () {
   
   

            }
        })

2、打印字符串

        Java.use('java.lang.Character').toString.overload('char').implementation = function (x) {
   
   
            console.log("Character.toString arg ===>",x)
            var result = this.toString(x)
            console.log("Character.toString.Result ===>", result)
            return result
        }

3、打印数组

[C是JNI的方法签名, https://www.jianshu.com/p/8783d4c9fa52,Java.array转换为指定类型的数组

        Java.use('java.util.Arrays').toString.overload('[C').implementation = function (x) {
   
   
            console.log("Arrays.toString arg ===>",JSON.stringify(x))
            // const values = Java.array('char', [ '1', '2', '3' ]);
            var result = this.toString(x)
            console.log("Arrays.toString.Result ===>", result)
            return result
        }

4、强制转换

        var WaterClass = Java.use('com.dta.mysecondapplication.Water')
        var WaterHandle = WaterClass.$new()
        var Juice = WaterHandle.getInstance()
        Juice = Java.cast(Juice, Java.use('com.dta.mysecondapplication.Juice'))
        Juice.fillEnergy()

5、创建新类

并不是一创建好就可以加载进去的。有关于classloader的加载,需要去看课件,最下面会贴出实战的代码例子

        var LiquidClass = Java.use('com.dta.mysecondapplication.liquid')
        var BeerClass = Java.registerClass({
   
   
            name: "com.dta.mysecondapplication.Beer",
            implements: [LiquidClass],
            methods: {
   
   
                flow: function () {
   
   
                    console.log("This beer's flow is called")
                    return ""
                },
                add: {
   
   
                    returnType: 'int',
                    argumentTypes: ['int', 'int'],
                    implementation(a, b) {
   
   
                        console.log(a+b);
                        return a+b;
                    }
                }
            }

        })
        // BeerClass.$new().flow()
        BeerClass.$new().add(1,2)

6、枚举打印

        var Signal = Java.use('com.dta.mysecondapplication.Signal')
        var TrafficLightClass = Java.use('com.dta.mysecondapplication.TrafficLight')
        var TrafficHandle = TrafficLightClass.$new()
        TrafficHandle.color.value = Signal.YELLOW.value
        TrafficHandle.main()

7、Map打印

JAVA怎么打印这里就怎么打印(Set也是类似原理打印)

        Java.use('com.dta.mysecondapplication.MainActivity')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles-L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值