bugku_easy-200

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 base64bas = "dHR0dGlldmFodG5vZGllc3VhY2VibGxlaHNhdG5hd2k="
ss = base64.b64decode(bas)
print(ss[::-1])


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部