Frida Hook Android method(一)

admin 2023年12月12日23:31:16评论781 views字数 2097阅读6分59秒阅读模式

样本链接: https://pan.baidu.com/s/11fzO6Zlgsk8FOa24yZ4b0w?pwd=k3su 提取码: k3su

安装好apk并打开。需要输入数字,点击提交,不正确的话会提示“Try again”

Frida Hook Android method(一)

mobsf扫描一下apk(如果没有搭建,可以利用fofa等搜title="mobsf",注意事项自行分析),并搜索“Try again”查看MainActivity:

Frida Hook Android method(一)

在MainActivity.class的 onCreate方法中,有一个button的点击监听:

关键代码:

MainActivity.this.check(i, Integer.parseInt(obj));

这里传进去的i在onCreate方法中已经声明了:

final int i = get_random();

而get_random()方法,返回的是一个0-99随机的整数。

int get_random() {        return new Random().nextInt(100);}

并将用户输入的数一并传入check方法:

 void check(int i, int i2) {        if ((i * 2) + 4 == i2) {            Toast.makeText(getApplicationContext(), "Yey you guessed it right", 1).show();            StringBuilder sb = new StringBuilder();            for (int i3 = 0; i3 < 20; i3++) {                char charAt = "AMDYV{WVWT_CJJF_0s1}".charAt(i3);                if (charAt < 'a' || charAt > 'z') {                    if (charAt >= 'A') {                        if (charAt <= 'Z') {                            charAt = (char) (charAt - 21);                            if (charAt >= 'A') {                            }                            charAt = (char) (charAt + 26);                        }                    }                    sb.append(charAt);                } else {                    charAt = (char) (charAt - 21);                    if (charAt >= 'a') {                        sb.append(charAt);                    }                    charAt = (char) (charAt + 26);                    sb.append(charAt);                }            }            this.t1.setText(sb.toString());            return;        }        Toast.makeText(getApplicationContext(), "Try again", 1).show();    }

在check方法中可以看到app输入错误时弹出的Toast,这里i就是随机0-99的整数,i2就是用户输入的数,将这两个数进行比对,当:

(i * 2) + 4 == i2

就会弹出“Yey you guessed it right”的字符串。

因此,在这里有2个思路去实现这个功能,一个思路是,先知道i的值是多少,再将i乘以2加4得出的结果就是要输入的结果;另一个思路是通过对check进行重载,固定传进去让(i * 2) + 4 与i2相等的值,使得输入什么都将返回“Yey you guessed it right”。

思路一

Java.perform(function() {      var a = Java.use("com.ad2001.frida0x1.MainActivity");      a.get_random.implementation = function() {          console.log("成功Hook获取0-99随机整数的方法");          var ret_val = this.get_random();          console.log("随机数为:" + ret_val);          return ret_val;    }  });

frida -U -f com.ad2001.frida0x1 -l hook_getrandom.js

Frida Hook Android method(一)

输入67*2+4的值138:

Frida Hook Android method(一)

成功弹出:Yey you guessed it right

可以继续完善这个脚本,让它自己计算好直接告诉我们需要输入多少即可:

Java.perform(function() {      var a = Java.use("com.ad2001.frida0x1.MainActivity");      a.get_random.implementation = function() {          console.log("成功Hook获取0-99随机整数的方法");          var ret_val = this.get_random();          console.log("随机数为:" + ret_val);          console.log("答案是:" + (ret_val * 2 + 4 ))//TO bypass the check        return ret_val;    }  });

Frida Hook Android method(一)

思路二:

Java.perform(function() {    var a = Java.use("com.ad2001.frida0x1.MainActivity");    a.check.overload('int', 'int').implementation = function(a, b) {        console.log("你输入的是:" + b);        this.check(8, 20);     }});

Frida Hook Android method(一)

Frida Hook Android method(一)

原文始发于微信公众号(赛哈文):Frida Hook Android method(一)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月12日23:31:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Frida Hook Android method(一)http://cn-sec.com/archives/2292476.html

发表评论

匿名网友 填写信息