吾爱破解论坛2024春节解题领红包之Android题
hjsz 发表于 山东 移动安全 1102浏览 · 2024-02-25 07:56

题目来源

Android 初级题一

出题老师:正己

题目简介:小明和李华是同学,最近小明发现李华技术进步很快,他太想进步了,于是他一直在观察李华,却发现他老是在玩圈小猫,直到一次偶然发现,小明惊呼:“WC,原。。。

分析apk

  • 首先根据论坛提示,下载相应题目的apk。
  • 将下载的apk拖入手机,使用MT管理器查看一些基本情况。主要是看看有没有加固。根据提示,apk并没有什么加固,而且也可以知道app包名签名等信息。

  • 安装apk,看看基本的操作逻辑是什么。简单玩了两把,大概的逻辑就是你要围堵小猫跑到边界,而小猫可以往四周没有被标记的圆圈活动而且优先向大致一个外围方向移动。目的应该是围堵小猫四周的圆圈,然后给出flag。

解题

方法一

  • 能不能直接将apk拖入Jadx,查看源码,看flag是否是静态存储在本地。因为发现手机上安装apk后并没有网络权限。
  • apk源码比较简单,有下图中的几部分。从MainActivity可以看出,主界面是HTML的。

  • 由于代码量不大,所以就简单分析有没有和flag相关的内容,找到下面这个函数。查看该函数的调用,发现就下面一段代码调用这个extractDataFromFile函数。

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { // from class: com.zj.wuaipojie2024_1.YSQDActivity.2
            @Override // android.media.MediaPlayer.OnCompletionListener
            public void onCompletion(MediaPlayer mediaPlayer) {
                YSQDActivity.this.tv.setText(YSQDActivity.extractDataFromFile(YSQDActivity.this.filePath));
            }
        });
        videoView.start();}
  • 上面这个代码是在视频播放完成时,调用extractDataFromFile()方法从指定文件中提取数据,并将提取到的数据显示在TextView中。而这个入参file是一段MP4视频,这里首先想到的是根据apk数据存储位置找到该MP4,然后查看文件信息。
  • 首先根据MT管理器给出的信息找到apk数据存储位置,然后找到该视频,简单播放一下,原来是原神启动!然后使用MT管理器的打开方式,选择编辑文本,看mp4原始数据。

  • 由extractDataFromFile()函数可以看出,找符合flag{}格式的字符串,那我们也通过MT的文本搜索找一下flag。果然就直接找到了flag。

  • 提交上面得出的flag,发现是正确的。

方法二

  • 根据之前的分析,YSQDActivity类只在下面的接口类中有调用,想着能不能不围堵猫就可以调用YSQDActivity类,从而播放视频获取flag。作为用作Android应用程序中的JavaScript接口,应该是和webview中的HTML有关。

  • 首先想到是上图函数中关于入参i的判断条件,这里是==-1,那就改成!=-1,看能不能调用YSQDActivity类。怎么找到这个smali代码,之前的文章有,这里就不再赘述了,反正MT管理器和NP管理器很好用!

  • 修改smali代码后就是保存编译签名安装测试这一流程。发现这样改不起作用,因为改成if-eq p1,v0,相当于是p1等于-1的时候会return,那删除if判断呢。经过测试也不可以,这里先暂时放下这一思路。

方法三

  • 由于webview加载的HTML也是存储在本地的,能不能修改HTML文件使其初始化黑点的时候足够多这就可以围堵住小猫。
  • this.webView.loadUrl("file:///android_asset/index.html");根据这一代码找出index.html,先不管js中如果初始化黑点的,先修改下面的initialWallCount,先修改为80试试。

  • 从下图效果图可以看出这一思路可行,这样就比较顺利的围堵住小猫。 围堵成功后,开始播放视频并顺利出现flag。

Android初级题二

出题老师:侃遍天下无二人

寄语:如果不会解题还想拿分那赶紧来现学现卖吧,只要认真看完并动手练习,肯定能解出来本题,吾爱破解安卓逆向入门教程《安卓逆向这档事》。

分析

  • 首先根据论坛提示,下载相应题目的apk。
  • 将下载的apk拖入手机,使用MT管理器查看一些基本情况。主要是看看有没有加固。根据提示,apk并没有什么加固,而且也可以知道app包名签名等信息。

  • 安装apk,查看基本逻辑。大概就是多长时间出一个什么宝石,然后10个可以抽10抽,90抽保底出个金。而且这个等待时间越来越长。

解题

  • 拖入Jadx查看代码逻辑。
  • 就在我查看源码的时候,发现又凑够了10抽,就抽了一下,发现抽中了,试一下下面给出的flag。而且给出的flag是正确的。根据提示是我太诚实了吗,就单纯的等抽奖然后抽?

  • 查看具体的代码,从下面可以看出,果然是不对apk做什么修改的才会进入到honest选项,然后会比较顺利的出金。

  • 下面赋值到textview的代码如下图所示,可以看出字符串也是静态存储在代码中的,public static byte[] o = {86, -18, 98, 103, 75, -73, 51, -104, 104, 94, 73, 81, 125, 118, 112, 100, -29, 63, -33, -110, 108, 115, 51, 59, 55, 52, 77};数组o就是存储flag字符串的ASCII码。转换成str就是flag。

  • 第二个初级题要比第一个简单。

方法二

  • 直接修改初试的什么宝石数量,直接修改WishActivity的o数组中10.

  • 这里初试是0xa,也就是十六进制中的10,在后面多加几个a。

  • 从下图可以看出有很多纠缠之缘,那就抽吧。发现这样抽中是不对的flag。返回代码中查看。

  • 真正的flag是需要signature中的一部分数据的,当你修改apk之后这部分数据就是错误的了,所以不对。目前想到可以做的就是分析代码,然后等一小会再抽十次就可以获取flag。

0 条评论
某人
表情
可输入 255