2016 LCTF EASY 100

2016年LCTF的第一道Mobile题,分值100

使用Jadx载入,用了混淆,没有so,也就是说纯Java层,到处翻一翻

找到最开始进行校验的地方,这里是一个Button的监听类

里面调用了AES加密

可能这样不是很容易理清校验顺序,我们使用JEB来分析,JEB有重命名变量的功能,非常好用

首先来看MainActivity,在onCreate()函数中调用了一个init_string_url_png()函数,将assets文件夹下的url.png文件读取出来,然后获取其中16字节,并转换为String类型

写个代码进行计算

输出,需要注意后面那个.也是属于这个字符串的一部分

然后设置了按钮的点击事件

其中关键判断逻辑

call_vertify()函数会调用vertify()函数,然后调用c类的call_AESEnc()函数,最后将返回结果与后面那个字符串对比

前面说这里会有AES的加密操作,这里并不进行AES加密以及秘钥处理的的操作,仅仅是做一个调用,但是从我的命名可以看出来,在进行秘钥初始化之前,这里会调用一个a()函数对密码进行处理

这里非常明显的是AES加密

那么现在就可以写代码进行还原了,由于加密后的数据知道,秘钥也知道,所以用Java还原

输出

flag:LCTF{1t's_rea1ly_an_ea3y_ap4}

虽然没有so,但是面对这样的混淆,没有经验的新手或者说对AES算法不熟悉的新手足够被拦在一个小时外

Last updated