CTF005

xiaoeryu Lv5

PS:这个题目比较简单,尝试采用多种不同的方式去获取flag

第一种方式:静态分析

用jadx打开进入口点看代码逻辑

看入口点的代码非常简单明了进入case vip分支就算是通过了验证,那我们跟进去看一下它里面有没有校验的函数

进来之后发现它只是用_setContenView_方法加载了一个新的布局,那去看一眼这个布局的xml文件
资源文件在res->layout文件夹里面:进来之后发现flag是一个明文存储的字符串

这个比较简单,再使用改跳转重打包的方式获取flag试一下

第二种方式:重打包

使用_AndroidKiller_重打包改一下apk的执行流程:先来分析一下代码看修改哪里才能让我们获取到flag

  1. 首先我们点击首页的“点我获取FLAG”按钮之后会进入第一个case,之后会校验a的值大于30才能跳转往else分支充钱,这里可以把跳转改为(a > 30)
  2. 之后我们再看一下”充钱”之后创建的新对象b做了什么

创建共享对象并将其中points的值减去了30,来手动查看一下共享对象文件中的内容

当我们点击”充钱“按钮之后,b类会设置‘TextView’的文本,设置‘points’的值,弹出一个提示吐司

  1. 重新打开应用之后’TextView’的文本就改变了
  • 重新设置布局、设置按钮监听事件,根据积分设置相关试图的状态
  1. 这样看来我们只需要改变前面的if判断条件**(a > 30)**就可以了

​ 用AndroidKiller打开apk,搜索里面的字符串定位if分支

定位到之后修改里面的if判断条件

修改完成之后重新编译打包即可

第三种方式:frida-hook

对这道题目写hook脚本的话,可以去hook它if判断时候用到的view.getId()方法

setImmediate(function(){
  Java.perform(function(){
    var View = Java.use("android.view.View");
    View.getId.implementation = function(){
      var ret = this.getId();
      ret = 2131296337;   // 修改getId()的返回值为vip的值
      return ret;
    }        
  })
})

注入脚本

over~

  • 标题: CTF005
  • 作者: xiaoeryu
  • 创建于 : 2023-07-08 20:45:39
  • 更新于 : 2023-07-09 01:29:46
  • 链接: https://github.com/xiaoeryu/2023/07/08/CTF005/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论