Android_CTF: kgb_messenger

2023-11-18

环境:kgb_messenger.apk,测试机:OnePlus Andorid 9 

1. Alerts

安装该apk后,使用发现如下的界面

 用 jadx 反编译该 apk,搜索字符串 "Russian", 在MainActivity中发现了以上字符串,且代码逻辑如下

 其中 System.getProperty() 函数用于获取当前系统属性,包括 java版本、操作系统版本等信息,其中可以获得的属性值,参见:JAVA 命令参数详解:-D_枝叶飞扬_新浪博客

其中 System.getenv() 函数用于获取指定的环境变量的值。

审计代码,发现,会判断 user.home 对应的系统属性的值是否为 Russia, 然后判断 USER 对应的环境变量是否为 R.string.User 对应的字符串的值,如果两个判断都通过,则会启动一个 LoginActivity。

首先想去看一下 R.string.User 对应的字符串是啥,R.string.User 表示在res文件夹中,定义了一个string类型的名为 User 的字符串。于是用apktool 如下命令对该apk解压

java -jar apktool.jar d xxx.apk

并在res文件夹下使用如下命令搜索 User 字符串

 结合搜索结果来看,果然在strings.xml文件中,定义了一个名为 User 的字符串,其对应的值明显是一个base64编码的字符串,不管三七二十一,先拿去base64解码再说,解码后得到FLAG:FLAG{57ERL1NG_4RCH3R}

2. Login

在1中的MainActivity中,想要进入

startActivity(new Intent(this, LoginActivity.class));

就必须得进入else分支,于是想到直接去修改Smali文件,删除前两个if-else if的分支check,直接进入第三个else分支,启动LoginActivity。

查看对应MainActivity.java的smali代码(该文件存在于之前使用apktool解压后的文件夹中,存在于对应的smali文件夹中),对smali代码进行修改,然后重打包成apk。将onCreate()函数中的两个if-else if分支中的内容注释掉,尤其注意要把 :goto_0 return-void 移到函数末尾,否则会直接执行 return-void

