XCTF-boomshakalaka-3

这题讲道理出的挺脑洞的,apk直接拖入jeb打开,找到主活动

 这里有两个方法,一个是onCreate()方法,还有一个是onCreateView()方法

 onCreate()方法调用了a这个对象的d方法,还调用了两次,onCreateView()方法调用是在onCreate()方法调用后才会调用

里面也调用了a对象的d方法,现在跟进这个方法看看

 它里面调用了一个getSharedPreferences()方法,这个方法是会返回一个SharedPreference对象的,这个对象在安卓开发中

用途就是保存一些配置信息的,不过是以键值对的形式保存在xml文件中,调用edi()方法后,返回一个edit对象,调用putString()方法

将键值对保存到xml文件中,这里d方法,是先将data这个key所对应的值弄出来,然后和我们传入的字符串进行一个拼接,之后再保存

到xml文件中,java层仔细看了半天发现,根本没有涉及到分数的函数,这里就是用ida,打开它的so文件

搜索一下分数的字符串。

 发现好像是每到一定分数,都会往xml文件中添加对应的字符串,这里我先玩了一下,观察了一下xml文件的内容,以此来验证一下我的猜想

 那些通过Sharepreference对象保存的xml文件是在data/data/对应app包名/shared_prefs这个文件下的

发现每次我刷新最高分数,都会在分数0的基础上所对应的字符串上,添加我ida里面看到的字符串,并每次结束都是以dz99结尾

那么我大概就可以直接拼凑出字符串了,然后为什么联想到base64呢,因为onCreate()方法里面是放进来的一个是base64的编码后的东西

所以可以联想到,这里真的脑洞

原文地址:https://www.cnblogs.com/YenKoc/p/13718257.html