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如下,提交显示恭喜开启闯关之门!
图5
在这里插入图片描述


三、总结

    一道很基础的题,不知道总结啥了,就这样吧!!!!

    附上python脚本:

	str1 = 'X<cP[?PHNB<P?aj'
	for i in str1:
		m = ord(i) ^ 15
		print(chr(m),end='')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值