Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CallObfuscator — 특정 Windows API를 다른 API로 난독화합니다. | Kitploit
도구/GitHubGitHub/d35ha/callobfuscator
Defensive ToolsStatic AnalysisDynamic Analysis (Sandboxing)IDS/IPS EvasionReverse EngineeringMalware AnalysisBinary Analysis
GitHubd35ha/callobfuscator

CallObfuscator

특정 Windows API를 다른 API로 난독화합니다.

저장소 보기
1.0k17445년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CallObfuscator

정적/동적 분석 도구로부터 PE 임포트를 난독화(숨김)합니다.

이론

이는 매우 간단합니다. VirtualProtect를 사용했고 이를 Sleep으로 난독화하고 싶다고 가정해 보겠습니다. 이 도구는 IAT를 조작하여 VirtualProtect를 가리키는 썽크 대신 Sleep을 가리키도록 합니다. 이제 파일을 실행할 때 Windows 로더는 VirtualProtect 대신 Sleep을 로드하고, 엔트리 포인트로 실행을 이동시킵니다. 거기서부터 실행은 쉘코드로 리디렉션되며, 도구가 미리 배치한 쉘코드가 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로 난독화해 보겠습니다(실제로 kernel32의 모든 api는 전혀 임포트되지 않아도 괜찮습니다).
사용된 구성은 다음과 같습니다

root@kitploit:~
[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가 동일하기 때문입니다.
  • 이 도구의 주요 목적은 분석 과정을 방해하는 것입니다(속도를 늦춤).
  • 임포트된 모든 심볼(이름 또는 서수)을 다른 심볼(이름 또는 서수)로 난독화할 수 있습니다.
  • 쉘코드는 첫 번째 TLS 콜백으로 실행되어 엔트리 포인트가 실행되기 전에 다른 TLS 콜백에 필요한 난독화된 심볼을 처리합니다.
  • 쉘코드는 C 코드로 제공되며, 도구가 컴파일될 때 생성되어 편집을 용이하게 합니다.
  • 난독화된 심볼 이름은 이름이 아닌 해시로 확인됩니다.
  • 이 도구는 재배치를 비활성화하고 디버그 심볼을 제거합니다.
  • 이 도구는 쉘코드 및 기타 필요한 데이터를 저장하기 위해 .cobf라는 새로운 rwx 섹션을 생성합니다.
  • 동일한 난독화된 PE에 여러 번 사용할 수 있습니다.
  • Windows 10 x64에서만 테스트되었습니다.
  • git clone https://github.com/d35ha/CallObfuscator로 소스를 가져옵니다.
  • 릴리스 섹션에서 바이너리를 다운로드합니다.

할 일

  • 쉘코드 난독화 (아마도 obfusion 사용).
  • 지연 로드된 심볼 지원.
  • 생성된 섹션 크기 최소화.
  • 컴파일 시간 해싱.
  • 더 나은 테스트.
도구 다운로드