/ | \ ____ __ __ ______ ____
/ ~ \/ _ \| | \/ ___// __ \
\ Y ( <_> ) | /\___ \ ___/
\___|_ / \____/|____//____ >\___ >
\/ House \/ \/
动态移动分析工具
联系:[email protected]
House:一个基于 Web GUI 的运行时移动应用分析工具包,由 Frida 驱动,使用 Python 编写。它旨在通过实现动态函数挂钩和拦截来帮助评估移动应用,并尽可能简化 Frida 脚本编写。
git clone https://github.com/nccgroup/house
cd house
pip3 install -r requirements.txt
pip3 install pipenv
pipenv --python=/usr/bin/python3 install
pipenv --python=/usr/bin/python3 shell
python3 app.py <PORT>
# 或:
mkvirtualenv --python=/usr/local/bin/python3 house
workon house
pip install -r requirements.txt
python app.py <PORT>
# 或:(仅限 Mac OS)
git clone https://github.com/nccgroup/house
cd house
pip3 install -r requirements.txt
pip3 install pipenv
pipenv --python=/usr/local/bin/python3 install
pipenv --python=/usr/local/bin/python3 shell
python3 app.py <PORT>
默认情况下,House 绑定到 http://127.0.0.1:8000。
要了解 House 的功能概览,可以访问用户手册查看详情。


注意:请确保将 Frida 版本更新到 >= 12.8.3 以支持 dex/jar 函数挂钩。
本节通过一个小示例演示 House 的基本用法。演示针对一个小的测试 Android 应用进行:
com.ha0k3.overloads.
确保通过 USB 连接了 Android 设备,并且 Frida server 正在设备上运行。使用以下命令检查 Frida server 是否成功启动:frida-ps -U。
通过运行 app.py 启动 House 应用:python app.py <PORT>。
打开浏览器并导航到 http://127.0.0.1:PORT。
观察页面是否显示了设备信息,如果没有,点击 Refresh 按钮,或重启应用和 Frida server。


sideload。目前支持 stetho 侧加载,这使我们更容易检查 UI、存储等。





脚本渲染与函数跟踪

动态加载的 dex/jar 文件中的函数钩子

迷你脚本选项

历史脚本管理

通过 House,研究人员可以动态更改传递给目标函数的参数并将其转发。

有时 House 无法完美解析参数信息。例如,某个参数可能属于特殊类型。在示例应用中,它实现了 isLit 函数,该函数接受自定义对象作为参数。为应对这些情况,House 提供了一个简单的 "REPL"。安全研究人员可以在 REPL 中动态输入 Frida 脚本,并修改函数行为。

House 提供了几个 REPL 函数以简化测试:
inspectObject(obj) 使用 java.lang.reflect 检查对象内的字段信息。setRetval(ret) 接受一个参数,并尝试使用原始返回值的构造函数将其转换为正确的返回类型。getStackTrace() 将打印堆栈跟踪。
注意: 对于构造函数方法挂钩/拦截,输入 $init 作为方法名。
要使 House 正常工作,你需要:
请尝试同时重启 frida server 和 House,如果仍然不工作,请提交 issue。
通常由多个 USB 设备连接引起,尝试重启目标应用。
House 已使用 Frida 版本 12.8.6 进行测试;其他版本可能存在问题,同时确保 frida-python 与 frida-server 版本匹配。如果仍然不工作,尝试手动运行生成的 Frida 脚本,检查是否正常。
特别感谢以下开源项目为 House 提供的灵感:
如果你对 House 有更多疑问,或者想帮助扩展它,请随时联系:
或发送邮件至:郝可