这几天开始接触到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个字符一组将相邻的字符进行交换,得到的结果再与给定的字符串进行比较。

那就写个脚本逆回去,