目录
2.3.4在DisplaySettings实例上编写js脚本
2.4objection插件安装之Wallbreaker和frida-dexdump
1.pyenv安装和使用
1.1pyenv 简介
pyenv 是一个 Python 版本管理工具。它可以:
1. 安装多个 Python 版本
2. 切换全局 Python 版本
3. 为每个项目指定特定的 Python 版本
1.2pyenv 常用命令
pyenv 的主要功能是解决在同一台机器上管理多个 Python 版本的问题。pyenv 的工作原理是:
1. 将所有 Python 安装在一个目录下(默认为 ~/.pyenv/versions)
2. 通过改变环境变量的方式切换不同版本的 Pythonpyenv 的主要命令有:
- pyenv install: 安装Python版本,可以安装2.x、3.x等多个版本
- pyenv versions: 显示所有可用的Python版本
- pyenv global: 设置全局Python版本
- pyenv local: 为目录设置本地Python版本
- pyenv rehash: 重新编译 Python 版本列表
- pyenv uninstall: 删除已安装的 Python 版本
1.3pyenv安装和使用
pyenv gihhub安装地址:
pyenv安装环境
Home · pyenv/pyenv Wiki · GitHub
安装
GitHub - pyenv/pyenv-installer: This tool is used to install `pyenv` and friends.
添加path
https://github.com/pyenv/pyenv#set-up-your-shell-environment-for-pyenv
pyenv下载安装命令:
安装pyenv 环境
sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \libbz2-dev libreadline-dev libsqlite3-dev curl \libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
下载安装pyenv
proxychains4 git clone https://github.com/pyenv/pyenv.git ~/.pyenv
添加path
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
刷新控制台,使path生效
exec "$SHELL"
然后查看Python3的版本
pyenv install 3.
我这里安装
Python 3.10.11
proxychains4 pyenv install 3.10.11
安装好后,查看Python安装的所有版本
pyenv versions
切换到 Python 3.10.11
pyenv local 3.10.11
到此pyenv安装结束
2.Frida安装
2.1Fraida简介
Frida 是一个动态代码仿真框架。
它可以用于许多方面,最常用的有:
1. Android/iOS 应用分析
我们可以使用 Frida 在真机或模拟器上注入 JS 代码,对运行中的应用进行分析、跟踪与调试。
2. API 监视与模拟
我们可以使用 Frida 钩子某个 API 的调用,监视或修改其参数与返回值,来分析应用对该 API 的依赖与使用。
3. 方法跟踪
我们可以使用 Frida 跟踪应用正在运行的方法,监视其被调用情况与参数,追踪应用的执行流程。
4. 内存修改
我们可以使用 Frida 查找应用的内存中某个值的地址,然后运行时直接修改该内存的值,来影响应用的运行与逻辑。
5. 环境变量查看
我们可以使用 Frida 查看应用所能访问的环境变量列表,以及各个环境变量的值。这有助于我们理解应用的运行环境。
Frida 的工作原理是:
1. 通过自定义的 JS API,用户编写用于分析与交互的 JS 脚本。
2. 在真机/模拟器与应用进程之间注入一个 Frida 代理。
3. 该代理会加载用户提供的 JS 脚本,用户可以通过 JS API 与真机应用进程进行交互,实现代码仿真与动态分析的目的。
4. 用户通过命令行与该代理进行通信,发送自己的 JS 脚本与指令,并获取回传的应用信息。Frida 支持 Android、iOS、macOS、Windows、Linux 等多个平台,是一个功能极其强大的动态代码分析框架
2.1Fraida安装
Frida历史版本:Releases · frida/frida · GitHub
安装最新版本命令:
proxychains4 pip install -U frida frida-tools
由于objection的最新版本是1.11.0,最近的更新时间是2021.4.6,所以也要找个最近发布的Frida
objection==1.11.0
frida==14.2.14
frida-tools==9.2.2
安装Frida命令
proxychains4 pip install "frida==14.2.14" "frida-tools==9.2.2"
查看模拟器的设备型号,我这里是x86_64
adb shell getprop ro.product.cpu.abi
然后在GitHub找到并下载ffrida-server-14.2.14-android-x86_64.xz,解压后并重命名为fd,然后用命令推送到模拟器
连接模拟器,把杀毒软件关一下,免得端口被占用了
adb connect 192.168.2.6:5555
推送到模拟器
adb push '/root/桌面/fd' /data/local/tmp/
然后启动Frida,看看是不是正常
adb shell
su
cd /data/local/tmp/
chmod 777 fd
./fda -l 0.0.0.0:8888
0.0.0.0 表示任意网络, 回车后如下图
没报错就说明可以了
可用端口转发
adb forward tcp:27042 tcp:27042
然后在win系统里执行如下命令看看是否可以连接上模拟器,列出模拟器进程信息,win系统也要安装好frida和frida-tools才能执行,192.168.2.6是模拟器IP,不然报错
frida-ps -H 192.168.2.6:8888
说明win系统端已经连接成功,这样frida一端开启,多端运行
然后就可以执行注入操作
frida -H 192.168.2.6:8888 -f 你的应用包名 -l 你要注入的.js --no-pause
2.2objection安装
objection历史版本:Releases · sensepost/objection · GitHub
安装objection命令:
proxychains4 pip install objection==1.11.0
执行如下命令,探索模拟器设置com.android.settings应用程序:
该命令各个参数的含义为:
-N:表示不重定向 Frida 日志输出。保持在原终端输出。
-h 192.168.2.6:指定 objection 服务端的 IP 地址为 192.168.2.6。
-p 8888:指定 objection 服务端的端口为 8888。
-g com.android.settings:指定目标应用的包名为 com.android.settings。
explore:表示开始进行应用探索,运行各种检测模块。
所以,这条命令的整体含义为:不重定向 Frida 日志输出,连接到 IP 地址为 192.168.2.6 端口 8888 的 objection 服务端,检测 Android 应用 com.android.settings,运行探索性检测模块。
objection -N -h 192.168.2.6 -p 8888 -g com.android.settings explore
如下图,表示成功安装成功了
2.3objection常用命令
查看日志
在shell中输入下面命令
cat .objection/objection.log
查看包含Frida的日志信息
cat .objection/objection.log |grep -i frida
查看objection的帮助命令
objection --help
2.3.0进入objection REPL环境
objection -g com.android.settings explore
或frida启动加了 0.0.0.0:8888
objection -N -h 192.168.2.6 -p 8888 -g com.android.settings explore
2.3.1直接启动activity
注意有的真机系统rom是没有DisplaySettings这个类的
android intent launch_activity com.android.settings.DisplaySettings
2.3.2内存搜索DisplaySettings实例
在内存搜索DisplaySettings实例,返回 36485274
android heap search instances com.android.settings.DisplaySettings --fresh
2.3.3查看DisplaySettings实例的方法
android heap execute 36485274 getPreferenceScreenResId
2.3.4在DisplaySettings实例上编写js脚本
进入DisplaySettings实例
android heap evaluate 36485274
输入命令,然后按Esc键,再按回车,即可执行刚刚输入的js
console.log("evaluate result:"+clazz)
2.3.5获取某个类的所有方法
android: 表示操作对象为 Android 应用。
hooking: 表示进行 hook 操作。
list: 用于列举,这里是列举类与方法。
class_methods: 表示要列举的目标是类与方法。
com.android.settings.DisplaySettings: 表示关注的类是 com.android.settings.DisplaySettings。
所以,这条命令的整体含义是:在 Android Settings 应用中,列举与 com.android.settings.DisplaySettings 类相关的所有类与方法信息。
android hooking list class_methods com.android.settings.DisplaySettings
查看当前可用的activities
android hooking list activities
查看当前app 加载的so库文件
memory list modules
查看so库的导出函数
查看库的导出函数 , 加上j可以将数据保存到libart.json文件--json /root/libart.json
memory list exports libssl.so
将json文件保存到kali linux的目录/root/libart.json
memory list exports libssl.so --json /root/libart.json
提取整个或部分内存
memory dump all from_base
执行此命令后,objection会开始从当前进程的基地址读取内存内容,并将转储结果保存在文件`memory-all-from-base.dump`中。
搜索整个内存的偏移地址
在内存搜素过程中使用--string和--offsets-only两个选项的作用:
--string选项:用于指定要搜索的字符串。内存搜索工具会在内存中搜索此字符串的实例,并返回包含该字符串的内存区域信息。
--offsets-only选项:当我们只关心某字符串实例所在内存区域的偏移地址(offset)时可以使用此选项。该选项会使内存搜索工具只返回字符串实例的内存偏移地址,而不是完整的内存区域信息。
这两个选项一般会同时使用。比如要搜索"password"字符串的偏移地址,可以使用如下命令:
memory search --string "display" --offsets-only
列出内存内所有类与方法
android hooking list classes
搜索包含指定关键字的所有类
这条命令会使用 objection 在 Android 应用中搜索包含指定关键字的所有类。
该命令各个参数的含义为:
android: 表示操作对象为 Android 应用。
hooking: 表示进行 hook 操作,这里是搜索类。
search: 表示要进行搜索操作。
classes: 表示要搜索的目标是类。
关键字:表示要搜索的字符串,这里替换为您要搜索的实际字符串。
所以,这条命令的整体含义是:在当前 Android 应用中,搜索类名中包含 指定字符串 的所有类
adnroid hooking search classes 搜索指定关键字
android hooking search classes com.android.settings
内存中搜索包含字符串的所有方法
该命令各个参数的含义为:
android: 表示操作对象为 Android 应用。
hooking: 表示进行 hook 操作,这里是搜索方法。
search: 表示要进行搜索操作。
methods: 表示要搜索的目标是方法。
display: 表示要搜索的字符串为 display。
android hooking search methods display
自动生成hook脚本
android hooking generate simple 指定要生成hook脚本的类
使用 android hooking generate
命令指定类名 com.android.settings.DisplaySettings
objection会自动分析DisplaySettings类的所有方法,并生成对应的hook脚本, named显示设置hook.js。
android hooking generate simple com.android.settings.DisplaySettings
1. 使用 android hooking generate
命令指定类名 com.android.settings.DisplaySettings
。
2. objection会自动分析DisplaySettings类的所有方法,并生成对应的hook脚本, named显示设置hook.js。
3. 该hook脚本可以用来hook DisplaySettings类的所有方法,监视/修改参数或返回值等。
4. 可以用命令 objection run showing 方法设置hook.js
来执行该hook脚本。
5. 执行脚本后,DisplaySettings类的方法调用会被frida hook,可以达到监测/修改等目的。
所以,这条命令的主要作用是自动生成指定类的hook脚本,方便用户随后执行该脚本hook类的方法达到需要的目的。
hook指定要监视的类
android hooking watch class 指定要监视的类
指定要监视的类,这里是`android.bluetooth.BluetoothDevice`
android hooking watch class android.bluetooth.BluetoothDevice
通过这个输出日志,可以看到BluetoothDevice的所有方法调用情况,参数值等信息,这对 Bluetooth 协议的解析与安全测试很有帮助。
所以,这条命令的主要作用就是利用frida监视BluetoothDevice类的方法调用, output相关日志信息,以便进行协议分析与渗透测试。
使用命令,获得json ID 579414
jobs list
然后在设置->声音->媒体播放或者蓝牙的开关就能输出下面调用蓝牙类相关方法的监听日志
每个系统不一样可能会有点差异
2.4objection插件安装之Wallbreaker和frida-dexdump
GitHub官网:hluwa (葫芦娃) · GitHub
创建目录
mkdir -p plugins/
进入plugins目录下载到目录中
d plugins
proxychains4 git clone https://github.com/hluwa/Wallbreaker plugins/Wallbreaker
2.4.1Wallbreaker使用
进入objecttion
objection -g com.android.settings explore
或
objection -N -h 192.168.2.3 -p 8888 -g com.android.settings explore
进入objection后执行插件加载
plugin load plugins/Wallbreaker
打印类全路径
plugin wallbreaker classdump --fullname android.bluetooth.BluetoothDevice
这里是打印蓝牙类的全路径
2.4.2frida-dexdump脱壳插件安装
proxychains4 pip install frida-dexdump
启动frida后, 脱壳命令
frida-dexdump -U -f 包名
3安装工具jadx
创建目录
mkdir -p jadx/
进入jadx目录并下载
cd jadx
proxychains4 wget https://github.com/skylot/jadx/releases/download/v1.4.7/jadx-1.4.7.zip
下载好解压
7z x *zip
然后进入bin并启动
cd bin
./jadx-gui
或者
./bin/jadx-gui
或者
./jadx/bin/jadx-gui
4安装vscode
官网:Running Visual Studio Code on Linux
添加
proxychains4 sudo apt-get install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
rm -f packages.microsoft.gpg
下载安装
proxychains4 sudo apt install apt-transport-https
proxychains4 sudo apt update
proxychains4 sudo apt install code # or code-insiders
安装完成
参考