一、文件分析
- 文件和解题脚本看这里
- 动态运行界面提示输入信息进行check
- chec按钮点击后出出现一个Toast,提示无效!
- 由此可以判断这个apk文件应该是个flag checker。
二、解题思路
- jeb中打卡该apk查看源码,,,还好,程序只有一个MainActivity,从button_click函数中可知flag总长度为38位,去掉flag{},还剩32位。然后调用了check()。
- 我的屏幕就这么大,装不下后面的数据显示啦~~~
- check()很简单,传入输入的editText()内容,经过四层for循环,然后有个if语句进行判断,判断成功则return 1.
- 这里给出了两个数组,分别是v1和ahhhh,其中v1.shape=(32, 32),ahhhh.shape=(1,32)
- 我们来看四层for循环,,前面两层没啥好讲的,0x20=32,就是遍历32行32列的数组,然后在第三层for中,so<v1[i][j],我们可以认为so遍历了v1[i][j]次,
- 第四层for循环中,由于awesome<its,所以该层是遍历了its次,,而its是我们输入的字符转成了整型数字。
- 这就好理解啦,,第3,4层for循环使得
t h a t s = v 1 [ i ] [ j ] ∗ i t s [ j ] thats = v1[i][j] * its[j] thats=v1[i][j]∗its[j]; - 然额,在第二层循环中,遍历了32次,得到
t h a t s = ∑ j = 0 32 v 1 [ i ] [ j ] ∗