typora-root-url: ./

[TOC]

执行

frida -U com.example.androiddemo(包名) -l hook.js(脚本文件名)

hook类里的方法

两个相同的函数名 参数不同

使用frida hook的笔记 自用

让LogingActivity.a(obj, obj)=obj2即可

即下面那个a函数的返回值=obj2

=> 编写hook脚本,查看a函数的返回值

function hook_java() {    java.perform(function () {                                                                        //包名类名        var LoginActivity = Java.use("com.xxx....Activity.LoginActivity");        // 上面的变量.函数名.implementation    返回值的类型对应上        LoginActivity.a.implementation = function(str, str2) {             var result = this.a(str, str2);            console.log("LoginActivity.a->",str, str2, result);            return result;        }    });}function main() {    hook_java();}setImmediate(main);

因为有两个a函数,要写成如下

function hook_java() {    java.perform(function () {                                                                        //包名类名        var LoginActivity = Java.use("com.xxx....Activity.LoginActivity");        // 上面的变量.函数名.implementation    返回值的类型对应上        //多了 overload('java.lang.String', 'java.lang.String')        //会在报错的时候显示出来怎么修改        LoginActivity.a.overload('java.lang.String', 'java.lang.String').implementation = function(str, str2) {             var result = this.a(str, str2);            console.log("LoginActivity.a->",str, str2, result);            return result;        }    });}function main() {    hook_java();}setImmediate(main);

hook函数 返回篡改的值

使用frida hook的笔记 自用

使用frida hook的笔记 自用

function hook_java() {    java.perform(function () {        var FridaActivity1 = Java.use("com.example.androiddemo.Activity.FridaActivity1");        FridaActivity1.a.implementation = function(barr) {            console.log("FridaActivity1.a ->")            return "jadx反编译出的源码指定的那段字符串";        }    });}function main() {    hook_java();}setImmediate(main);

主动调用函数

调用静态函数

主动调用 setStatic_bool_var 和 setBool_var 这两个函数,把那两个变量设置为true

使用frida hook的笔记 自用

function call_FridaActivity2() {    Java.perform(function() {        var FridaActivity2 = Java.use("com.example.androiddemo.Activity.FridaActivity2");        FridaActivity2.setStatic_bool_var(); //调用静态函数        //非静态  调用非静态静态函数        Java.choose("com.example.androiddemo.Activity.FridaActivity2", {            onMatch: function(instance) {                instance.setBool_var();            },            onComplete: function(){            }        });    });}

hook改变变量的值

静态、非静态、变量名和函数名重合

使用frida hook的笔记 自用

function call_FridaActivity3() {    Java.perform(function() {        var FridaActivity3 = Java.use("com.example.androiddemo.Activity.FridaActivity3");        //类名.变量名.value        FridaActivity3.static_bool_var.value = true; //静态        console.log(FridaActivity3.static_bool_var.value);        //非静态变量        Java.choose("com.example.androiddemo.Activity.FridaActivity3", {            onMatch: function(instance) {                //设置非静态成员变量的值                instance.bool_var.value = true;                //设置有相同函数名的成员变量的值 在变量名前加一个下划线                instance._same_name_bool_var.value = true;                console.log(instance.bool_var.value)                console.log(instance._same_name_bool_var.value)            },            onComplete: function(){            }        });    });}

hook类中类

hook内部类 枚举函数

使用frida hook的笔记 自用

function hook_InnerClasses() {    Java.perform(function() {        //                           中间用$符号连接        var InnerClasses = Java.use("com.example.androiddemo.Activity.FridaActivity4$InnerClasses");        console.log(InnerClasses);        // <com.example.androiddemo.Activity.FridaActivity4$InnerClasses>        //hook 内部类的函数        InnerClasses.check1.implementation = function(){            return true;        };        InnerClasses.check2.implementation = function(){            return true;        };        InnerClasses.check3.implementation = function(){            return true;        };        InnerClasses.check4.implementation = function(){            return true;        };        InnerClasses.check5.implementation = function(){            return true;        };        InnerClasses.check6.implementation = function(){            return true;        };    });}

hook多个函数

function hook_mul_function(){    Java.perform(function(){        var class_name = "com.example.androiddemo.Activity.FridaActivity4$InnerClasses"        var InnerClasses = Java.use(class_name);        //console.log(InnerClasses.class.getDeclareMethods());        //xxx.class.getDeclareMethods()        var all_methods = InnerClasses.class.getDeclareMethods();        for (var i=0; i < all_methods.length, i++){            console.log(all_methods[i]);        }    });}