今日 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 就可以了。
好了,以上就是今天的全部内容了。
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。