Frida Hook Android method(一)

WriteUp 5个月前 admin
32 0 0


样本链接: 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(一)

版权声明:admin 发表于 2023年12月12日 下午10:11。
转载请注明:Frida Hook Android method(一) | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...