This commit is contained in:
author
2025-11-08 21:00:06 +08:00
parent 95a4182500
commit fc176f1b7d
1793 changed files with 2099698 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
### ShellCode 免杀方法
**1. 改变 ShellCode 特征**
这是最基本也是最重要的一步。原始的 ShellCode 往往包含固定的、已知的字节序列,这些序列很容易被杀毒软件识别
- **编码 (Encoding)** 使用各种编码技术,如 **XOR、Base64、RC4** 等,对 ShellCode 进行加密或混淆。在运行时,ShellCode 会被解码器(Decoder)解密后再执行。这样,静态文件中的 ShellCode 就不再是原始字节,从而绕过了静态查杀
- **多态/自修改 (Polymorphism)** 每次生成 ShellCode 时,都使用不同的加密密钥和解码器代码。这样,即使 ShellCode 本身相同,其外部封装也总是变化的,使签名查杀变得困难
- **分块加载 (Chunking)** 将 ShellCode 分割成多个小块,分散存储在不同的位置。在运行时,再将这些小块按顺序加载到内存中,重新组装成完整的 ShellCode。这可以避免单个大块的恶意代码被检测
**2. 改变 ShellCode 加载方式**
仅仅改变 ShellCode 的静态特征是不够的,还需要改变其在内存中的加载和执行方式,绕过行为检测
- **反射式 DLL 注入:** 不将 ShellCode 直接写入内存,而是将它作为 DLL 文件反射性地加载到目标进程中。这种技术可以绕过一些基于内存特征的检测
- **内存申请方式:** 避免使用像 `VirtualAlloc` 这样常用的 API 函数来分配可执行内存。可以尝试使用其他函数,如 `HeapAlloc`,或者通过一些更隐蔽的手段来获取可执行内存
- **API 函数混淆:** 恶意软件通常会调用一些特定的敏感 API 函数,如 `CreateProcess``WriteProcessMemory` 等。可以通过动态解析、哈希查找等方式,避免在代码中直接写出这些函数名,而是运行时再解析得到地址。这可以绕过一些基于 API 调用的行为检测
- **白加黑 (LOLBAS)** 利用 Windows 系统中已有的合法程序(如 `rundll32.exe`, `certutil.exe` 等)来加载和执行恶意代码。这种方式利用了“白名单程序”的信任,使恶意行为看起来像是合法操作
File diff suppressed because it is too large Load Diff
+45
View File
@@ -0,0 +1,45 @@
### 如何去过国内的杀软
**1. 静态特征码检测**
静态检测是指杀软在不运行程序的情况下,通过扫描文件本身的特征来判断是否为恶意软件。这包括特定的代码片段、哈希值、字符串等
**应对方案:**
- **混淆代码**:使用混淆器(Obfuscator)或手动对代码进行重构。这包括:
- **花指令(Junk Instructions)**:在核心代码中插入大量无用的指令(如 `NOP`),改变代码结构,使得杀软无法匹配其已知的恶意代码特征码
- **控制流平坦化(Control Flow Flattening**:将程序的正常执行流程打乱,通过一个大的 `switch``if/else` 结构来控制跳转,让杀软的分析引擎难以理解其逻辑
- **字符串加密**:将代码中使用的敏感字符串(如 URL、文件名、注册表键)进行加密,只在运行时解密使用。这可以有效绕过基于字符串的特征码检测
- **改变编译参数**:使用不同的编译器、编译选项,或更改代码,使得生成的机器码与杀软数据库中的特征码不匹配
**2. 动态行为监控**
动态检测是在程序运行时,监控其行为是否具有恶意倾向。国内杀软的启发式引擎(Heuristic Engine)非常强大,能检测到如进程注入、文件加密、网络通信等行为
**应对方案:**
- **延迟执行**:程序启动后不立即执行恶意行为,而是等待一段较长时间(例如几分钟或几小时),或等待特定的用户操作(如鼠标移动、键盘输入)后,再执行恶意代码。这能有效绕过沙箱环境的短时分析
- **反沙箱/反虚拟机**:通过代码检测自己是否运行在沙箱或虚拟机中。如果发现是,就停止恶意行为或直接退出。常用的检测手段包括:
- 检查 CPU 特征(`cpuid` 指令)
- 检测特定虚拟机文件或注册表键
- 测量指令执行时间差异
- **模块化和分阶段加载**:将恶意功能拆分成多个模块。程序本身可能只是一个无害的加载器,它在运行时从远程服务器下载或解密其他恶意模块。这使得杀软难以在初始阶段就判断其恶意性
**3. 云查杀与文件信誉库**
国内杀软普遍使用云查杀技术,将可疑文件上传到云端进行分析,并维护一个庞大的恶意文件哈希值数据库
**应对方案:**
- **文件加密和加壳**:使用自定义的加密算法对可执行文件进行加密,并用一个小的解密器(Loader)来启动它。这会改变文件的哈希值,绕过哈希值比对。这种技术就是**加壳(Packing)**
- **代码签名**:使用合法的代码签名证书对恶意软件进行签名。虽然这不能保证免杀,但可能会提高杀软的信任度,使得一些低级别的检测失效。当然,使用窃取的或不合法的证书是有风险的
- **文件指纹变化**:每次生成样本时都进行微小的改动,比如添加不同的编译时间戳、修改常量值等,以确保每个样本的哈希值都是唯一的
**4. 驱动级与内核级对抗**
高级的杀软会使用内核驱动来监控系统活动,恶意软件也需要通过内核级别的技术进行对抗
**应对方案:**
- **Rootkit 技术**:利用 Rootkit 技术在内核级别隐藏自己的进程、文件和网络连接,使得杀软难以发现
- **挂钩(Hooking**:挂钩杀软驱动的 API,拦截其对恶意行为的监控。当然,这需要非常深厚的内核编程知识
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
### 分离免杀和单体免杀有啥区别,为什么要分离
**什么是分离免杀和单体免杀?**
首先,让我们来定义这两个概念:
- **单体免杀(All-in-One Evasion)**:指的是将所有恶意功能(如键盘记录、远程控制、文件加密等)和免杀代码**打包在一个可执行文件**中。这个文件一旦运行,就会在内存中完成所有恶意行为,而不需要外部依赖
- **分离免杀(Separated Evasion)**:也叫“分阶段免杀”或“多阶段免杀”。它将恶意软件的核心功能与启动器(或称加载器、Loader)**分离开来**。启动器本身是一个非常小的、看起来无害的可执行文件,其唯一任务是在运行时从远程服务器下载或从加密资源中解密并加载真正的恶意负载(Payload),然后执行它
**为什么要分离?**
分离免杀之所以成为主流,是因为它能更有效地对抗现代杀毒软件,特别是云查杀和静态分析技术
**1. 绕过静态特征码检测**
这是分离免杀最重要的原因。杀毒软件的静态引擎会扫描文件中的恶意代码特征码
- 对于**单体免杀**,所有恶意代码都集中在一个文件中。尽管可以使用混淆技术,但如果杀毒软件的特征库更新得足够快,或者其分析引擎足够强大,很容易在不执行文件的情况下就识别出其中的恶意代码
- 对于**分离免杀**,启动器本身是**干净的**。它不包含任何恶意代码,只是一段用于下载和解密的“无害”代码。因此,当用户下载或运行时,杀毒软件的静态引擎很难将其识别为恶意文件。真正的恶意负载在运行时才会被下载或解密到内存中,而此时静态引擎已经无法对它进行扫描
**2. 规避云查杀和哈希比对**
现代杀毒软件的云查杀系统会收集可疑文件的哈希值
- 如果一个**单体免杀**样本被捕获,它的哈希值会立即被添加到云端黑名单。即使你对它做了微小的修改,如果杀软使用了模糊哈希,也可能被识别
- 如果使用**分离免杀**,你可以对启动器进行频繁的微小改动(例如修改时间戳、添加无意义的字节),这会生成**唯一的哈希值**。即使一个启动器被识别,它也不会影响你接下来生成的其他启动器。真正的恶意负载可以保持不变,因为它是动态加载的,不会直接暴露在文件中
**3. 增加逆向分析的难度**
分离免杀为逆向工程增加了额外的门槛
- 逆向工程师拿到的是一个启动器,如果想要分析完整的恶意功能,他必须首先**脱壳**(如果有加密)并**捕获**运行时下载的恶意负载
- 启动器可能会使用反调试、反虚拟机等技术来阻止分析人员在受控环境中运行它,这进一步增加了分析的难度
File diff suppressed because it is too large Load Diff
+27
View File
@@ -0,0 +1,27 @@
### 做过其他免杀吗,比如结合 CS 和 MSF 的
**MSFvenom 生成的 Payload 如何免杀?**
`msfvenom` 是一个强大的命令行工具,用于生成各种 Payload。它自带了多种编码器(Encoder),可以对 Payload 进行编码来绕过简单的静态特征码检测
- **编码器(Encoders)**:最简单的免杀方法是使用 `msfvenom` 自带的编码器,例如 `shikata_ga_nai`。这个编码器会对 Shellcode 进行多态编码,使得每次生成的 Payload 都不一样。但是,这种方法对于现代杀软来说已经不够了,因为杀软可以识别出编码器本身的行为模式
- **利用模板文件(Templates)**:你可以使用 `-x` 参数指定一个合法的可执行文件(例如 `notepad.exe`)作为模板,`msfvenom` 会将 Payload 注入到这个文件中。这样可以改变文件哈希,并且文件看起来像一个正常的程序
- **自定义 Shellcode 和加载器(Loader**
- **生成纯 Shellcode**:使用 `-f raw``-f bin` 参数生成原始的 Shellcode 二进制文件,不带任何可执行文件头
- **编写自定义加载器**:用 C++、C# 或 PowerShell 等语言编写一个加载器,它的任务是将 Shellcode 加载到内存并执行
- **混淆加载器代码**:对加载器的代码进行混淆,比如使用花指令、字符串加密,以及反沙箱技术,来绕过杀软对加载器的静态检测
- **内存执行**:加载器可以使用一些技巧,如 `VirtualAlloc``WriteProcessMemory``CreateThread` 等 API,来分配内存、将 Shellcode 写入,并在新线程中执行。由于 Shellcode 只是数据,不直接在文件中,静态杀软很难发现它
**Cobalt Strike 生成的 Payload 如何免杀?**
Cobalt Strike 生成的 Beacon Payload 同样非常强大,但它的默认 Payload 也会被杀软识别。CS 的免杀需要更高级的技巧
- **分离 Payload 和 Stager**CS 的 Beacon Payload 通常分为两个阶段:一个小的 `Stager` 和一个大的 `Stageless` Payload。`Stager` 的任务是下载 `Stageless` Payload。你可以只生成 `Stager`,并对其进行混淆,而将 `Stageless` Payload 托管在自己的服务器上
- **使用自定义的 Shellcode 加载器(Loader**
- CS 可以导出原始的 Shellcode。你可以使用前面提到的方法,用自定义的加载器来加载它
- 很多攻击者会使用**反射式 DLL 注入**来加载 Payload。他们将 Shellcode 封装成一个 DLL,然后通过进程注入技术将 DLL 加载到另一个无害的进程中,以隐藏其行为
- **绕过行为检测**:CS 的 Beacon 在网络通信、权限提升等方面有很多特征,可能会被杀软的行为监控引擎捕获为了绕过这些检测:
- **混淆网络通信**:使用自定义的通信协议或加密方式,使得流量看起来不像 Beacon 的默认流量
- **进程注入的规避**:使用更隐蔽的进程注入技术,例如直接在内存中执行,而不是写入磁盘文件
- **使用合法的证书和签名**:对 Payload 文件进行代码签名,增加其可信度
- **使用第三方工具**:除了自己编写加载器,还有很多开源或商业的工具专门用于混淆和打包 MSF/CS 的 Shellcode,例如 `sliver``Mythic` 等。这些工具通常包含了更高级的免杀技术
+20
View File
@@ -0,0 +1,20 @@
# 网安面试题(涵盖护网、红队、逆向、二进制)
上万道安全面试题已经全部为您划分好,适用于网络安全所有岗位!!!
HR:请问…………
我:叽里咕噜说啥呢,看看八股文上写了没
Summary.md 是目录噢!!)
**🙏 特别感谢名单**
在整理和完善本项目的过程中,以下朋友给予了宝贵的帮助与支持,在此表示诚挚的感谢!(排名不分先后)
- **@用户名1** —— 提供了大量安全面试题方向的补充
- **@用户名2** —— 纠正了多个问题的答案与表述
- **@用户名3** —— 贡献了真实面试题经验分享
- **@用户名4** —— 对内容结构与目录提出改进建议
如果您也愿意参与本项目,欢迎通过 **微信: XR3327026244** 投稿面试题或反馈问题,我们会在后续版本中加入您的名字
File diff suppressed because it is too large Load Diff