SHUROKO-EXE/ScallopShell
GitHub: SHUROKO-EXE/ScallopShell
ScallopShell 是一款基于终端的多态代码调试器与反编译器,专为通过动态追踪解决传统工具难以分析的混淆二进制文件而设计。
Stars: 10 | Forks: 0
# Scallop Shell - 多态代码调试器与反编译器
Alpha 1.1.0
## 支持平台
Linux,macOS 开发中
## 动机
GDB、pwndbg、Ghidra、IDA 是当前逆向工程领域的行业标准。它们并未针对多态二进制文件的逆向工程进行充分优化。调试器会对内存进行静态反汇编,而不是显示当前正在运行的指令。此外,它们不支持 Windows,而 Windows 的调试器大多基于 GUI。一旦涉及多态代码,反编译器就会完全失效。
## 用法
```
scallop [OPTIONS]
OPTIONS:
-h, --help Print this help message and exit
-f, --file REQUIRED Filepath to target binary
-a, --arch TEXT Target Architecture, whatever the suffix of the QEMU binary
is (qemu-riscv64 -> riscv64, qemu-aarch64 -> aarch64)
-s, --system BOOLEAN Is system?
```
## 安装说明
从源码构建 QEMU,确保设置了 TCG Plugin 标志。如果没有这个,Linux 原生实现将无法工作。然后,进入 ~/.bashrc,
```
export QEMU_SRC_DIR= # Source directory for the custom QEMU build (only if building plugin from source!)
export SCALLOP_QEMU_BUILD= # Build path of QEMU
export SCALLOP_QEMU_PLUGIN= # Plugin path for scallop_plugin.so
```
### 从源码编译
按照上述说明操作。然后下载 capstone 包。如果没有这个,这将无法运行。对于我在 Fedora 上的情况,命令如下:
```
sudo dnf install capstone # Just running the precompiled binary
sudo dnf install capstone-devel # Compiling from source
```
对于反编译器,运行:
```
sudo dnf install llvm-devel
```
但你的具体安装命令可能有所不同,请查阅适用于你的操作系统/发行版的文档。
然后,在主项目目录下运行:
```
chmod +x ./build.sh
./build.sh
```
这将使用 CMake 编译它并为你完成所有链接工作。
## 添加到路径
如果你想将其添加到命令行中,请将以下内容复制粘贴到你的 .bashrc 文件中(位于 ~/)
```
export PATH=$PATH:~/path/to/package
```
你也可以直接将其移动到 /usr/bin/。我不认为这有什么缺点。
## 控制方式
目前的控制方式并不理想。CtrlS 会将焦点分配给 CLI,CtrlA 分配给内存显示,CtrlD 分配给反汇编视图,CtrlI 分配给 I/O 显示。如果你想修补内存或代码显示中的字节,*必须选中该显示窗口*。这通过窗口高亮来表示。上下箭头在不同的窗口中执行不同的操作(在 CLI 和 I/O 显示中,上箭头让你进入内存显示,其他显示则进行滚动)。如果你想访问其他选项卡,必须先选中内存显示,然后按 ShiftTab。Tab 目前无法使用。再次向目前使用此软件的最终用户致歉。控制体验很差,但这将会改进。CtrlF 允许你在内存显示中搜索内存,并在 I/O 显示中搜索特定的文件描述符。
## 实时修补
Scallop Shell 的一个功能是在字节显示中进行实时修补。如果你想更改显示中的任何字节,只需点击你想更改的字节。当然,你只能输入 0-9 和 A-F 的值。修补完字节后,按回车键保存。你可以按 Shift+Z 撤销你所做的编辑,**直到**你单步执行到下一条指令。单步执行后,实时修补器将向模拟器发送请求以修改你更改的内存。这会清除历史记录,因此无法再进行撤销。当然,你仍然可以再次编辑它。
## 记事本
你可以在记事本选项卡中记录你正在进行的工作。按 Ctrl+S 保存。当你再次在 Scallop Shell 中打开该二进制文件时,它会重新打开你之前的笔记。
## 调试
你可以运行 "step N",其中 N 是你想单步执行的指令数量(如果留空,默认为 1)。"focus" 命令将过滤掉你指定的低参数和高参数之外的所有内存(例如,"focus 0x400000 0x500000" 将只输出该范围内的指令)。按回车键将运行上一个命令。
Scallop Shell 会在指令运行之前显示它。因此,如果你想在指令运行前对其进行修补,它是允许的。
## 断点
在任意位置设置断点,只需输入 "break 0x",后面跟上要中断的指令地址。
```
break 0x400360
```
## 指令过滤
目前,二进制文件范围之外执行的所有指令都会被忽略。这使得像带有可执行内存的 mmap() 之类的内容无法被 Scallop Shell 处理。这将在以后的版本中修复。
## 反编译
目前处于非常实验性的阶段。它从运行时指令转储 CSV 重建二进制文件,且仅包含已运行的指令。这*目前尚不*适用于自修改二进制文件:它保留特定地址处运行的第一条指令,因此在支持之前完全无用。理论基础已经存在,实施计划也已制定。目前,请使用标准的逆向工程工作流程。反编译器的开发是动态的,在达到工作阶段之前会不断发生变化。
## 许可证
本项目在 GNU Affero General Public License v3.0 (AGPL-3.0) 下获得许可。
你可以自由使用、修改和分发本软件。
如果你将其作为服务提供或重新分发修改后的版本,
你必须在相同的许可证下提供完整的源代码。
未来可能会提供商业重新授权。
## 商标
项目名称和标志是 SHUROKO.EXE 的商标。
在商业产品中使用名称或标志需要明确许可。
除非另有说明,本项目与任何公司没有关联、未获其认可或赞助。
## 无背书
使用本软件并不意味着作者背书。
## 贡献
通过贡献本项目,你同意贡献者许可协议 (CLA)。
CLA 允许维护者重新许可贡献,而贡献者保留
其作品的版权。
Alpha 1.1.0
## 支持平台
Linux,macOS 开发中
## 动机
GDB、pwndbg、Ghidra、IDA 是当前逆向工程领域的行业标准。它们并未针对多态二进制文件的逆向工程进行充分优化。调试器会对内存进行静态反汇编,而不是显示当前正在运行的指令。此外,它们不支持 Windows,而 Windows 的调试器大多基于 GUI。一旦涉及多态代码,反编译器就会完全失效。
## 用法
```
scallop [OPTIONS]
OPTIONS:
-h, --help Print this help message and exit
-f, --file REQUIRED Filepath to target binary
-a, --arch TEXT Target Architecture, whatever the suffix of the QEMU binary
is (qemu-riscv64 -> riscv64, qemu-aarch64 -> aarch64)
-s, --system BOOLEAN Is system?
```
## 安装说明
从源码构建 QEMU,确保设置了 TCG Plugin 标志。如果没有这个,Linux 原生实现将无法工作。然后,进入 ~/.bashrc,
```
export QEMU_SRC_DIR= # Source directory for the custom QEMU build (only if building plugin from source!)
export SCALLOP_QEMU_BUILD= # Build path of QEMU
export SCALLOP_QEMU_PLUGIN= # Plugin path for scallop_plugin.so
```
### 从源码编译
按照上述说明操作。然后下载 capstone 包。如果没有这个,这将无法运行。对于我在 Fedora 上的情况,命令如下:
```
sudo dnf install capstone # Just running the precompiled binary
sudo dnf install capstone-devel # Compiling from source
```
对于反编译器,运行:
```
sudo dnf install llvm-devel
```
但你的具体安装命令可能有所不同,请查阅适用于你的操作系统/发行版的文档。
然后,在主项目目录下运行:
```
chmod +x ./build.sh
./build.sh
```
这将使用 CMake 编译它并为你完成所有链接工作。
## 添加到路径
如果你想将其添加到命令行中,请将以下内容复制粘贴到你的 .bashrc 文件中(位于 ~/)
```
export PATH=$PATH:~/path/to/package
```
你也可以直接将其移动到 /usr/bin/。我不认为这有什么缺点。
## 控制方式
目前的控制方式并不理想。CtrlS 会将焦点分配给 CLI,CtrlA 分配给内存显示,CtrlD 分配给反汇编视图,CtrlI 分配给 I/O 显示。如果你想修补内存或代码显示中的字节,*必须选中该显示窗口*。这通过窗口高亮来表示。上下箭头在不同的窗口中执行不同的操作(在 CLI 和 I/O 显示中,上箭头让你进入内存显示,其他显示则进行滚动)。如果你想访问其他选项卡,必须先选中内存显示,然后按 ShiftTab。Tab 目前无法使用。再次向目前使用此软件的最终用户致歉。控制体验很差,但这将会改进。CtrlF 允许你在内存显示中搜索内存,并在 I/O 显示中搜索特定的文件描述符。
## 实时修补
Scallop Shell 的一个功能是在字节显示中进行实时修补。如果你想更改显示中的任何字节,只需点击你想更改的字节。当然,你只能输入 0-9 和 A-F 的值。修补完字节后,按回车键保存。你可以按 Shift+Z 撤销你所做的编辑,**直到**你单步执行到下一条指令。单步执行后,实时修补器将向模拟器发送请求以修改你更改的内存。这会清除历史记录,因此无法再进行撤销。当然,你仍然可以再次编辑它。
## 记事本
你可以在记事本选项卡中记录你正在进行的工作。按 Ctrl+S 保存。当你再次在 Scallop Shell 中打开该二进制文件时,它会重新打开你之前的笔记。
## 调试
你可以运行 "step N",其中 N 是你想单步执行的指令数量(如果留空,默认为 1)。"focus" 命令将过滤掉你指定的低参数和高参数之外的所有内存(例如,"focus 0x400000 0x500000" 将只输出该范围内的指令)。按回车键将运行上一个命令。
Scallop Shell 会在指令运行之前显示它。因此,如果你想在指令运行前对其进行修补,它是允许的。
## 断点
在任意位置设置断点,只需输入 "break 0x",后面跟上要中断的指令地址。
```
break 0x400360
```
## 指令过滤
目前,二进制文件范围之外执行的所有指令都会被忽略。这使得像带有可执行内存的 mmap() 之类的内容无法被 Scallop Shell 处理。这将在以后的版本中修复。
## 反编译
目前处于非常实验性的阶段。它从运行时指令转储 CSV 重建二进制文件,且仅包含已运行的指令。这*目前尚不*适用于自修改二进制文件:它保留特定地址处运行的第一条指令,因此在支持之前完全无用。理论基础已经存在,实施计划也已制定。目前,请使用标准的逆向工程工作流程。反编译器的开发是动态的,在达到工作阶段之前会不断发生变化。
## 许可证
本项目在 GNU Affero General Public License v3.0 (AGPL-3.0) 下获得许可。
你可以自由使用、修改和分发本软件。
如果你将其作为服务提供或重新分发修改后的版本,
你必须在相同的许可证下提供完整的源代码。
未来可能会提供商业重新授权。
## 商标
项目名称和标志是 SHUROKO.EXE 的商标。
在商业产品中使用名称或标志需要明确许可。
除非另有说明,本项目与任何公司没有关联、未获其认可或赞助。
## 无背书
使用本软件并不意味着作者背书。
## 贡献
通过贡献本项目,你同意贡献者许可协议 (CLA)。
CLA 允许维护者重新许可贡献,而贡献者保留
其作品的版权。标签:ARM64, Bash脚本, Capstone, DAST, GDB 替代, Ghidra 替代, LLVM, QEMU, RISC-V, TCG, UML, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 内联执行, 反编译器, 多态代码, 恶意软件分析, 架构仿真, 源码编译, 漏洞分析, 终端应用, 网络安全, 路径探测, 身份验证强制, 逆向工程, 隐私保护, 静态分析