cclgroupltd/mister-skinnylegs
GitHub: cclgroupltd/mister-skinnylegs
一个开放的浏览器取证插件框架,通过 CLI 从 Chrome/Chromium 和 Firefox 的 Profile 中自动解析和恢复各类 Web 应用的用户活动数据。
Stars: 20 | Forks: 3
```
╔╦╗┬┌─┐┌┬┐┌─┐┬─┐
║║║│└─┐ │ ├┤ ├┬┘
╩ ╩┴└─┘ ┴ └─┘┴└─
╔═╗┬┌─┬┌┐┌┌┐┌┬ ┬┬ ┌─┐┌─┐┌─┐
╚═╗├┴┐│││││││└┬┘│ ├┤ │ ┬└─┐
╚═╝┴ ┴┴┘└┘┘└┘ ┴ ┴─┘└─┘└─┘└─┘
```
mister-skinnylegs 是一个开放的插件框架,用于解析浏览器数据中的网站/Web 应用 artifacts。
它目前提供了一个命令行界面(CLI),可用于针对 Chrome、Chromium 或 Mozilla Firefox 的 Profile Folder 运行插件。
## 当前插件
| 插件文件 | 服务 | Artifact | 版本 | 描述 |
|---------------------------|-----------------|---------------------------------------|--------|-----------------------------------------------------------------------------------------------------------|
| binance_plugin.py | Binance | Binance User Details | 0.1 | 从 Cache 中恢复 Binance User Details 记录 |
| binance_plugin.py | Binance | Binance Balances | 0.1 | 从 Cache 中恢复 Binance Balance 记录 |
| bing_plugin.py | Bing | Bing searches | 0.2 | 从历史记录和 Cache 中的 URL 恢复 Bing 搜索记录 |
| chatgpt_plugin.py | ChatGPT | ChatGPT Chat Information | 0.1 | 从 History 和 Cache 中恢复 ChatGPT 聊天信息 |
| chatgpt_plugin.py | ChatGPT | ChatGPT User Information | 0.1 | 从 Cache 中恢复 ChatGPT 用户信息 |
| coinbase_plugin.py | Coinbase | Coinbase Payment Methods | 0.1 | 从 Cache 中恢复 Coinbase Payment Methods 记录 |
| coinbase_plugin.py | Coinbase | Coinbase User Details | 0.1 | 从 Cache 中恢复 Coinbase User Details 记录 |
| coinbase_plugin.py | Coinbase | Coinbase Balances | 0.1 | 从 Cache 中恢复 Coinbase Balances 记录 |
| coinbase_plugin.py | Coinbase | Coinbase Transactions | 0.1 | 从 Cache 中恢复 Coinbase Transactions 记录 |
| deepseek_plugin.py | DeepSeek | DeepSeek User Information | 0.1 | 从 Cache 中恢复 DeepSeek 用户信息 |
| deepseek_plugin.py | DeepSeek | DeepSeek Chat Sessions | 0.1 | 从 Cache 和 History 中恢复 DeepSeek Chat Sessions 记录 |
| deepseek_plugin.py | DeepSeek | DeepSeek Chat Messages | 0.1 | 从 Cache 中恢复 DeepSeek 聊天消息 |
| discord_plugin.py | Discord | Discord Chat Messages | 0.1 | 从 Cache 中恢复 Discord 聊天消息 |
| dropbox_plugin.py | Dropbox | Dropbox Session Storage User Activity | 0.3 | 从 Session Storage 的 'uxa' 记录中恢复用户活动 |
| dropbox_plugin.py | Dropbox | Dropbox File System | 0.2 | 从历史记录中的 URL 恢复部分文件系统 |
| dropbox_plugin.py | Dropbox | Dropbox Thumbnails | 0.4 | 恢复存储在 Dropbox 中的文件缩略图 |
| duckduckgo_plugin.py | Duckduckgo | Duckduckgo searches | 0.2 | 从历史记录和 Cache 中的 URL 恢复 Duckduckgo 搜索记录 |
| google_drive_plugin.py | Google Drive | Google Drive Files and Folders | 0.2 | 从历史记录中恢复 Google Drive 和 Docs 文件夹及文件名称(和 URL) |
| google_drive_plugin.py | Google Drive | Google Drive Thumbnails | 0.2 | 从 Cache 中恢复 Google Drive 缩略图 |
| google_drive_plugin.py | Google Drive | Google Drive Usage | 0.2 | 恢复 Google Drive 使用情况的迹象 |
| google_plugin.py | Google | Google searches | 0.5 | 从历史记录、Session Storage 和 Cache 中的 URL 恢复 Google 搜索记录 |
| o365_sharepoint_plugin.py | O365-Sharepoint | O365-Sharepoint recent files | 0.2 | 从 Sharepoint 和 O365 在 Cache 中的 API 响应中恢复最近文件列表及任何缩略图 |
| o365_sharepoint_plugin.py | O365-Sharepoint | O365-Sharepoint user activity | 0.2 | 恢复与 Sharepoint 和 O365 用户活动(查看、编辑、下载等)相关的 artifacts |
| reddit_plugin.py | Reddit | Reddit Chat Messages | 0.2 | 从 Cache 和 IndexedDB 中恢复 Reddit 聊天消息 |
| storage_dump_plugin.py | Data Dump | History | 0.2 | 转储 History Records |
| storage_dump_plugin.py | Data Dump | Downloads | 0.2 | 转储 Download Records |
| storage_dump_plugin.py | Data Dump | Localstorage | 0.2 | 转储 Localstorage Records |
| storage_dump_plugin.py | Data Dump | Sessionstorage | 0.1 | 转储 Sessionstorage Records |
## CLI 工具
### 设置 CLI 工具
该工具需要 [Python](https://python.org) 3.12 或更高版本。安装完成后,从该代码库下载代码并将其放入一个文件夹中。
该工具需要下载一些依赖项。我们建议为此使用 Python venv(虚拟环境)。
在包含源代码的文件夹的 shell 中,你可以执行以下操作(如果不在 Windows 上,请将“py”替换为“python”):
```
py -m venv .venv
./.venv/Scripts/activate
pip install -r requirements.txt
```
逐行说明如下:
1. 初始化一个新的 venv
2. 激活 venv
3. 安装 requirements.txt 文件中列出的依赖项
第一步和最后一步在每次安装时只需执行一次。中间步骤在你每次打开新 shell 运行该工具时都需要执行。
### PowerShell 问题?
如果你使用的是 PowerShell 并在第二步收到错误消息,这通常是由于执行策略违规引起的。通常可以通过在上述操作之前执行以下命令来解决此问题:
```
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted
```
并且为了安全起见,一旦你完成了操作,请将策略恢复为默认值:
```
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Default
```
### 使用 CLI
工具设置完成后,即可从命令行运行。命令行界面以要处理的浏览器类型开始,后跟特定于该浏览器的选项。该工具目前支持的浏览器类型有:
* `chromium`
* `mozilla`
要查看特定浏览器类型的命令行帮助,你可以使用 `--help` 命令行选项,例如:
```
py .\mister-skinnylegs.py chromium --help
```
默认情况下,使用该工具将针对 profile folder 运行 `plugins` 文件夹中找到的所有插件,并在 output 文件夹中生成输出。所有插件至少会为每个 artifact 生成一个 JSON 文件,但也可能会根据插件创建其他输出。在当前版本中,如果你想从流程中省略某个插件,则需要将其从 `plugins` 文件夹中移除。
#### chromium
此模式旨在用于处理来自 Chrome 以及其他基于 Chromium 且紧密遵循 Chrome 关键 artifacts 实现的浏览器(例如 Edge)的数据。
它需要两个参数:
* `-p `
* `-o `
*(注意:输出路径的文件夹应该尚不存在)。*
它还可以选择使用以下参数:
* `-c `
cache folder 参数用于当你需要将工具指向位于 profile folder 之外的 Cache 文件夹时(例如在 Android 情况下)。
示例:
```
py .\mister-skinnylegs.py chromium -p "c:\Users\you\AppData\Local\Google\Chrome\User Data\Profile 1" -o .\output_folder
```
#### mozilla
此模式旨在用于处理来自 Mozilla Firefox 浏览器或基于 Firefox 且紧密遵循 Firefox 数据布局的其他浏览器的数据。
它需要三个参数:
* `-p `
* `-c `
* `-o `
*(注意:输出路径的文件夹应该尚不存在)。*
示例:
```
py .\mister-skinnylegs.py mozilla -p "C:\Users\you\AppData\Roaming\Mozilla\Firefox\Profiles\a4pugz09.default-release" -c "C:\Users\you\AppData\Local\Mozilla\Firefox\Profiles\a4pugz09.default-release\cache2" -o .\output_folder
```
### 插件
Mister Skinnylegs 插件由放置在 `plugins` 文件夹中的 Python 模块表示。插件的文件名应以 `_plugin.py` 结尾,例如 `cool_website_plugin.py`。每个插件都可以包含用于处理多个 *artifacts* 的功能。
每个插件文件都必须包含一个名为 `__artifacts__` 的模块级变量。该变量应指向一个由 `ArtifactSpec` 对象组成的可迭代对象(建议使用元组)。例如:
```
__artifacts__ = (
ArtifactSpec(
"Example Service",
"Example artifact 1",
"Description of this artifact goes here",
"0.1.0",
example_artifact1_func,
ReportPresentation.table
),
ArtifactSpec(
"Example Service",
"Example artifact 2",
"Example which returns all hosts for local storage",
"0.1.0",
example_artifact2_func,
ReportPresentation.table
)
)
```
`ArtifactSpec` 对象描述了可以由插件处理的 artifact,并指向为该 artifact 提供处理功能的函数。
插件函数需要具有以下签名:
```
def example_artifact1(profile: BrowserProfileProtocol, log_func: LogFunction, storage: ArtifactStorage) -> ArtifactResult:
...
```
* 第一个参数是由宿主传递给函数的 `ChromiumProfileFolder`,用于访问浏览器存储的数据。
有关此类的更多信息,请访问 [ccl_chromium_reader 包](https://github.com/cclgroupltd/ccl_chromium_reader)
* 第二个参数是供插件使用的日志记录回调函数,它应该是一个接受单个字符串参数(即要记录的消息)的函数。
* 一个实现了 `ArtifactStorage` 抽象基类的对象。插件可以使用此对象创建可用于存储与输出相关的数据的可写流。
该函数应返回一个 `ArtifactResult`,其中包含要传递回宿主的处理后数据。返回对象所包含的结果应该是可以由宿主转换为 JSON 的 Python 数据结构。在当前版本中,宿主将使用 `json.dump` 并采用扩展编码器,这意味着结果可以包含 `datetime.datetime` 对象以及字典、列表、字符串、浮点数、整数、布尔值和 `None`(在未来的版本中,这可能会发生变化,其他常见的数据类型(如 `datetime.datetime`)将以标准方式进行编码)。
可以在 [example_plugin_.py](mister_skinnylegs/plugins/example_plugin_.py) 中找到插件的最小示例
#### chrome-profile-view
我们发布了另一个项目,可能有助于研究新的浏览器 artifacts,你可以在这里找到:
https://github.com/cclgroupltd/chrome-profile-view/
标签:HTTP工具, Python, 代码示例, 数字取证, 数据分析, 文档结构分析, 无后门, 浏览器取证, 痕迹恢复, 自动化脚本, 逆向工具