Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CallObfuscator — 使用不同的API混淆特定的Windows API | Kitploit
工具/GitHubGitHub/d35ha/callobfuscator
防御工具静态分析动态分析 (沙盒)IDS/IPS规避逆向工程恶意软件分析二进制分析
GitHubd35ha/callobfuscator

CallObfuscator

使用不同的API混淆特定的Windows API

查看仓库
1.0k174185年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CallObfuscator

混淆(隐藏)PE导入,使其不被静态/动态分析工具检测到。

原理

这相当直接,假设我使用了VirtualProtect,并想用Sleep来混淆它,该工具会操纵IAT,使得指向VirtualProtect的thunk转而指向Sleep,这样在文件执行时,Windows加载程序会加载Sleep而不是VirtualProtect,并将执行权转移到入口点,从那里执行将被重定向到工具之前放置的shellcode,以找到VirtualProtect的地址,并用它替换之前由加载程序分配的Sleep的地址。

使用方法

  • 可以直接作为库包含,参见以下代码片段(基于示例),你也可以查看cli.cpp。
#include <cobf.hpp>

int main() {
	cobf obf_file = cobf("sample.exe");
	obf_file.load_pe();
	obf_file.obf_sym("kernel32.dll", "SetLastError", "Beep");
	obf_file.obf_sym("kernel32.dll", "GetLastError", "GetACP");
	obf_file.generate("sample_obfuscated.exe");
	obf_file.unload_pe();
	return 0;
};
  • 也可以作为命令行工具使用,提供输入的PE路径、输出的PE路径,以及可选的配置文件路径(默认为config.ini)。
    cobf.exe <输入文件> <输出文件> [配置文件]
    配置文件包含所需的混淆信息(dll、符号等)。
    以下是配置文件内容的模板
; 配置文件模板:
; 	* 节可以写成:
; 		[dll名称]
; 		旧符号=新符号
;	* dll名称不区分大小写,但
;	旧符号和新符号是区分大小写的。
; 	* 可以在dll名称和旧符号上使用通配符。
; 	* 可以在旧符号或新符号的开头使用'#'来标记
;	序号。
;	* 新符号必须由dll导出,以便Windows加载程序可以解析它。
; 例如:
; 	* 将user32.dll中所有导入的符号混淆为序号1600。
[user32.dll]
*=#1600
;	* 将kernel32.dll和kernelbase.dll中导入的符号都混淆为Sleep。
[kernel*.dll]
*=Sleep
;	* 将fprintf混淆为exit。
[*]
fprintf=exit

示例

编译以下代码示例

#include <windows.h>
#include <stdio.h>

int main() {
	SetLastError(5);
	printf("Last error is %d\n", GetLastError());
	return 0;
};

编译后,kernel32的导入看起来是这样的

pic1

现在让我们将SetLastError和GetLastError分别混淆为Beep和GetACP(实际上kernel32中的任何API都可以,即使它根本没有被导入)。
使用的配置如下

[kernel32.dll]
SetLastError=Beep
GetLastError=GetACP

以下是输出结果(你也可以直接使用上面的库)。

pic2

再来看一下kernel32的导入

pic3

不再有SetLastError或GetLastError的身影
确认两个文件都能正常工作

pic4

影响

IDA HexRays反编译器

pic5

IDA调试器

pic6

Ghidra

pic7

ApiMonitor

pic8

这是因为所有静态分析工具都依赖于IAT中写入的API名称,而它就像展示的那样可以被操纵。
对于ApiMonitor,由于使用了IAT挂钩,也存在同样的问题。

另一方面,对于x64dbg这样的工具,显示的API名称仅取决于实际调用的内容(而不是IAT中写的内容)。

pic9

补充说明

  • 从内存中转储混淆后的PE并不会使其去混淆,因为被操纵的IAT仍然保持不变。
  • 该工具的主要目的是扰乱分析过程(使其变慢)。
  • 可以将任何导入的符号(按名称或序号)混淆为另一个符号(名称或序号)。
  • shellcode作为第一个TLS回调执行,以处理入口点执行之前其他TLS回调所需的混淆符号。
  • shellcode以C代码形式提供,在工具编译时生成,以便于编辑。
  • 混淆的符号名称通过哈希而不是直接名称来解析。
  • 该工具会禁用重定位并剥离所有调试符号。
  • 该工具会创建一个名为.cobf的新rwx节,用于存放shellcode和其他所需数据。
  • 可以对同一个混淆后的PE多次使用该工具。
  • 仅在Windows 10 x64上测试过。
  • 使用git clone https://github.com/d35ha/CallObfuscator获取源代码。
  • 从发布页面下载二进制文件。

TODO

  • Shellcode混淆(可能使用obfusion)。
  • 支持延迟加载的符号。
  • 最小化创建的节大小。
  • 编译时哈希。
  • 更好的测试。
下载工具