lidotcircle / ScyllaHide

Advanced usermode anti-anti-debugger. Forked from https://bitbucket.org/NtQuery/scyllahide

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ScyllaMonitor

fork from ScyllaHide

Repository Structure

  • Scylla 主要的库, 包含了 Scylla 的主要功能
  • ScyllaGUI 对应Scylla功能的GUI, 使用Dear ImGui构建界面
  • ScyllaStandalone ScyllaMonitor的 exe 可执行文件版本
  • InjectorCLI ScyllaMonitor的命令行版本
  • asplugin ScyllaMonitor的插件版本
  • sexchange 用在DLL注入的数据结构, 注入的DLL可以通过这个结构来获取ScyllaMonitor日志UDP端口、配置等信息
  • slogger ScyllaMonitor的日志系统
  • smalloc 基于VirtualAlloc的简单内存分配器, 由于内存注入的DLL无法初始化vcrt, 所以需要用这个库。所以编写用于内存注入的DLL时, 使用这个库的函数分配内存, 例子见MonitorLibrary
  • sutils 常用的工具函数
  • HookLibrary 包含反反调试Hook函数的DLL, 来自ScyllaHide, 这个库内置在ScyllaMonitor中
  • MonitorLibrary 一些系统函数的Hook函数, 待完善, 这个库也内置在ScyllaMonitor中
  • ScyllaTest 测试用的 exe 可执行文件, 用来测试ScyllaMonitor的功能, PEB反反调试
  • 3rdparty 第三方库

Build

使用CMake构建生成工具, 需要安装Visual Studio, 使用nmake进行构建
注意: 构建前需要拉取所有的子仓库

$ vcvars32           # or vcvars64 for 64bit version
$ mkdir build && cd build
$ cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ..
$ nmake

Configuration

配置文件 scylla.yaml 是个 YAML 文件, 主要分为几个模块, 下面简要说明比较重要的

DLL Injection

DLL 注入模块可以选择多个 DLL 文件进行注入, 可选的方式是 远程线程注入内存注入. 远程线程注入在调试中, 或者在所有线程暂停(WIN7, WIN10可以 FIXME)时不可用, 内存注入不能运行DLL的初始化函数, 所以DLL中的初始化数据结构会处于不正确的状态.

Inline Hook

inline hook 支持正则表达式进行导出符号的指定, 当然一个正则表达式应该只匹配到DLL导出符号中的一个.
有三种语法格式:

ntdll::NtClose: antiant.dll::HookedNtClose  # 1. 导出符号
ntdll::NtClose: antiant.dll$0x333000        # 2. RVA
ntdll::NtClose: antiant.dll#0x22000         # 3. 文件偏移, 暂未实现

可以分模块指定:

ntdll.dll:
  NtClose: antianti.dll::HookedNtClose
kernel32.dll:
  OutputDebugStringA: antianti.dll::HookedOutputDebugStringA

可以直接指定内存地址

0x100000: 0x343333

Hook 的数据会被写入到 注入的DLL中, DLL可以用这些数据获得 Hook 的 Trampoline 函数(原始语义), 用法见 MonitorLibrary

About

Advanced usermode anti-anti-debugger. Forked from https://bitbucket.org/NtQuery/scyllahide

License:GNU General Public License v3.0


Languages

Language:C++ 96.7%Language:CMake 2.1%Language:C 1.0%Language:Assembly 0.1%