第四天学习

先了解一下逆向:
逆向流程:获取应用的 ipa 包,解密(如果是越狱应用则不需要解密),导出头文件;
通过界面查看 APP 的布局,从布局中找到对应的头文件,查看关键函数;
hook 相关函数,达到你的目的;
静态分析加动态调试分析关键函数;
模拟或篡改原有 APP 的逻辑;
达到自己的目的。
从一个大佬的博客中先了解怎么做题:
链接:
https://github.com/ThunderJie/CTF-Practice/tree/master/CTF-Andorid%20Reverse/androideasy

解题思路:
文件下载后发现是zip格式,我们可以将后缀改为.apk然后后用jeb打开进行分析。
第四天学习
我们可以看到有这么多复杂的东西,不要紧张,对于一般比较简单的题目,我们只需要找到函数的入口,即MainActivity中onCreate方法下的onClick点击事件,因为是找***(flag),那就肯定有一个按钮负责判断***是否正确,这个按钮的点击事件就是用onClick实现的,所以大部分这种题目直接找onClick就对了。我们双击之后可以看到以下的代码,这里是smail代码,可以说是Android下的汇编代码,看不懂没关系,右键选择Decompile反汇编查看java代码就明白了
第四天学习
下面是java代码
第四天学习
上面是主要函数的内容,这里是要调用MainActivity的check()函数来判断flag是否正确,我们直接定位到check()函数
第四天学习
分析函数内容,可以看出数组v0即是我们输入的***,根据if语句可以确定***的长度和s[]数组一样有31位,下面又有一个if语句判断即为我们的关键语句:s[v1] == (v0[v1] ^ 23)
因为flag字符都是ASCII码在0-127中,所以这种题目我们直接用python进行**,我们用m替换v1,范围是(0,31),用i替换v0[v1],i即为flag中的一个一个字符,最后**得到flag
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,127):
if(s[m] == (i ^ 23)):
flag += chr(i)
print(flag)
———
我觉得,现在的我才只掌握了C语言,我又不聪明,那就只有通过它们来熟悉做题过程,熟悉各种工具,熟悉了之后再慢慢深入,冥思苦想的第四天啊!!!