由一道CTF题目引发的连环血案

这里的例子是以前比赛的一道mobile题目,正好综合一下前面几篇文章讲的工具和方法,这比赛是两年前的当时并不会做,读研以后这一年开始接触了Android安全方向,逐渐掌握了这方面的东西,就把这题目重新拿来做了做。 题目链接
这个题目打开是这个样子的,要爬的楼是一个很大的数字,手动点肯定是不行的,我们使用JEB进行反编译它

可以看到代码的逻辑(这里有一个出题人留下的小bug可以让碰处意外的结果)

我们这里按照正规的解法,毕竟提高技术才是我们的目的
第一种解法:重打包
只需要把16384改成0(或者直接改跳转),但是apk有重打包检验

原理是因为这个图片是一个jpg格式的图片(可以用十六进制工具打开看一下)

方法是直接删掉这张图片,重命名为jpg格式,或者是找一张正常的png图片 看雪链接

第二种解法:smali调试的时候动态修改
按照前面smali调试的步骤,这样做的优点就是不用重打包,然后修改this.变量的值就可以,缺点是不能修改寄存器的值且步骤比较笨重

第三种解法:IDA动态调试
其实这个是建立在前面两种方法的基础上,因为setClickable按钮才会执行get_flag函数,so里面算法还是挺复杂的

因为与输入无关,使用IDA进行so动态调试断在最后,可看到产生的FLAG

最后一种做法:使用Frida框架进行hook
采用frida来hook要爬的楼数(to_reach_int)为0或者已爬楼数为9999

或在爬楼的点击事件里直接调用this.get_flag()方法