frida由浅入深系列三:简单Java方法

·  阅读 621
frida由浅入深系列三:简单Java方法

由于工作一直会遇到frida来执行各种Hook,现在梳理整个frida的相关使用场景。由于安装的资料以及文档网上已经特别多了,本系列教程忽略相关安装步骤。

编写Java程序

package com.examle.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView textView1;
    private TextView textView2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView1 = findViewById(R.id.tv1);
        textView2 = findViewById(R.id.tv2);
        test1("test1");
        textView2.setText(test2());
    }

    private void test1(String param) {
        textView1.setText(param);
    }

    private String test2() {
        return "test2";
    }
}
复制代码

展示效果如下。

明确Hook目标

  • hook test1:需要打印方法参数
  • hook test1:修改修改方法参数
  • hook test2:需要打印方法返回值
  • hook test2:需要修改方法返回值

编写JS代码

Java.perform(function () {
    var mainActivity=Java.use("com.examle.myapplication.MainActivity");
    //hook test1
    mainActivity.test1.overload("java.lang.String").implementation = function(str){
        //step1:打印传参
        console.log(str);
        //step2:修改传参
        var newValue="new test1";
        this.test1(newValue);
    }

    //hook test2
    mainActivity.test2.implementation = function(){
        //step3:打印返回值
        console.log(this.test2());
        //step4:修改返回值
        return "new test2";
    }
});
复制代码

通过代码可以看到,我们重新构造了需要显示的字符串。

frida调用

启动frida进行hook。

界面显示如下:

现在可以直观的看到frida调用Java方法调用成功。

分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改