androideasy

链接:

https://github.com/ThunderJie/CTF-Practice/tree/master/CTF-Andorid%20Reverse/androideasy

解题思路:

文件下载后发现是zip格式,将后缀改为.apk然后用jeb打开进行分析

对于一般比较简单的题目,我们只需要找到函数的入口,即MainActivity中onCreate方法下的onClick点击事件,因为是找注册码(flag),那就肯定有一个按钮负责判断注册码是正确,这个按钮的点击事件是否正确,这个按钮的点击事件就是用onClick实现的,所以大部分这种题目直接找onClick就对了。我们双击之后可以看到以下代码,这里是smali代码。

java代码如下

这里是要调用MainActivity的check()函数来判断flag是否正确,我们直接定位到check()函数

分析函数内容,可以看出数组v0即是我们输入的注册码,根据if语句可以确定注册码的长度和s[]数组一样有31位,下面又有一个if语句判断即为我们的关键语句:s[i]==chars[i]^23

因为flag字符都是ASCII码在0-127中,所以我们只需用python进行爆破

解密脚本:

s = {113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115, 106}
flag = ""
for m in range(0,31):
for i in range(0,128):
if(s[m]==i^23):
flag+=i
print(flag)

simplecheck

链接:https://github.com/ThunderJie/CTF-Practice/tree/master/CTF-Andorid%20Reverse/simplecheck

解题思路:

因为是.apk文件,直接放入雷电模拟器里面运行一下,非常简单,这是一个判断注册码的题目

用jeb打开分析,看看MainActivity里面的内容

这里通过a方法来判断正确与否,所以我们主要研究a方法

可以看到我们的输入即为iArr,通过爆破即可得到flag

解密脚本

a = [0, 146527998, 205327308, 94243885, 138810487, 408218567, 77866117, 71548549, 563255818, 559010506, 449018203, 576200653, 307283021, 467607947, 314806739, 341420795, 341420795, 469998524, 417733494, 342206934, 392460324, 382290309, 185532945, 364788505, 210058699, 198137551, 360748557, 440064477, 319861317, 676258995, 389214123, 829768461, 534844356, 427514172, 864054312]
b = [13710, 46393, 49151, 36900, 59564, 35883, 3517, 52957, 1509, 61207, 63274, 27694, 20932, 37997, 22069, 8438, 33995, 53298, 16908, 30902, 64602, 64028, 29629, 26537, 12026, 31610, 48639, 19968, 45654, 51972, 64956, 45293, 64752, 37108]
c = [38129, 57355, 22538, 47767, 8940, 4975, 27050, 56102, 21796, 41174, 63445, 53454, 28762, 59215, 16407, 64340, 37644, 59896, 41276, 25896, 27501, 38944, 37039, 38213, 61842, 43497, 9221, 9879, 14436, 60468, 19926, 47198, 8406, 64666]
d = [0, -341994984, -370404060, -257581614, -494024809, -135267265, 54930974, -155841406, 540422378, -107286502, -128056922, 265261633, 275964257, 119059597, 202392013, 283676377, 126284124, -68971076, 261217574, 197555158, -12893337, -10293675, 93868075, 121661845, 167461231, 123220255, 221507, 258914772, 180963987, 107841171, 41609001, 276531381, 169983906, 276158562]
flag = ""
for m in range (1,34):
for i in range(0,128):
if((a[m] == b[m]*i*i+c[m]*i+d[m] )and(a[m]==(b[m-1]*i*i)+c[m-1]*i+d[m-1])):
flag+=chr(i)
print(flag)

运行得到flag:flag{MAth_i&_GOOd_DON7_90V_7hInK?(自己添加一个})