EgeBalci/sgn
GitHub: EgeBalci/sgn
SGN 是一款用 Go 重写的多态 shellcode 编码器,在经典 Shikata ga nai 基础上新增 64 位支持、decoder stub 混淆和伪随机编码,使编码后的 payload 在静态检测下与随机数据无异。
Stars: 1933 | Forks: 243
SGN 是一个多态二进制编码器,用于 offensive security 目的,例如生成静态无法检测的二进制 payload。它使用加法反馈循环对给定的二进制指令进行编码,类似于 [LSFR](https://en.wikipedia.org/wiki/Linear-feedback_shift_register)。本项目是对[原版 Shikata ga nai](https://github.com/rapid7/metasploit-framework/blob/master/modules/encoders/x86/shikata_ga_nai.rb) 的 Golang 重写,并进行了许多改进。
## 如何实现?为什么?
对于 offensive security 社区而言,原版 shikata ga nai encoder 被认为是目前最好的 shellcode 编码器。但多年来,安全研究人员发现了静态检测该编码器的几个缺陷(相关工作:[FireEye 文章](https://www.fireeye.com/blog/threat-research/2019/10/shikata-ga-nai-encoder-still-going-strong.html))。本项目的主要动机是创建一个更好的编码器,将给定的二进制文件编码到与完全随机数据无异的程度,使得检测 decoder 的存在成为不可能。借助 [keystone](http://www.keystone-engine.org/) 汇编器库,实现了以下改进。
- [x] 64 位支持。`终于可以正确编码 x64 shellcodes 了!`
- [x] 更小的新 decoder stub。`LFSR 密钥缩减至 1 字节`
- [x] 使用伪随机 schema 编码 stub。`Decoder stub 也使用伪随机 schema 进行编码`
- [x] 无可见的循环条件 `Stub 在解码自身时完全不使用任何循环条件!!`
- [x] Decoder stub 混淆。`使用 keystone 添加了随机垃圾指令生成器`
- [x] 安全寄存器选项。`不会破坏任何寄存器(可选 preamble,可能会降低多态性)`
## 安装
你可以从[这里](https://github.com/EgeBalci/sgn/releases)获取预编译的二进制文件。要从源代码构建,请按照以下步骤操作。
**依赖项:**
构建源代码的唯一依赖是 [keystone engine](https://github.com/keystone-engine/keystone),请按照[这些](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE.md)说明安装该库。一旦系统上安装了 libkeystone,只需运行 go install 即可 ツ
```
go install github.com/EgeBalci/sgn@latest
```
***DOCKER 安装***
[](https://hub.docker.com/r/egee/sgn/)
```
docker pull egee/sgn
docker run -it egee/sgn
```
**用法**
`-h` 参数已经解释得很清楚了,如果你想了解幕后的运行情况,请使用 `-v` `( ͡° ͜ʖ ͡°)_/¯`
标签:DNS 反向解析, DNS 解析, EVTX分析, Golang, Keystone引擎, SGN, Shellcode, Shikata Ga Nai, x86, 中高交互蜜罐, 二进制编码, 代码混淆, 反检测, 多态编码器, 安全测试, 安全编程, 恶意软件开发, 技术调研, 攻击性安全, 数据展示, 日志审计, 红队, 网络安全, 请求拦截, 隐私保护