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を操作して、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 は存在しません
2つのファイルが正常に動作することを確認します

pic4

影響

IDA HexRays Decompiler

pic5

IDA Debugger

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 で取得してください。
  • バイナリは リリースセクション からダウンロードしてください。

TODO

  • シェルコードの難読化(おそらく obfusion を使用)。
  • 遅延ロードシンボルのサポート。
  • 作成されるセクションサイズの最小化。
  • コンパイル時ハッシュ化。
  • テストの改善。
ツールをダウンロード