Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CallObfuscator — Обфускация конкретных Windows API с помощью других API | Kitploit
Инструменты/GitHubGitHub/d35ha/callobfuscator
Оборонительные ИнструментыСтатический анализДинамический анализ (песочница)Обход IDS/IPSОбратная инженерияАнализ вредоносных программАнализ Бинарных Файлов
GitHubd35ha/callobfuscator

CallObfuscator

Обфускация конкретных Windows API с помощью других API

Репозиторий
1.0k1745 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CallObfuscator

Обфусцируйте (скрывайте) импорты PE от средств статического/динамического анализа.

Теория

Это довольно просто. Допустим, я использовал VirtualProtect и хочу обфусцировать его с помощью Sleep. Инструмент изменит IAT так, что переход (thunk), указывающий на VirtualProtect, будет указывать на Sleep. При выполнении файла загрузчик Windows загрузит Sleep вместо VirtualProtect и передаст управление точке входа. Оттуда выполнение будет перенаправлено на шелл-код, который инструмент разместил ранее, чтобы найти адрес VirtualProtect и использовать его для замены адреса Sleep, который был назначен загрузчиком.

Как использовать

  • Его можно включить непосредственно как библиотеку, см. следующий фрагмент (на основе примера), также вы можете взглянуть на cli.cpp.
root@kitploit:~
#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 <input file> <out file> [config file]
    Файл конфигурации содержит необходимые обфускации (dll, символы, ...).
    Вот шаблон содержимого файла конфигурации
root@kitploit:~
; Template for the config file:
; 	* Sections can be written as:
; 		[dll_name]
; 		old_sym=new_sym
;	* The dll name is case insensitive, but 
;	the old and the new symbols are not.
; 	* You can use the wildcard on both the
; 	dll name and the old symbol.
; 	* You can use '#' at the start of
; 	the old or the new symbol to flag 
; 	an ordinal.
;	* The new symbol should be exported
;	by the dll so the windows loader can resolve it.
; For example:
; 	* Obfuscating all of the symbols
;	imported from user32.dll with ordinal 1600.
[user32.dll]
*=#1600
;	* Obfuscating symbols imported from both
;	kernel32.dll and kernelbase.dll with Sleep.
[kernel*.dll]
*=Sleep
;	* Obfuscating fprintf with exit.
[*]
fprintf=exit

Пример

Соберите этот пример кода

root@kitploit:~
#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 (на самом деле подойдет любой API из kernel32, даже если он вообще не импортирован).
Используемые конфигурации:

root@kitploit:~
[kernel32.dll]
SetLastError=Beep
GetLastError=GetACP

Вот вывод (также вы можете использовать библиотеку напрямую, как показано выше).

pic2

Снова взглянем на импорты kernel32

pic3

Нет упоминаний SetLastError или GetLastError
Подтверждение того, что оба файла будут работать корректно

pic4

Воздействие

Декомпилятор IDA HexRays

pic5

Отладчик IDA

pic6

Ghidra

pic7

ApiMonitor

pic8

Это связано с тем, что все инструменты статического анализа зависят от имени API, записанного в IAT, которым можно манипулировать, как показано.
Для ApiMonitor, из-за использования перехвата IAT, существует та же проблема.

С другой стороны, для таких инструментов, как x64dbg, отображаемые имена API будут зависеть только от того, что действительно вызывается (а не от того, что записано в IAT).

pic9

Дополнительно

  • Дамп обфусцированного PE из памяти не деобфусцирует его, потому что изменённый IAT останется прежним.
  • Основная цель этого инструмента — усложнить процесс анализа (замедлить его).
  • Можно обфусцировать любой импортированный символ (по имени или по порядковому номеру) другим символом (именем или порядковым номером).
  • Шелл-код выполняется как первый TLS-обратный вызов для обработки обфусцированных символов, необходимых для других TLS-обратных вызовов, до выполнения точки входа.
  • Шелл-код поставляется в виде кода на C, который генерируется при компиляции инструмента для упрощения его редактирования.
  • Имена обфусцированных символов разрешаются по хешу, а не напрямую по имени.
  • Инструмент отключает перемещения (relocations) и удаляет любые отладочные символы.
  • Инструмент создает новый раздел rwx с именем .cobf для хранения шелл-кода и других необходимых данных.
  • Его можно использовать несколько раз на одном и том же обфусцированном PE.
  • Протестировано только на Windows 10 x64.
  • Получить исходный код: git clone https://github.com/d35ha/CallObfuscator.
  • Скачать бинарные файлы из раздела релизов.

Планы

  • Обфускация шелл-кода (возможно, с помощью obfusion).
  • Поддержка символов, загружаемых с задержкой (delay-loaded).
  • Минимизация размера создаваемого раздела.
  • Хеширование во время компиляции.
  • Улучшенное тестирование.
Скачать инструмент