日常破解---XCTF_APP1获取flag记录
日常破解---XCTF_APP1获取flag记录
一、题目来源
来源:XCTF社区安卓题目app1
二、解题记录
1、首先安装到模拟器中运行一下,如下图所示,点击一下按钮,弹出提示年轻人不要耍小聪明哦
2、将APK文件拖进AndroidKiller中反编译,直接搜索关键字年轻人
以确定按钮触发的事件位置,搜索结果如下图所示:
3、偷懒不看smali代码了,直接将apk拖进jeb中查看java代码(别问我为啥不要AndroidKiller,jeb转换出的java确实准确一些),java代码如下,分析代码可发现:程序首先获取输入框的值放进变量v1中,然后获取app的版本名称放进变量v3中,获取app的版本号放进变量v4中,接着在一个while循环中,将变量v3中每一个字符与变量v4进行异或操作,然后与变量v1(就是我们输入的flag)每一个字符相比较,若全部相等,则跳出循环,在循环外面又判断了一次我们输入的flag长度与变量v3长度是否相等,若不等,则弹出年轻人不要耍小聪明哦
,若相等,则弹出恭喜开启闯关之门!
。分析到这里,flag可以很明显看出来就是app的版本名称每一个字符与版本号异或之后组成的字符串就是flag!!!
4、获取版本号这些可以直接在smali中log就行了,但感觉太烦了,就直接使用Android studio动态调试smali直接查看寄存器的值获取,怎么动态调试就不说了,下图是动态调试获取的版本名与版本号
5、获取版本名称信息后,写个python脚本跑出flag如下,提交显示恭喜开启闯关之门!
三、总结
一道很基础的题,不知道总结啥了,就这样吧!!!!
附上python脚本:
str1 = 'X<cP[?PHNB<P?aj'
for i in str1:
m = ord(i) ^ 15
print(chr(m),end='')
PS:再次吐槽一波markdown粘贴python代码得把每行代码都tab才好看,需要跑脚本的把第一行第二行的缩进删除就行!!!!!