简单的安卓逆向题目,记录下安卓逆向思路与adb的备份恢复命令
01
确认文件类型
下载题目得到两个文件,分别为unknown和unknown2,使用010编辑器打开
unknown
打开之后首行惊现ANDROID BACKUP,没错这正是使用adb backup命令的备份文件,我们将其重命名为unknown.ab以备后用。
unknown2
似曾相识PK头,还看到安卓布局文件目录res/layout/xxx字符串,结合上一个安卓备份文件100%肯定unknown2是apk安装包,重命名为unknown2.apk 拖入JEB
02
静态分析
JEB打开后,发现有三个类,那么哪个类是我们需要的呢?
可以选择逐个打开分析,也可以查看AndroidManifest.xml来从入口类可以分析
LoginActivity是入口类,那就从这开始切入吧
来到LoginActivity的onCreate方法,发现程序使用了SharedPreferences存储类,来读取私有目录下shared_prefs/userInfo.xml文件的USER_NAME键和PASSWORD(在截图外)键的值。其中USER_NAME的值需要与用户名输入框内容相同,PASSWORD的值需要与密码输入框内容进行encode处理后的值相等。
如果登录成功才会用到LogoActivity和WelcomeAvtivity类,那么直接不需要考虑他们了(实际上这两个类是为了显示“flag is password”来提示我们密码框内容就是flag)
接下来先研究下encode都干了什么
encode最终调用Encryption方法,乍一看Encryption还挺唬人。。。
其实就是利用字符串key=“ijklmstuvwxyz0123abcdenopqrfgh456789”做了简单的移序映射加密(自己胡乱起的)。会按照key的排列规则对待加密字符串逐字符进行后移三位的处理,比如字符b加密后就是在key中b后面的第三个字符e
解题思路:
找到userInfo.xml的内容得到相关数据
逆向Encryption方法,进行解密运算
03
恢复数据
首先想要完成第一步,必须要有userInfo.xml这个文件(其实该软件并没有对userInfo.xml赋值的代码),我们先安装软件运行一下看看能不能直接得到这个文件
果不其然连shared目录都没有,这时候unknown.ab就派上用场了
使用adb restore命令恢复数据,手机会提示点击“恢复我的数据”即可
userInfo.xml就回来了,成功获得第一步所需数据
04
解密代码
接下来的工作就是将PASSWORD值字符串"dudqlvqrero1"进行解密
由第二部分的分析可以得知加密就是字符映射关系的问题,解密只需要逆映射关系即可
运行以下Python脚本得到的结果就是最终flag了
▼点击下载题目
领取专属 10元无门槛券
私享最新 技术干货