.method protected onCreate(Landroid/os/Bundle;)V
    .locals 3

    invoke-super {p0, p1}, Landroid/support/v7/app/c;->onCreate(Landroid/os/Bundle;)V

    const v0, 0x7f09001c

    invoke-virtual {p0, v0}, Lcom/tlamb96/kgbmessenger/MainActivity;->setContentView(I)V

    const-string v0, "user.home"

    invoke-static {v0}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    const-string v1, "USER"

    invoke-static {v1}, Ljava/lang/System;->getenv(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v1

    # if-eqz v0, :cond_0

    # invoke-virtual {v0}, Ljava/lang/String;->isEmpty()Z

    # move-result v2

    # if-nez v2, :cond_0

    # const-string v2, "Russia"

    # invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    # move-result v0

    # if-nez v0, :cond_1

    # :cond_0
    # const-string v0, "Integrity Error"

    # const-string v1, "This app can only run on Russian devices."

    # invoke-direct {p0, v0, v1}, Lcom/tlamb96/kgbmessenger/MainActivity;->a(Ljava/lang/String;Ljava/lang/String;)V

    # :goto_0
    # return-void

    # :cond_1
    # if-eqz v1, :cond_2

    # invoke-virtual {v1}, Ljava/lang/String;->isEmpty()Z

    # move-result v0

    # if-nez v0, :cond_2

    # invoke-virtual {p0}, Lcom/tlamb96/kgbmessenger/MainActivity;->getResources()Landroid/content/res/Resources;

    # move-result-object v0

    # const/high16 v2, 0x7f0d0000

    # invoke-virtual {v0, v2}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;

    # move-result-object v0

    # invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    # move-result v0

    # if-nez v0, :cond_3

    # :cond_2
    # const-string v0, "Integrity Error"

    # const-string v1, "Must be on the user whitelist."

    # invoke-direct {p0, v0, v1}, Lcom/tlamb96/kgbmessenger/MainActivity;->a(Ljava/lang/String;Ljava/lang/String;)V

    # goto :goto_0

    :cond_3
    invoke-static {p0}, La/a/a/a/a;->a(Landroid/content/Context;)V

    new-instance v0, Landroid/content/Intent;

    const-class v1, Lcom/tlamb96/kgbmessenger/LoginActivity;

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Lcom/tlamb96/kgbmessenger/MainActivity;->startActivity(Landroid/content/Intent;)V

    goto :goto_0
    
    :goto_0
    return-void
.end method

修改完smali文件后,对apk进行重打包和签名,完成后在手机上安装签名后的apk。打开对应APP后,直接进入了LoginActivity对应的登录界面。

3. Social Engineering

这一步是需要输入正确的用户名和密码,完成登录。通过审计代码发现用户名是定义在res文件夹中的一个字符串 "codenameduchess",密码是一个md5()后的哈希值,直接丢到网站上无法破解成功,官方的writeup中写的是

用户名codenameduchess其实是一个动漫里Archer中特工的代号,代号为duchess

然后google对应的内容就可以拿到duchess的账号密码:guest。输入对应的账号和密码就可以成功登录,拿到flag。

(这脑洞就离谱??谁猜得到啊?!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android_CTF: kgb_messenger 的相关文章

  • Android - 创建后台服务来接收PubNub消息

    我正在使用 PubNub API 来获取实时消息 我已经实现了代码来订阅我的频道并接收持续的消息 我只想在后台接收这些消息 即使我的应用程序未打开 我已经了解了 android 中的服务和广播接收器 但我不明白如何在 PubNub 中使用它
  • 集成ZXing二维码扫描器,无需安装BarCode Scanner

    我正在尝试将 ZXing QR 码集成到我的 Android 应用程序中 而不安装条形码扫描仪应用程序 我已按照以下步骤操作 1 首先我下载了 ZXing zip文件并解压它 2 将ZXing项目作为android现有项目打开 然后转到an
  • 使用 SimpleDateFormat 分别获取日、月和年

    我有一个SimleDateFormat像这样 SimpleDateFormat format new SimpleDateFormat MMM dd yyyy hh mm String date format format Date par
  • Tensorflow lite 目标检测示例中相机的屏幕尺寸 [水平屏幕]

    在tensorflow lite示例对象检测中 相机不会拍摄整个屏幕 而只会拍摄一部分 我试图在 CameraActivity CameraConnectionFragment 和 Size 类中找到一些常量 但没有结果 所以我只是想要一种
  • 为什么 PackageInfo.signatures 字段是一个数组,什么时候这里会出现除一个值之外的其他值?

    我正在相互检查包签名以确定它们是否不兼容 针对不同的密钥库进行编译 我注意到PackageInfo signatures几乎总是包含单个条目的集合 这对我来说很有意义 我使用调试或生产密钥库构建应用程序 这决定了包的签名 这是我此时对 ap
  • android 录音时可以静音吗

    我想构建一个应用程序 我想在通话中调制声音 我编写了一段代码来记录声音并以不同的音调播放它 现在我想要在通话时使用此功能 我想将通话静音 记录声音然后以不同的音调播放它 如何将通话静音但仍录制音频 此答案可在通话期间使麦克风静音 Boole
  • 如何在 Android 上实现 Material Design 展开/折叠列表?

    我正在寻找实现这种风格的材料列表 我如何在 Android 上执行此操作 我应该看哪些课程 是否有任何现有的库可以使实现变得如此简单 是的 您可以使用库轻松实现它分段回收器视图适配器 https github com luizgrp Sec
  • 输入流返回 NullPointerException (Java)

    以下是出现 NullPointerException 错误的代码 InputStream is getAssets open twentyone txt InputStreamReader iz new InputStreamReader
  • 将 Android Studio 2.0 模拟器与 Google 服务结合使用

    根据 Android 开发者博客中的一篇文章 关于Android Studio 2 0 发布 http android developers blogspot ca 2016 04 android studio 2 0 html Andro
  • Android maven插件生成多个dex文件

    如何使用 android maven 插件生成多个 dex 文件而不是一个以避免 android 64k 方法问题 可以使用这个插件来做到这一点 还是我必须使用 gradle 来做到这一点 解决方案 通过这个拉取请求https github
  • 如何更改 Android 中状态栏通知图标的颜色/色调(棉花糖及 23+ 以上)?

    正如标题所示 如何将状态栏图标的颜色更改为深色而不是默认的白色 FROM TO 要使状态栏图标具有深色而不是默认的白色 请在您的styles xml 或者更准确地说 在values v23 styles xml file
  • android:clickable="true" 意味着它不可点击?

    我有一个 ListView 其中包含一些自定义部分 每个部分都有自己的标题视图 我希望列表中的元素可单击 但显然不希望节标题可单击 所以在我添加的节标题的 xml 中android clickable false 调试时我注意到节标题仍然响
  • 在哪里存储字符串值?在 strings.xml 中还是在常量类中?

    在android中 我们可以将字符串值存储在strings xml文件中或某些常量类中作为静态最终变量 在某些情况下是否有理由选择一个而不是另一个 简而言之 代码中使用的值 始终使用常量类 优点 代码保持集成 并且您的包可以在其他项目 上下
  • Jetpack Compose 中的自定义 Toast

    我想要在 Jetpack Compose 中自定义 Toast 但没有找到任何与此相关的有用文档 如有任何帮助 我们将不胜感激 自定义 Toast 已被弃用 取而代之的是 SnackBar 因此 他们大多不会获得 Jetpack Compo
  • java.lang.NoSuchMethodError:没有虚拟方法 zzait()Ljava/util/ArrayList;在 Lcom/ 类中错误?

    您好 我正在 Udacity 课程中学习使用 Firebase 当我运行我的应用程序时 我收到此错误并且对此一无所知 11 23 16 48 34 995 3947 3947 com google firebase udacity Frie
  • org.json.JSONArray 类型的值无法转换为 JSONObject

    陷入了这个错误 3169 3190 com meisolsson app E JSON 解析器 解析数据时出错 org json JSONException Value type 0 can see custom stories true
  • Android 堆栈溢出错误

    以下是我的堆栈跟踪 我浏览了它 但它只显示了一堆视图 坦率地说 我不太确定 stackoverflow 错误到底是什么 我读到了一些其他问题 有些人通过迭代解决了他们的问题 同样 不知道这些是什么 对于应用程序的基本布局 这是来自崩溃时 T
  • Android 电子邮件意图和消息正文

    我正在使用意图从我的应用程序启动电子邮件应用程序 我使用意图设置主题 短信和电子邮件地址 除了电子邮件部分中的光标位置之外 一切正常 我的电子邮件信息类似于 感谢您选择 不要写在这条线下面 我在电子邮件正文中看到该消息 但我的光标在 请勿写
  • 使用 ADB 或 java 代码更改默认的 Android 键盘

    我正在构建一个使用特定键盘的自定义应用程序 因此当用户运行该应用程序时 默认键盘应更改为我的特定键盘 名称为黑客键盘 我如何使用java代码或从java代码调用adb命令来做到这一点 我的设备已获得 root 权限 这又是特定的应用程序 而
  • 指针问题! (安卓)

    我在 onTouch 方法中遇到多个指针的问题 所有指针都与一个布尔值相关联 如果向下则为 true 如果向上则为 false 非常重要的是 如果一个指针从 true 变为 false 它不会影响其他布尔值 我遇到的问题是 例如 当指针 1

随机推荐

  • 电机四象限运行

    电机四象限模式 前言 电机单象限模式 电机四象限模式 电机控制中的两象限和四象限程序 两象限程序 四象限程序 前言 在主机厂工作中常常提到四象限和两象限程序 对于电驱运行方式的四象限运行不是很熟悉 学习一下 做下笔记 以防止遗忘 个人理解
  • 成功解决 XXX--1.0-SNAPSHOT.jar中没有主清单属性

    问题描述 在运行使用maven打包的项目之后 运行项目发现主类没有找到 提示XXX 1 0 SNAPSHOT jar中没有主清单属性 问题原因 maven在打包时没有配置主类 解决方案 如果您使用的是Springboot框架 那么只需要在p
  • elasticsearch7.8.0 win指定jdk版本

    修改 elasticsearch env bat 文件 set JAVA HOME D elasticsearch 7 8 0 jdk if JAVA HOME set JAVA ES HOME jdk bin java exe set J
  • Python学习6.1类与对象

    一 类的定义 1 类的组成 类属性 实例方法 静态方法 类方法 eg 输入 class Student native place 云南 类属性 def init self name age self name name self age a
  • JUC之ReentrantLock

    一 背景 随着java内卷越来越厉害 校招经常会问一些源码知识 例如Synchronized的实现原理 ReentrantLock的实现原理 AQS的实现原理 ConCurrentHashMap的实现原理等等 如何能够灵活的应对呢 解决方案
  • STDC语义分割网络:BiSeNet的轻量化加强版(CVPR2021语义分割)

    今天和大家分享CVPR2021中语义分割领域的一篇论文 论文标题及作者如下图所示 论文下载地址 https arxiv org abs 2104 13188 代码即将开源 https github com MichaelFan01 STDC
  • 访问权限修饰符

    访问控制权限修饰符 Java中访问修饰符有四种 分别是public private protected和默认 1 public 表示公有的 对于一个public成员 可以被任何类访问 在不同的包中 所有类都可以访问 2 private 表示
  • 【从零开始的Java开发】2-8-1 HTML入门:标签、表格、表单

    文章目录 HTML简介 常用标签 字体标签 段落标签p 注释标签 标题标签h 图片标签img 超级链接标签a 锚点标签 列表 阶段小结 表格 相关标签 合并行列 分组设置表格格式的标签 相关属性 其他标签 表单 表单主要控件和实例 表单其他
  • EasyDemo*SQLite数据库版本升级

    一 简介 我们在开发应用的时候 存储数据可能会用到数据库 第一个版本时所设计的数据库结构 如果在以后的app版本中需要增加业务逻辑 数据库的表可能要做相应的修改 那么原来的数据库结构就不能用了 这时就需要对数据库进行升级 二 升级方案 1
  • linux配置放火墙开放端口

    vi etc sysconfig iptables A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT 允许80端口通过防火墙 A INPUT m state state NEW
  • 神经网络实现连续型变量的回归预测(python)

    最近写论文时用到一个方法 是基于神经网络的最优组合预测 主要思想如下 在建立由回归模型 灰色预测模型 BP神经网络预测模型组成的组合预测模型库的基础上 利用以上三种单一预测模型的组合构成BP神经网络组合预测模型 我是参考的参考这篇文章 路玉
  • Linux3.10内核之后proc文件系统的使用

    最近在通过无线扫描周边的手机mac的事情 拿到AP周边的mac后需要送到应用层 之前接触的都是RTOS的系统 数据交互比较简单 Linux下应用层无法直接和驱动交换数据 需要通过kernel提供的一些通道 因为只是向应用层送数据 和应用层的
  • Windows7旗舰版和10 创建原始套接字失败,代码10013

    笔记本重装系统后 以前能运行的程序中的Ping程序不能运行了 查看代码 创建套接字失败 RawSock socket AF INET SOCK RAW IPPROTO ICMP RawSock INVALID SOCKET 用DWORD d
  • 微信小程序地图(map)组件点击(tap)获取经纬度

    微信小程序中使用地图 map 组件 通过点击 tap 获取经纬度 按照官方的回应 暂时是没法做到的 从地图组件API多有残缺判断 怀疑是个实习生干的 做个变通 适用性有限 请大家参考 基本思路就是在地图上铺满一层marker 从而通过点击m
  • 智慧合约:智能合约安全问题的AI解决方案

    一支穿云箭 千军万马来相见 在经历三个月 漫长熊市 后 从4月中旬开始 EOS的一个拉升 形成了数字货币市场大牛市的壮观景象 可是在美链BeautyChain BEC 的智能合约漏洞被黑客利用 随意刷币 SmartMesh SMT 智能合约
  • System.out.println()影响系统运行效率!!!

    在Java开发中 System out println 是一种常用的输出方式 可以将字符串输出到控制台 然而 这种输出方式在一定程度上会影响系统的运行效率 首先 System out println 的输出操作需要占用CPU和内存资源 因为
  • 配置Maven仓库私服

    在项目的pom xml文件中配置 将下面代码复制粘贴到文件的最下方即可
  • 霍尔传感器测电机的转速

    霍尔传感器可以用于测量电机的转速 测量原理是通过检测电机旋转时产生的磁场变化来计算转速 具体的测量方法如下 1 在电机旋转的轴上安装一个磁铁 磁铁的北极和南极在轴上相隔一定距离 2 在电机旋转轴的一侧安装一个霍尔传感器 传感器的感应面与磁铁
  • java的intern方法

    intern 方法返回值 一个字符串 内容与此字符串相同 但一定取自具有唯一字符串的池 new的字符串和变量不会进入常量池 String str1 a String str2 b String str3 ab 放在常量池 String st
  • Android_CTF: kgb_messenger

    环境 kgb messenger apk 测试机 OnePlus Andorid 9 1 Alerts 安装该apk后 使用发现如下的界面 用 jadx 反编译该 apk 搜索字符串 Russian 在MainActivity中发现了以上字