CTF005
PS:这个题目比较简单,尝试采用多种不同的方式去获取flag
第一种方式:静态分析
用jadx打开进入口点看代码逻辑
看入口点的代码非常简单明了进入case vip分支就算是通过了验证,那我们跟进去看一下它里面有没有校验的函数
进来之后发现它只是用_setContenView_方法加载了一个新的布局,那去看一眼这个布局的xml文件
资源文件在res->layout文件夹里面:进来之后发现flag是一个明文存储的字符串
这个比较简单,再使用改跳转重打包的方式获取flag试一下
第二种方式:重打包
使用_AndroidKiller_重打包改一下apk的执行流程:先来分析一下代码看修改哪里才能让我们获取到flag
- 首先我们点击首页的“点我获取FLAG”按钮之后会进入第一个case,之后会校验a的值大于30才能跳转往else分支充钱,这里可以把跳转改为(a > 30)
- 之后我们再看一下”充钱”之后创建的新对象b做了什么
创建共享对象并将其中points的值减去了30,来手动查看一下共享对象文件中的内容
当我们点击”充钱“按钮之后,b类会设置‘TextView’的文本,设置‘points’的值,弹出一个提示吐司
- 重新打开应用之后’TextView’的文本就改变了
- 重新设置布局、设置按钮监听事件,根据积分设置相关试图的状态
- 这样看来我们只需要改变前面的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 进行许可。
评论