概述
MEDUSA是一个可扩展且模块化的框架,用于自动化在动态分析Android和iOS应用程序过程中采用的各种方法和技术。
安装
按照以下步骤进行安装:
- 克隆github存储库
git clone https://github.com/Ch0pin/medusa.git
- 进入Medusa的目录
- 执行以下命令:
$ pip install -r requirements.txt --upgrade
已知问题
在macOS安装过程中,可能会遇到以下问题:
由于找不到受支持的readline版本,已禁用包括制表符补全在内的Readline功能。为解决此问题,在Windows上安装pyreadline3,或在Linux/Mac上安装gnureadline。
您可以通过安装Python的gnureadline来解决此问题:
pip install gnureadline
使用Docker
您可以在medusa/目录中找到Docker文件。
构建步骤:
$ docker build -t medusa:tag1 ./
运行步骤:
$ docker run --name medusa --net=host --rm -it medusa:tag1
在物理设备或模拟器上以TCP/IP模式运行adbd:
$ adb tcpip 5555
通过以下方式从Docker映像连接到您的设备:
root@docker# adb connect device_ip:5555
系统要求
- Linux或macOS(目前Medusa不支持Windows)
- Python 3(使用最新的Python版本,而不是macOS附带的版本,以避免使用libedit而不是GNU的readline引起的问题)
- Rooted设备或模拟器
- adb
- FRIDA服务器(在移动设备上运行)
用法
Medusa用法
搜索模块
使用show
命令,后面跟着以下选项之一:
all
:显示所有可用的模块mods
:显示已储存的模块categories
:显示可用的模块类别mods [category]
:显示所选类别的可用模块
使用info [模块名称]
来获取有关特定模块的帮助。
储存/取消储存
使用use [模块名称]
将模块添加到储存的模块中:
medusa> use http_communications/multiple_unpinner
使用rem [模块名称]
将模块从储存的模块中移除:
medusa> rem http_communications/multiple_unpinner
使用add [完整模块路径]
将保存在默认目录之外的模块添加到储存中:
medusa> add /full/path/to/module.med
使用reset
清空储存的模块列表并清除统一脚本。
使用swap
更改储存的模块的编译顺序:
medusa> swap [索引1] [索引2]
编译
使用compile
将您储存的模块编译成一个统一的模块:
medusa> compile
使用compile -t X
(其中X是以毫秒为单位的延迟值)添加加载延迟:
medusa> compile -t 1000
开始一个会话
使用run -f [包名]
或者run -n [包编号]
来启动或重新启动一个应用程序并附加到它(您可以使用list
命令获取包编号)。
medusa> run -f com.foo.bar
使用run [包名]
来附加到一个应用程序。
medusa> run com.foo.bar
在会话菜单中
[会话中] |c:清屏 |e:退出 |r:重新加载 | | rs:重置scratchpad |i:信息 |t:跟踪 |?:帮助 |:
在“会话中”,您可以使用以下命令之一:
- 'c'(清屏)清除屏幕
- 'e'(退出)退出会话
- 'r'(重新加载)在脚本更改的情况下重新加载
- 'rs'(重置scratchpad)重置scratchpad
- 'i'(信息)打印有关应用程序的信息
- 't'(跟踪)跟踪函数并打印堆栈跟踪(例如,
t com.foo.bar.func
) - '?' 打印此帮助消息
hook
使用hook
命令,后面跟着以下选项之一,以拦截当前可用模块中不存在的方法:
-a [类名]
:为给定类的所有方法设置挂钩。例如:
medusa> hook -a com.foo.bar.className
-f: 为单个方法设置挂钩。示例:
medusa> hook -f
输入方法的完整名称:
- 类名:
com.foo.bar
- 方法名(按CTRL+C退出):
fooMethod
启用回溯?(y/N)y
[+] 方法:fooMethod 挂钩已添加!
输入方法名(按CTRL+C退出):
可以使用jtrace
命令达到相同的结果:
medusa> jtrace full_path_to_method
-n: 为本地方法设置挂钩。示例:
medusa> hook -n
库名称(例如:libnative.so):libfoo.so
导入或导出的函数?(i/e)e
函数名称或偏移(例如:0x1234):0x1234
函数参数的数量(0表示禁用跟踪):3
启用回溯?(y/N)y
启用内存读取?(y/N)y
读取缓冲区大小(0-1024):128
模块scratchpad已经添加!
-r: 重置到目前为止设置的挂钩
使用pad
命令来编辑scratchpad。
处理本地库
使用libs
命令,后面跟着以下选项之一,以列出应用程序的本地库:
-a
:列出所有应用程序的库。-s
:仅列出系统的库。-j
:仅列出应用程序的库。
添加--attach
以附加到已经运行的应用程序实例(通常效果更好)。
示例:
medusa> libs -j com.foo.bar libnative.so --attach
处理应用程序内存
您可以使用memops
或memmap
命令来读取/写入/搜索/转储应用程序的内存。前者需要连接到一个库,而后者使用内存区域。
在两种情况下,应用程序必须已经在运行!
memops
示例:
medusa> memops package_name libname.so
如果附加成功,Medusa将启动一个会话,其中您可以选择以下选项:
(E)xit
退出r@offset
读取指定偏移处的内存w@offset
写入指定偏移处的内存⏎
进入下一行scan
内存扫描(h)elp
帮助dump
转储内存
要获取有关每个选项功能的详细信息,请参阅“基本用法”部分。
memmap
示例:
medusa> memmap package_name
然后从子菜单中选择一个内存区域。
如果附加成功,Medusa将启动一个会话,其中您可以选择以下选项:
(E)xit
退出r@offset
读取指定偏移处的内存dump
转储内存
获取类和对象快照
使用describe_java_class
来打印类的详细信息,示例:
medusa> describe_java_class full.path.to.class.name
使用get
来打印一个类的字段的值,假设该类已经被实例化。
medusa> get package_name full.path.to.class.field
实用工具
运行Shell命令:
medusa> c ls -al
在连接的设备上运行Shell命令:
medusa> cc ls -al
清除屏幕:
medusa> clear
打开交互式Shell:
medusa> shell
转储应用程序的DEX文件
medusa> dump com.foo.bar
列出已安装的包
medusa> list
列出包的路径
medusa> list com.foo.bar path
加载或重新加载设备:
medusa> loaddevice
重新加载Medusa模块。在更改Medusa模块时,此选项很有用。
medusa> reload
加载保存的会话
medusa> reload -r session-filename
打印当前会话状态
medusa> status
记录系统调用
medusa> strace package_name
向设备发送文本
medusa> type 'text'
保存一个会话
medusa> export file-name
要加载回这个会话,可以使用以下选项之一:
./medusa -r file-name
medusa> reload -r file-name
Mango用法
启动会话
您可以将现有的会话文件作为参数传递给 mango 脚本(./mango session_file
),或者启动 mango 时不带参数并按照提示操作:
--------------------------------------------------
[?] 您想要做什么?
--------------------------------------------------
1 启动新会话
2 继续现有会话
3 退出
加载应用程序
您可以导入:
- 已下载的 APK:
mango> import /full/path/to/foo.apk
- 已安装在连接设备上的 APK:
mango> pull package_name
,然后mango> import base.apk
- 或者重新加载已经分析过的 APK:
mango> load package_name
处理应用程序组件
您可以使用show
命令后跟组件类型来查看应用程序的组件(活动、服务等)。
示例:
mango> show activities
其他选项包括:activityAlias、services、receivers、providers、permissions、deeplinks 和 intentFilters。
在适用的情况下,使用-e
将仅打印出导出的组件。
此外,show
命令支持以下附加选项:
exposure
:打印应用程序的“攻击面”,包括深度链接、导出的活动、活动别名、服务、接收器和提供程序。info
:打印有关已加载应用程序的有用信息。strings
:打印应用程序的字符串资源。database
:打印数据库文件的结构。该输出可用于构造原始 SQL 查询(参见query
命令)。applications
:此选项可用于加载不同的应用程序或管理现有的应用程序。
您可以通过输入query
,后跟查询内容,向当前会话的数据库发出“原始” SQL 查询:
query select permission, type from Permissions where app_sha256="a2e5bfac992ecac9c3b7013294936517330e9f6b2cfb1b6b98bf9a366eb31ff0"
与应用程序交互
您可以通过输入start
,后跟制表符或活动的完整名称,强制当前加载的应用程序启动一个活动:
mango> start com.foo.bar.ActivityA
同样,您可以通过输入startsrv
,后跟制表符或服务的完整名称,强制应用程序启动一个服务:
mango> startsrv com.foo.bar.ServiceA
或者通过输入以下命令停止一个服务:
mango> stopsrv com.foo.bar.ServiceA
要触发深度链接,请输入deeplink
,后跟制表符或深度链接的完整URI:
mango> deeplink example://mywebview
此外,您可以通过输入kill
或spawn
,后跟应用程序的名称,分别杀死或启动一个应用程序:
mango> spawn com.example.package
与设备交互
要安装应用程序,请使用mango> install /full/path/to/foo.apk
要卸载应用程序,请使用mango> uninstall [package name]
要安装 Burp 证书,请输入installBurpCert
,并按照 mango 指示的步骤进行操作。
要修改设备的代理设置,请输入proxy
,后跟以下选项之一:
get
以打印当前的代理配置。
设置 IP:端口 以配置代理。添加 -t(例如,mango> proxy set -t 192.168.1.2:8080
)将设置透明代理。
reset
将清除设备的代理。
要启动一个交互式 ADB 会话,请输入adb
。
要启动一个带有 BusyBox 支持的交互式 shell,请输入box
并按照给定的说明操作。
要获取特定包的 logcat,请输入logcat [package name]
。您还可以使用nlog
获取设备的本机日志,或者使用jlog
获取Java崩溃日志。
要获取屏幕截图,请输入screencap -o [filename.png]
。
要在连接的设备上运行 Shell 命令,请输入:cc [command]
。
您可以通过输入notify notification_title notification_body
向设备发送通知。此命令要求安装 medusa 代理,可以使用installagent
命令完成。
修补 APK
将给定 APK 的 debuggable 标志设置为 true:patch /full/path/to/foo.apk
。
此选项要求在设备上安装 apksigner 和 zipalign。如果它们不存在,Mango 将在本地下载并使用。
使用jdwp [package name]
在应用程序中动态调试。
启动一个 frida-trace 会话,使用trace
命令和以下选项之一:
-j
跟踪 Java 类的所有函数。例如:trace -j com.myapp.name*
// 跟踪 com.myapp.name* 类的所有函数-n
跟踪本地函数。例如:trace -n name*
-a
跟踪本地库的所有函数。例如:trace -a libfoo.so
使用medusa.py
MEDUSA的主要理念是能够在大规模上添加或删除Java或Native方法的钩子,同时保持过程简单而有效。MEDUSA拥有超过90个可以组合的模块,每个模块专注于一组任务。一些典型的任务包括:
- SSL pinning绕过
- UI限制绕过(例如Flag secure,按钮启用)
- 类枚举
- 监控:
- 加密过程(密钥、IV、待加密数据)
- 意图(Intents)
- Http通信
- Websockets
- Webview事件
- 文件操作
- 数据库交互
- 蓝牙操作
- 剪贴板
- 监控被恶意应用程序使用的API调用,如:
- 间谍软件
- 点击欺诈
- 通行欺诈
- 短信欺诈
此外,您可以拦截属于第三方应用程序的Java或Native方法,或者仅用几个简单的命令创建复杂的frida模块。
使用mango.py
Mango是Medusa的孪生兄弟,可用于:
- 解析和分析Android清单
- 枚举应用程序的攻击入口点(导出的活动、深度链接、服务等)
- 跟踪所有已分析的应用程序
- 自动化乏味的流程,例如:
- 设置中间人攻击(MITM)
- 打补丁
- 封装adb命令
- 设置/查看/重置设备的代理配置
- ...等等。
许可证协议
本项目遵循GPL-3.0开源许可协议
参考文献
https://github.com/Ch0pin/medusa
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)