这几天开始接触到CTF Reverse中的安卓逆向部分了,写几道入门题理一下思路。
一. BUUCTF——简单注册器
附件下载来是一个apk,
拖进apkide里发现乱七八糟什么也没看出来。然后换神器jeb反编译,
在 MainActivity 按 TAB 得到伪代码,这下看懂了:
flag在这里:
对字符串进行了简单的加密,写脚本逆回去即可,代码如下:
得到flag:
二. BUUCTF——findit
题面:不知不觉,小明长大了,变成了一个程序员,虽然很苦逼,但是偶尔编写个小东西坑害公司新人还是蛮好玩的。新人小萌一天问小明wifi账号密码,一分钟后,小萌收到了一个文件。小萌想了好久都没得到密码,怎么办,女朋友要买东西,流量告罄,没wifi上不了网,不买就分手,是时候该展现月老的实力了兄弟们!代表月亮惩罚小明!得出答案。 注意:得到的 flag 请包上 flag{} 提交
= =全是废话。直接下载apk附件拖进jeb看代码。
发现两个貌似是字符串的东西,先全部转换成地球人能看懂的文字,
脚本如下:
得到两个字符串:ThisIsTheFlagHome 和 &pvkq{m164675262033l4m49lnp7p9mnk28k75}
前者交上去不对,猜测后者和flag有关系。发现 p v k q 这四个字母正好和 f l a g 都是隔了9个字母(后来我才知道这叫恺撒加密,原理很简单,就是把所有字母按某个偏移量移动),写个脚本把字母都变过去即可。
得到flag:flag{c164675262033b4c49bdf7f9cda28a75}
事后发现其实这么写脚本是不算正确的,正经的恺撒解密脚本应该这样写(GPT代劳):
三. 攻防世界——easy-so
直接把apk拖进jeb看反编译代码,
发现这个cyber什么什么CheckString函数似乎是关键函数,它决定了输出“验证通过”与否。
双击跟进,发现它是native层函数,
那么就需要看so文件了。
解压apk找到 libcyberpeace.so 文件(网上大佬说不同文件夹里的so文件反汇编结果不一样,只有 x86_64 文件夹里的so文件才是正确的,我暂且蒙鼓),然后拖进ida64,
最下面有段32位的字符串很显眼,分析这段字符串上文的操作,
大致是先输入一个字符串(即flag),然后把前16位的每个字符与其后隔了16个位置的字符进行交换,最后2个字符一组将相邻的字符进行交换,得到的结果再与给定的字符串进行比较。
那就写个脚本逆回去,