环境: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 3invoke-super {p0, p1}, Landroid/support/v7/app/c;->onCreate(Landroid/os/Bundle;)Vconst v0, 0x7f09001cinvoke-virtual {p0, v0}, Lcom/tlamb96/kgbmessenger/MainActivity;->setContentView(I)Vconst-string v0, "user.home"invoke-static {v0}, Ljava/lang/System;->getProperty(Ljava/lang/String;)Ljava/lang/String;move-result-object v0const-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_3invoke-static {p0}, La/a/a/a/a;->a(Landroid/content/Context;)Vnew-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;)Vinvoke-virtual {p0, v0}, Lcom/tlamb96/kgbmessenger/MainActivity;->startActivity(Landroid/content/Intent;)Vgoto :goto_0:goto_0return-void
.end method

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

3. Social Engineering

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

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

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

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

Android_CTF: kgb_messenger相关推荐

  1. Frida Android hook

    From:https://eternalsakura13.com/2020/07/04/frida/ 目录 1.r0ysue 大佬 2.Frida 环境 2.1 pyenv 2.2 frida 安装 ...

  2. 这恐怕是学习Frida最详细的笔记了

    转载自Sakura的博客:https://eternalsakura13.com/2020/07/04/frida title: Frida Android hook categories: Andr ...

最新文章

  1. AlexNet- ImageNet Classification with Deep Convolutional Neural Networks
  2. Vista光线效果photoshop教程
  3. 7.分布式数据库HBase第3部分
  4. 注水法比特功率分配介绍及MATLAB实现
  5. oracle join详解,inner join和left join之间的区别详解
  6. 网络布线工程师科普铜缆光纤损耗那点事!
  7. 【遥感物候】Hants NDVI时间序列谐波分析法数据重构,植被生长季曲线效果可佳(附Hants软件下载)
  8. 【转】VS工具:实时可视化树
  9. 颠覆大数据分析之结论
  10. 1.4.PHP7.1 狐教程-环境(Mac下 PHP开发环境 配置及安装 php7.1.x nginx mysql)
  11. 软工课设2021.10.26会议记录
  12. 【Proteus】单片机H桥驱动24V直流有刷电机
  13. springboot的配置文件
  14. 在 pandas 中画树状图,使用 squarify 画树状图
  15. C/C++游戏项目教程:《雷霆战机》
  16. QT 获取键盘组合键
  17. Notepad++ 替换换行符
  18. LabVIEW——波形图总结
  19. 为什么上传速度比下载速度慢
  20. 使用API 在zabbix监控系统中查看,创建及删除监控主机

热门文章

  1. 批量修改MP3文件信息
  2. 三星a5000刷Android原生,三星 A5000中文Recovery刷机教程
  3. mysql-bin文件删除与产生的原因
  4. python画动态小黄鸭_抖音小黄鸭跳舞表情包gif-小黄鸭跳舞表情包动态图片下载无水印完整版-西西软件下载...
  5. Django之全局配置-ALLOWED_HOSTS、LOGGING及多个子应用管理
  6. 计算机控制键功能,电脑ctrl键的作用大全
  7. Python自动化体系学习思维导图、知识点整理
  8. torch.device用法总结
  9. VSCode完美卸载
  10. 学习AngularJS有这一篇就好了