bugku_easy-200
思路分析
直接进行反编译即可
进入format.form() 如下所示
截取字符flag{XXX} 很明显是截取XXX
接着分析
进入到check1.check()
主要就是看checkPasswd(pass),很明显可以看到native??
猜测应该是调用了java的native层
不熟悉的朋友可以去看一下 Android系统五层架构
一般都是在资源文件下lib目录中的某libxxx.os
直接导出到本地,用ida32打开即可
首先就是找到函数
明显是第一个
分析源码
可以看出dest是我们输入的东西,其中的do…while做了一个倒序
进入到sub_95D0说实话,没太看懂。猜测应该是某种赋值,把dest的值传给v19
然后进入encrpyt
很明显是base64加密,不理解的朋友可以去学一下,base64加密算法的原理
,再去查一下字符串
字符表也没变换,
最后
进入
sub_A950就是单纯的比较字符串,v10已经知道了,就是倒序后加密的字符串
只需要找到secret即可
交叉引用查看即可
把最后的点换成=即可
进行base64解密—>倒序即可
整体思路: 输入字符串flag{XXX},然后获取XXX,在调用native的checkPasswd对字符串进行倒序,然后base64加密,在于secrct作比较即可
import base64
bas = "dHR0dGlldmFodG5vZGllc3VhY2VibGxlaHNhdG5hd2k="
ss = base64.b64decode(bas)
print(ss[::-1])