Bilibili 1024 程序员节 CTF 答题解密第 5 题分析小结

780 阅读2分钟

「这是我参与11月更文挑战的第 2 天,活动详情查看:2021最后一次更文挑战

app 下载的网站

aHR0cHM6Ly9zZWN1cml0eS5iaWxpYmlsaS5jb20vc2VjMTAyNC9xL3I1Lmh0bWw=

本来 1024 的时候要发的,犯懒了

定位加密

这个题目需要我们查找 flag

打开 app ,是一个账号密码框

我们随便输一个内容看看提示是什么?

提示还差一点点,所以直接拖到 jadx 里看看

在 jadx 中打开

文件名都很清晰,因为打开 app 就可以看到账号密码框,所以我们找到MainActivity

这里就很清楚了,可以看到这里有一段逻辑

当判断b以及b2与逻辑中的数组不相等的时候弹出我们开头看到的弹窗,所以我们需要让if逻辑判断为 false,就是bb2 和逻辑中给定的值相等

加密分析

这里可以看到bb2都是输入框输入的值,经过Encrypt.aEncrypt.b之后的结果,和bArr以及逻辑中给的数组对比

所以我们去看看a,b是什么方法

使用ctrl+鼠标左键可以点击跳转

可以看到下面两个逻辑

这里的代码很简单,大概解读一下,就是传入byte数组,将数组中的每一个成员位异或的结果用Base64编码

现在我们知道结果需要逆向知道传入的 byte arr 应该怎么做?

很简单,只要倒着来一遍就可以了

也就是将结果使用base64.decode并将结果的每一个,位异或就可以得到结果了

有了上面的的思路,就可以复现代码了

这里需要注意的是PythonJava的区别

Python的取值范围0-256

Java 的取值范围

因为字节取值范围的不同,可以参考下面的代码对app内的 java 字节进行转换

转换后就可以照常进行其他操作了

运算可以得出下面的结果

我们将结果粘贴到 app 内验证,可以得出下面的提示

说明我们的结果没有问题,之后以username-password的形式提交 flag 就可以了。

以上就是本次的全部内容,咱们下次再会~