今日 APP
aHR0cHM6Ly9zZWN1cml0eS5iaWxpYmlsaS5jb20vc2VjMTAyNC9xL3I1Lmh0bWw=
本来 1024 的时候要发的,犯懒了
定位加密
这个题目需要我们查找 flag
打开 app ,是一个账号密码框
我们随便输一个内容看看提示是什么?
提示还差一点点,说明是错的,还是要看校验的逻辑
直接拖到 jadx 里看看,在 jadx 中打开
文件名都很清晰,因为打开 app 就可以看到账号密码框,所以我们找到MainActivity
这里就很清楚了,可以看到这里有一段逻辑
当判断b以及b2与逻辑中的数组不相等的时候弹出我们开头看到的弹窗,所以我们需要让if逻辑判断为 false,就是b和b2 和逻辑中给定的值相等
加密分析
这里可以看到b和b2都是输入框输入的值,经过Encrypt.a和Encrypt.b之后的结果,和bArr以及逻辑中给的数组对比
所以我们去看看a,b是什么方法
使用ctrl+鼠标左键可以点击跳转
可以看到下面两个逻辑
这里的代码很简单,大概解读一下,就是传入byte数组,将数组中的每一个成员位异或的结果用Base64编码
现在我们知道结果需要逆向知道传入的 byte arr 应该怎么做?
很简单,只要倒着来一遍就可以了
也就是将结果使用base64.decode并将结果的每一个,位异或就可以得到结果
有了上面的的思路,就可以复现代码了
加密还原
这里需要注意的是Python和Java的区别
Python的取值范围0-256
Java 的取值范围
因为字节取值范围的不同,可以参考下面的代码对app内的 java 字节进行转换
转换后就可以照常进行其他操作,就是 base64 和异或
运算可以得出下面的结果
我们将结果粘贴到 app 内验证,可以得出下面的提示
说明我们的结果没有问题,之后以username-password的形式提交 flag 就可以了。
好了,以上就是今天的全部内容了。
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。








