Android_CTF: kgb_messenger
环境: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相关推荐
- Frida Android hook
From:https://eternalsakura13.com/2020/07/04/frida/ 目录 1.r0ysue 大佬 2.Frida 环境 2.1 pyenv 2.2 frida 安装 ...
- 这恐怕是学习Frida最详细的笔记了
转载自Sakura的博客:https://eternalsakura13.com/2020/07/04/frida title: Frida Android hook categories: Andr ...
最新文章
- AlexNet- ImageNet Classification with Deep Convolutional Neural Networks
- Vista光线效果photoshop教程
- 7.分布式数据库HBase第3部分
- 注水法比特功率分配介绍及MATLAB实现
- oracle join详解,inner join和left join之间的区别详解
- 网络布线工程师科普铜缆光纤损耗那点事!
- 【遥感物候】Hants NDVI时间序列谐波分析法数据重构,植被生长季曲线效果可佳(附Hants软件下载)
- 【转】VS工具:实时可视化树
- 颠覆大数据分析之结论
- 1.4.PHP7.1 狐教程-环境(Mac下 PHP开发环境 配置及安装 php7.1.x nginx mysql)
- 软工课设2021.10.26会议记录
- 【Proteus】单片机H桥驱动24V直流有刷电机
- springboot的配置文件
- 在 pandas 中画树状图,使用 squarify 画树状图
- C/C++游戏项目教程:《雷霆战机》
- QT 获取键盘组合键
- Notepad++ 替换换行符
- LabVIEW——波形图总结
- 为什么上传速度比下载速度慢
- 使用API 在zabbix监控系统中查看,创建及删除监控主机
热门文章
- 批量修改MP3文件信息
- 三星a5000刷Android原生,三星 A5000中文Recovery刷机教程
- mysql-bin文件删除与产生的原因
- python画动态小黄鸭_抖音小黄鸭跳舞表情包gif-小黄鸭跳舞表情包动态图片下载无水印完整版-西西软件下载...
- Django之全局配置-ALLOWED_HOSTS、LOGGING及多个子应用管理
- 计算机控制键功能,电脑ctrl键的作用大全
- Python自动化体系学习思维导图、知识点整理
- torch.device用法总结
- VSCode完美卸载
- 学习AngularJS有这一篇就好了