gdt050579/GView
GitHub: gdt050579/GView
GView 是一个跨平台的逆向工程框架,通过多种智能查看器和可扩展插件对二进制文件、网络流量、文档等各类数据结构进行可视化分析与深度解析。
Stars: 51 | Forks: 69
# GView

[](https://github.com/gdt050579/GView/actions/workflows/testing.yml)
[](https://github.com/gdt050579/GView/actions/workflows/deploy_release.yml)
GView 框架是一个功能强大的工具,用于检查文件或任何具有定义结构的数据,例如缓冲区或内存区域。

- [GView](#gview)
- [总体描述](#general-description)
- [查看 GView 实际应用](#see-gview-in-action)
- [智能查看器](#smart-viewers)
- [Buffer Viewer](#buffer-viewer)
- [Text Viewer](#text-viewer)
- [Lexical Viewer](#lexical-viewer)
- [Image Viewer](#image-viewer)
- [Table Viewer](#table-viewer)
- [Dissasm Viewer](#dissasm-viewer)
- [Container Viewer](#container-viewer)
- [数据识别插件](#data-identifier-plugins)
- [架构](#architecture)
- [构建](#building)
- [使用的工具](#tools-used)
- [支持的平台](#supported-platforms)
- [Windows](#windows)
- [OSX](#osx)
- [Linux (Intel)](#linux-intel)
- [Linux (ARM (M1))](#linux-arm-m1)
- [CI/CD](#cicd)
- [文档](#documentation)
- [首次运行](#first-run)
- [Windows](#windows-1)
- [Linux](#linux)
- [MacOS / OSX](#macos--osx)
- [开始贡献](#start-contributing)
## 总体描述
**GView** 框架是一个功能强大的工具,用于检查文件或任何具有定义结构的数据,例如缓冲区或内存区域。用户可以利用多种可用的可视化选项来有效地分析和解释信息。
另一方面,从开发人员的角度来看,**GView** 提供了一个灵活的平台来创建可以解析各种数据结构的插件。开发人员可以利用此功能开发自定义视图并增强 **GView** 的分析能力。通过创建插件,开发人员可以扩展框架的功能并使其适应特定的数据格式或要求,从而实现更高效、更深入的数据分析。
### 查看 GView 实际应用
**场景 1:恶意感染**
一段录屏演示了如何使用 GView 分析受损系统的内容。通过检查网络流量,安全分析师可以揭示恶意行为者用于获得未经授权访问的方法。GView 的可视化功能能够快速识别可疑线索并帮助理解攻击的影响。[打开视频](https://youtu.be/Z1nTRKPewCg)。
**场景 2:可疑电子邮件**
GView 用于在受害者被感染后分析并观察违规行为的影响,以确定其潜在威胁。
起因是收到了一封可疑电子邮件。通过分析电子邮件标头、附件和嵌入内容,安全专家可以揭示隐藏的恶意代码或网络钓鱼企图。GView 处理各种文件类型和数据结构的能力提供了电子邮件组件的全面视图,有助于威胁评估。[打开视频](https://youtu.be/LpsvcgCkII8)。
## 智能查看器
**智能查看器** 是旨在以各种格式或表示形式显示数据的软件组件。在 **数据识别插件** 的上下文中,通常有多个智能查看器可用,其中一个被指定为主查看器。此设置允许用户在不同的查看器之间轻松切换,选择最有效满足其特定需求的可视化方法。
### Buffer Viewer
将数据解释为二进制缓冲区,并能够使用各种规范(如正则表达式、偏移量、内容模式等)识别和突出显示缓冲区的特定部分。它可以有效地检测并突出显示 ASCII 和 Unicode 格式的字符串。此外,该视图能够调整代码页,从而能够清晰地表示来自不同语言的字符。

### Text Viewer
将数据解释为由标识符分隔的按行排列的字符序列。它全面支持各种行分隔符,包括 CR、LF、CRLF 和 LFCR。该视图还提供了灵活的对齐选项,允许对 TAB 字符进行不同的解释,并为每行提供可自定义的换行设置。

### Lexical Viewer
此查看器利用 **数据识别插件** 提供的词法分析器。它提供高级功能,例如以高亮颜色显示文本、启用代码块的折叠或折叠,以及包含各种重构操作(如变量和函数重命名)。此外,数据识别插件可以提供一系列可应用于文本的特定语言转换。

### Image Viewer
可视化不同图像格式的图形表示。

### Table Viewer
以有组织的方式表示具有表格格式的数据(CSV、TSV、SQL 数据库)。

### Dissasm Viewer
通过反汇编过程展示二进制文件的内容,该过程检查代码并推断相关细节,如导入的函数名称、参数名称和字符串指针。此反汇编过程依赖于 Capstone 库。此外,**数据识别插件** 发挥着至关重要的作用,提供基本信息,例如所需的解码方法(例如 x86、x64)和代码的入口点偏移量。

### Container Viewer
该查看器显示可以使用当前 **数据识别插件** 提取的一系列组件。这种多功能功能可应用于各种场景,例如从存档中提取文件或从 PCAP 文件中提取流。

## 数据识别插件
在数据分析的上下文中,**数据识别插件** 作为一个有价值的组件,能够检查缓冲区,无论是其二进制形式还是转换为文本表示形式。其主要功能是根据缓冲区的类型自动从缓冲区中提取相关和特定的信息。为了促进全面的分析,每个数据识别插件都配备了专用面板,旨在显示特定于已识别数据类型的详细信息。
| 插件名称 | 数据类型 | 功能 |
| ----------- | --------- | ------------ |
| BMP | BMP (Bitmap) 格式是一种广泛使用的用于存储光栅图形图像的文件格式 | 打开并查看 BMP 文件,提供文件中包含的图像的图形表示 |
| CPP | CPP 文件是具有 .cpp 文件扩展名的文件,表明它们包含 C++ 源代码 | 解析 .cpp 文件,移除注释 |
| CSV | CSV 和 TSV 文件都是用于存储和组织表格数据的常见文件格式。 | 解析 .csv 或 .tsv 文件,排序列,调整表格大小,多选,复制和粘贴 |
| ELF | ELF (Executable and Linkable Format) 文件是许多类 Unix 操作系统(包括 Linux)中使用的标准文件格式 | 解析 ELF 格式(包括从 GO 语言构建的二进制文件的详细信息),高亮操作码,提取节、段、符号(静态和动态) |
| ICO | ICO (Icon) 文件是用于在 Windows 操作系统中表示图标的图像文件 | 打开并查看 ICO 文件,提供文件中包含的图像的图形表示 |
| INI | INI 文件是纯文本文件,具有由节、键和值组成的简单结构 | 解析 .ini 文件 (TOML),移除注释 |
| ISO | ISO (International Organization for Standardization) 文件是包含 CD、DVD 或蓝光光盘的精确副本或映像的存档文件 | 解析 ISO 文件 (ECMA 119),从其内容构建可导航的树 |
| JOB | JOB 文件与 Task Scheduler 相关联,Task Scheduler 是一个内置的 Windows 实用程序,允许用户在系统上调度和自动化任务。这些 .job 文件是二进制文件,用于存储使用 Task Scheduler 创建的调度任务的配置和设置 | 解析 .job 文件,高亮每个组件 |
| JS | .js 文件是包含 JavaScript 代码的文件 | 解析 .js 文件,移除注释,常量传播,反转字符串。开发中。 |
| JSON | JSON (JavaScript Object Notation) 文件是一种用于以轻量级和易读的方式存储和交换结构化数据的文件格式 | 解析 .json 文件,将所有键转换为大写 |
| JT | Jupiter Tessellation (JT) 是一种符合 ISO 14306:2012 标准的 3D 数据格式 | 解析 .jt 文件,高亮每个组件 |
| LNK | .lnk 文件,也称为 Windows 快捷方式文件,是 Windows 操作系统中使用的一种文件类型,用于创建文件、文件夹、程序或系统内特定位置的快捷方式 | 解析 .lnk 文件,提取所有可用数据(详细的 "ExtraData"、"LinkTargetIDList" 和 "LocationInformation"),高亮组件 |
| MACHO | Mach-O (Mach Object) 和 Mach-O Fat 文件主要是 macOS 和 iOS 系统中用于可执行文件和目标代码的文件格式 | 解析 Mach-O 和 Mach-O Fat 格式(包括从 GO 语言构建的二进制文件的详细信息),高亮操作码,提取节、段、符号(静态和动态),包括数字签名验证(在节二进制文件上创建的哈希) |
| PREFETCH | Prefetch 文件包含有关程序文件访问模式和依赖项的元数据和信息。它们包括程序的可执行文件名、相关的 DLL (Dynamic Link Library) 文件以及程序执行期间访问文件的顺序等详细信息 | 解析 Prefetch 文件,以有组织的方式提取所有可用数据(路径、卷、依赖项) |
| MAM | MAM 文件是以压缩形式存储的 Prefetch 文件 | 解压 MAM 文件 |
| PCAP | PCAP (Packet Capture) 文件,也称为 pcap 文件,是用于捕获和存储网络数据包数据的常见文件格式 | 内置支持 HTTP 流(更多功能即将推出) |
| PDF | PDF (Portable Document Format) 文件 - 包含文本、图像和嵌入对象的电子文档的 ISO 标准 | 解析并查看 PDF;显示二进制、结构和文本层;提取文本;列出对象/流;标记 JavaScript、嵌入文件和其他潜在的 IOC |
| PE | PE (Portable Executable) 文件是 Windows 操作系统用于可执行程序、DLL (Dynamic Link Library) 文件和其他系统组件的文件格式 | 解析 PE 格式(包括从 GO 语言构建的二进制文件的详细信息),高亮操作码,提取节、段、符号(静态和动态),包括数字签名验证(Windows 上的 CRL 吊销或 Unix 系统上的 OpenSSL 手动解析和验证) |
| PYEXTRACTOR | PyInstaller 将 Python 应用程序及其相关依赖项组合成一个统一的包,使得无需单独的 Python 解释器或单独的模块安装即可执行打包的应用程序 | 从打包格式 (ELF, Mach-O, PE) 中提取 PyInstaller 生成的捆绑 Python 应用程序及其依赖项的包 |
| VBA | VBA (Visual Basic for Applications) 格式是指用于在 Microsoft Office 文档(例如 Excel 工作簿、Word 文档、PowerPoint 演示文稿和 Access 数据库)中存储 VBA 代码模块和关联宏的文件格式 | 解析 .VB (Visual Basic) 文件。开发中。 |
| ZIP | ZIP 是一种广泛使用的文件压缩和归档格式 | 解析 .zip 文件,从其内容构建可导航的树 |
## 架构
架构流程总结如下:
1. 确定内容本质上是二进制还是文本。对于文本内容,尝试识别编码并将其解码为标准化格式,例如 UTF-16。
2. 浏览所有可用的 **数据识别插件** 以找到一个能够解释给定数据的插件。如果未找到特定插件,则回退到仅区分二进制和文本文件的通用插件。
3. **数据识别插件** 选择适合当前数据的智能查看器。用户可以灵活地在这些插件之间切换,并使用它们从现有内容中提取工件或数据。
4. 对提取的组件重复步骤 1 到 3。此迭代过程依赖于在前面的步骤中获得的工件来驱动后续的分析和提取。
至于项目中涉及的实际代码组件,这里有一个高级视图和一个核心视图:


## 构建
### 使用的工具
无论平台如何,都使用 CMake 构建整个项目。README.md
在我们的构建流程中使用 [vcpkg](https://github.com/microsoft/vcpkg) 的情况可以在 [这里](/.github/workflows/ci.yml) 查看。
### 支持的平台
#### Windows
使用 [vcpkg](https://github.com/microsoft/vcpkg) 开箱即用。
#### OSX
我们正在使用 [vcpkg](https://github.com/microsoft/vcpkg)。它需要安装 [curl](https://curl.se)。
不幸的是,在构建项目之前,某些 vcpkg 端口需要通过 [brew 包管理器](https://brew.sh) 手动安装 [pkg-config](https://formulae.brew.sh/formula/pkg-config)。
#### Linux (Intel)
需要 pkg-config 包。
使用 [vkg](https://github.com/microsoft/vcpkg) 和 [curl](https://curl.se)(用于 vcpkg)。
#### Linux (ARM (M1))
需要 pkg-config 包。
在顶层 CMakeLists.txt 中取消对此行的注释,以支持 Linux ARM 架构。
这将需要手动安装 ninja (ninja-build)。
```
# set(ENV{VCPKG_FORCE_SYSTEM_BINARIES} 1)
```
## CI/CD
我们正在使用 `Github Actions` 确保项目在 `Windows`、`OSX` 和 `Linux` 上构建,并且我们正在努力创建工件、存储它们并最终构建发布流程。
对于静态分析,我们正在使用 `CodeQL` 和 `Microsoft C++ Code Analysis`。
## 文档
该项目使用 Sphinx 作为主要文档引擎。Sphinx 源代码位于 `docs` 文件夹下。
每次提交到 `main` 时,Sphinx 文档的编译版本都会发布到 `gh-pages`,然后发布到 docs。
## 首次运行
目前有一个预发布/测试版 GitHub CI/CD 流水线,它为每个受支持的操作系统创建一个存档。
可以下载该存档并运行该包(通过主二进制文件 - `GView` - 但根据平台有一个限制)。
支持的流程架构(通过 GitHub Actions)是 Intel,但也可以为 ARM 构建。
### Windows
开箱即用(在 Windows 10 x64 上测试),只需解压发布版存档并运行 `GView.exe`。
### Linux
Ubuntu 18.04 在 GitHub actions 中已 [弃用](https://github.blog/changelog/2022-08-09-github-actions-the-ubuntu-18-04-actions-runner-image-is-being-deprecated-and-will-be-removed-by-12-1-22)。我们的预编译二进制文件无法在那里运行(GLIBC 版本太旧)。
我们目前正在 Ubuntu 20.04 (Intel) 上构建,这允许我们在 Ubuntu 20.04 和 Ubuntu 22.04 上运行 `GView`。
### MacOS / OSX
您下载的包中的每个 GView 二进制文件都会收到此警告:
```
macOS cannot verify that this app is free from malware.
Chrome downloaded this file today at 22:31.
```
不幸的是,除非您完全暂时禁用 `Gatekeeper`(这将使您的计算机处于风险之中),否则您需要逐一手动允许所有二进制文件运行。在我们对二进制文件进行数字签名(MacOS 签名和公证)之前,无法避免此过程。
## 开始贡献
- 使用递归子模块克隆此存储库:
```
git clone --recurse-submodules
```
贡献者可以使用 `pip install -r requirements.txt` 安装 sphinx,这将安装 Sphinx 工具和 `sphinx_rtd_theme`。本地构建使用 `make html` 完成
命令成功执行后,可以在 `build` 文件夹中找到 html 页面。
标签:Bash脚本, C++, DAST, DNS解析, Findomain, GView, SecList, Wayback Machine, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 内存取证, 反汇编, 威胁分析, 开源项目, 恶意软件分析, 插件架构, 数据擦除, 数据解析, 文件结构分析, 缓冲区查看器, 网络安全, 自动化侦查工具, 调试插件, 跨平台框架, 逆向工程, 隐私保护, 静态分析