Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
zig-pe — Zigで書かれたリフレクティブPEローダー。ネイティブおよび.NETのPEファイルをメモリから直接読み込み、実行します。 | Kitploit
ツール/GitHubGitHub/thoxy67/zig-pe
エクスプロイトポストエクスプロイトペネトレーションテストレッドチーミングペイロード開発バイナリエクスプロイト
GitHubthoxy67/zig-pe

zig-pe

Zigで書かれたリフレクティブPEローダー。ネイティブおよび.NETのPEファイルをメモリから直接読み込み、実行します。

リポジトリを見る
67787ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

zig-pe

Zigで書かれたリフレクティブPEローダー。ネイティブおよび.NETのPEファイルをメモリから直接ロードして実行します。

特徴

PEローディングパイプライン

  • DOSヘッダーとNTヘッダー(PE32/PE32+を実行時に判別)をパース
  • セクションを割り当てられたメモリにマッピング
  • インポートの解決(名前および序数、PE32は4バイト、PE32+は8バイトのサンク)
  • ベースリロケーションの適用(HIGHLOW、DIR64、ARM_MOV32、THUMB_MOV32)
  • 遅延インポートの解決(DataDirectory[13]、最新RVA形式)
  • 例外ハンドラの登録(RtlAddFunctionTable、x64/ARM64のみ)
  • セクションごとのメモリ保護設定
  • TLSコールバックの呼び出し(DLL_PROCESS_ATTACH)
  • CreateThreadによるエントリポイントの実行
  • クリーンアップ(例外テーブルの登録解除、メモリ解放)

高度なセキュリティ機能

  • セキュリティクッキーの初期化(__security_cookie、/GSバッファセキュリティ用)
  • CFG(Control Flow Guard)- SetProcessValidCallTargetsで有効なコールターゲットを登録
  • SxS/アクティベーションコンテキスト - GUIアプリケーション用に埋め込みマニフェストをアクティブ化
  • Bound Import Directoryの無効化

エクスポートテーブルの解決

ロードされたPEイメージからエクスポートを解決するためのユーティリティ関数:

  • getExportByName(base, ntheaders, name) — 名前で解決
  • getExportByOrdinal(base, ntheaders, ordinal) — 序数で解決

フォワードされたエクスポートも自動的に処理し、対象のDLL(例:"NTDLL.RtlAllocateHeap")をロードしてntdll.dll内の実際の関数に解決します。

APIセット解決

PEBのApiSetMapを使用して、Windows APIセット(api-ms-win-*、ext-ms-win-*)を実際のホストDLLに自動的に解決します。これにより、仮想APIセットDLLからインポートしているPEをロードできます。

ユーティリティ関数

  • utils.detect_platform(buffer) — PEが32ビットか64ビットかを検出
  • utils.is_dotnet_assembly(ntheaders) — PEが.NETアセンブリかどうかを確認
  • utils.getDotNetVersion(buffer) — メタデータから.NETランタイムバージョン文字列を抽出
  • utils.rvaToFileOffset(buffer, rva) — RVAをファイル内の生のオフセットに変換

互換性

  • ネイティブコンパイル済みバイナリの実行(x86、x86_64、ARM、ARM64)
  • CLRホスティングによる.NETコンパイル済みバイナリの実行
  • コマンドライン引数のネイティブおよび.NET実行ファイルへの引き渡し
  • アーキテクチャの検証(PEのビット数がホストプロセスと一致すること)

対応マシンタイプ

アーキテクチャマシンコードビット数
i3860x014c32ビット
AMD640x866464ビット
IA640x020064ビット
ARM (ARMNT)0x01C432ビット
ARM640xAA6464ビット

前提条件

  • Zigコンパイラ(最新版推奨)
  • Windows OS(このプロジェクトはWindows固有のAPIを使用)

プロジェクトのビルド

  1. リポジトリをクローン:

    git clone https://github.com/Thoxy67/zig-pe.git
    cd zig-pe
    
  2. プロジェクトをビルド:

    zig build
    

ビルドオプション

zig build -Ddotnet=false  # .NETサポートを無効化(デフォルトで有効)

ビルドターゲット

zig build                 # すべてのターゲットをビルド
zig build run-putty64     # 64ビットネイティブPEの例を実行
zig build run-putty32     # 32ビットネイティブPEの例を実行
zig build run-dotnet      # .NETアセンブリの例を実行
zig build test            # ユニットテストを実行

使用法

基本使用法(埋め込みPE)

const pe = @import("pe");

pub fn main() !void {
    // 埋め込まれたPEファイルをロードして実行
    try pe.RunPE.init(@embedFile("bin/app.exe")).run();
}

コマンドライン引数付き

const pe = @import("pe");

pub fn main() !void {
    var loader = pe.RunPE.init(@embedFile("bin/app.exe"));
    try loader.runWithArgs(&.{ "arg1", "arg2", "arg3" });
}

ファイルからのロード

const std = @import("std");
const pe = @import("pe");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    const file_content = try std.fs.cwd().readFileAlloc(
        allocator,
        "path/to/executable.exe",
        std.math.maxInt(usize),
    );
    defer allocator.free(file_content);

    try pe.RunPE.init(file_content).run();
}

ロードしたPEからのエクスポート解決

const pe = @import("pe");

// DLLをメモリにロードした後...
const base: [*]const u8 = @ptrCast(loaded_base);
const ntheaders = // ... NTヘッダーを取得

// 名前で解決
if (pe.getExportByName(base, ntheaders, "ExportedFunction")) |func_ptr| {
    const func: *const fn () void = @ptrCast(@alignCast(func_ptr));
    func();
}

// 序数で解決
if (pe.getExportByOrdinal(base, ntheaders, 42)) |func_ptr| {
    // 関数ポインタを使用
}

引数引き渡しの仕組み

  • ネイティブPE:PEBのCommandLineをパッチすることで引数を渡します。これにより、GetCommandLineW()が指定された引数を返すようになります。
  • .NETアセンブリ:CLR呼び出しを介してMain(string[] args)に直接引数が渡されます。

セキュリティに関する考慮事項

このプロジェクトは任意のコードをロードして実行することを伴うため、潜在的に危険です。信頼できるPEファイルのみを使用し、管理された環境でこのローダーを利用してください。著者らは、本ソフトウェアの誤用や損害について一切の責任を負いません。

コントリビューション

zig-peへのコントリビューションを歓迎します!プルリクエストの送信、イシューの作成、情報の拡散を自由に行ってください。

  1. プロジェクトをフォーク
  2. フィーチャーブランチを作成(git checkout -b feature/AmazingFeature)
  3. 変更をコミット(git commit -m 'Add some AmazingFeature')
  4. ブランチにプッシュ(git push origin feature/AmazingFeature)
  5. プルリクエストを開く

ライセンス

このプロジェクトはMITライセンスの下でライセンスされています。詳細はLICENSEファイルを参照してください。

謝辞

  • Zigプログラミング言語コミュニティ
  • PEファイルフォーマットのドキュメント作成に貢献された方々

免責事項

このプロジェクトは教育目的のみで提供されています。PEファイルをロードして実行する前に、必要な権利と許可を取得していることを確認してください。

ツールをダウンロード