Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
TinyLoad — オープンソースのWindows x64 PEパッカー兼クリプター。カスタム仮想マシンで実行可能ファイルを圧縮・暗号化し、自己解凍型スタブに変換します。 | Kitploit
ツール/GitHubGitHub/iamsopotatoe-coder/tinyload
暗号化/復号化ツールペイロード生成エクスプロイトIDS/IPS回避リバースエンジニアリングシェルコードバイナリ解析シェルコード生成
GitHubiamsopotatoe-coder/tinyload

TinyLoad

オープンソースのWindows x64 PEパッカー兼クリプター。カスタム仮想マシンで実行可能ファイルを圧縮・暗号化し、自己解凍型スタブに変換します。

リポジトリを見る
180164610日前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
ウェブサイト

github-social-preview

TinyLoad v7.4 - Windows向けPEパッカー兼クライプター

build Mentioned in Awesome

TinyLoadはx64実行ファイル向けのPEクライプター/パッカーです。入力されたexeを様々な保護レイヤーでパックし、リバースエンジニアリングを防ぎます。単一の.cppファイルであり、外部依存関係は一切ありません。

動作原理

TinyLoadはペイロードを自身のコピーに追記します。パックされたexeが実行されると、ペイロードを抽出して復号し、元のファイルをディスクに書き出すことなくメモリ上で直接実行します。パックのたびにVMオペコードがランダムに変更され、それぞれ独立したキーを持つ4つのサブテーブルに配置されるため、同じビルドは2つと存在しません。

pack()パイプライン
root@kitploit:~
flowchart TD
    start["pack(in, out, vm, comp, veh, noconsole)"] --> load["loadFile(in) → orig"]
    load --> pe{"MZ + PE00 + Machine 0x8664 + NumberOfSections in 1..96?"}
    pe -->|fail| err["printf error / return false"]
    pe -->|ok| init["pay = orig    flags = 0"]
    
    init --> cdec{"--c ?"}
    cdec -->|yes| lz["flags |= 1<br/>lzPack: WINDOW=0xFFFF  MAXCHAIN=4096<br/>MAXMATCH=258  MINMATCH=3  HSIZE=65536<br/>hash4 = FNV-ish fold * 0x1000193<br/>lazy lookahead la = 1,2<br/>out = uint32le origSz + 8-token flag bytes<br/>match → varint dist, varint len-3"]
    cdec -->|no| vmq
    lz --> vmq{"--vm ?"}

    vmq -->|yes| scatter["flags |= 2<br/>Fisher-Yates 32 slots, scatter NUM_OPS=28<br/>into subtables 4x8, unused stay 0xFF<br/>opmap_enc op = tbl shl 6 OR idx"]
    scatter --> canary["canary corridor n=8, skip first 0x400 of pay<br/>canExp c = pay at off XOR prev"]
    canary --> mkvm["makeVmProgram opmap_enc, key1, key2, canary<br/>key1,key2 ← mt19937_64 TickCount64 XOR QPC<br/>opaque predicates + stream loop + canary mask"]
    mkvm --> venc["vmEncryptPayload  192-bit state<br/>k3 = 0x9E3779B97F4A7C15<br/>ks = uint8((k1 XOR k2) + k3)<br/>b = NOT(b XOR ks)<br/>k1 = rotl64(k1,11) XOR k2<br/>k2 = rotr64(k2,19) + k1 + k3<br/>k3 = k3 * phi XOR k1"]
    vmq -->|no| vehq
    venc --> vehq{"--veh ?"}

    vehq -->|yes| vflag["flags |= FLAG_VEH 4"]
    vehq -->|no| stub
    vflag --> stub["stub = loadFile GetModuleFileNameA self<br/>saveFile out, stub as host image"]

    stub --> skey["stubKey = 0x9E3779B97F4A7C15<br/>for i in 0x1000 .. min n, 0x2000:<br/>stubKey = (stubKey XOR stub i) * phi"]
    skey --> disp["prime vmRun dispKey=0 → fill g_off<br/>dispKey ← rng<br/>encOff j = uint64(g_off j) XOR dispKey"]

    disp --> tail["Tail: sig TINYLD60, origSz, packSz, flags,<br/>dispOff x28, subtables 4x8, vmCodeSz,<br/>dispKey, canary*, chunk*,<br/>payHash = SHA-256 orig first 8B"]
    tail --> hide["sig i XOR= stubKey shr 8i<br/>xorOpmap FNV-1a 0x811C9DC5 / 0x01000193<br/>feeds origSz, packSz, vmCodeSz + first 32B<br/>of vmCode and pay, per-table<br/>flags |= FLAG_CHUNK 8"]
    hide --> tenc["XOR-encode Tail fields with stubKey slices<br/>vmCode vi XOR= stubKey shr ((vi*3) and 63)"]

    tenc --> ovl["payload = vmCode || pay<br/>interleave: insert 0x00 after every 3 bytes"]
    ovl --> chunks["split into 4 chunks, shuffle physical order<br/>Tail placeholder TAIL_SERIALIZED_SZ = 419<br/>before each chunk: 128..640 RNG junk"]
    chunks --> tea["xxteaEncrypt bytes after Tail<br/>DELTA=0x9E3779B9  rounds=6+52/n<br/>remainder XOR pxKey0 xor pxKey1 xor pxKey2 xor pxKey3<br/>patch k i XOR FEEDF00D / CAFEBABE /<br/>DEADBEEF / 8BADF00D into _pxBlock<br/>between C0DE1337 and B007DEAD"]
    tea --> ser["XOR chunkOff / chunkSz / chunkOrder / chunkCnt<br/>serializeTail: 16 TLV records id + u16le sz + bytes<br/>Fisher-Yates order, LCG 1103515245+12345<br/>seed = stubKey XOR filesize<br/>append DWORD LE: tailOff XOR stubKey low 32"]

    ser --> fin{"--noconsole ?"}
    fin -->|yes| gui["OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI"]
    fin -->|no| scr
    gui --> scr["scrambleSections: cycle names<br/>.text .data .rdata .bss .idata"]
    scr --> done["saveFile out, result"]

ダウンロード

releasesからプリコンパイル済みバイナリを入手するか、自分でビルドしてください。

ソースからのビルド

MinGW(g++)が必要です。以下のコマンドを実行するだけです:

root@kitploit:~
g++ -o TinyLoad.exe TinyLoad.cpp -static -O2 -s

またはbuild.batを使用します。

使用方法

root@kitploit:~
TinyLoad.exe --i <input> [--o <output>] [--vm] [--c] [--veh]

--vm、--c、--vehのうち少なくとも1つが必要です。

使用例

2026-08-1118-55-14-ezgif com-video-to-gif-converter

DIE画像

die-gui-packed die-gui-entropy

圧縮

ハッシュチェーンマッチングと64KBスライディングウィンドウを備えた独自のLZ77圧縮です。圧縮が最初に実行され、その上にVM暗号化が適用されるため、圧縮データ内のパターンも隠蔽されます。

VM暗号化

スタブ内で実行される独自の28オペコード仮想マシンです。オペコードは8個ずつの4つのサブテーブルにランダムに配置され、各サブテーブルはペイロードデータから導出された異なるキーでXOR暗号化されます。1つのサブテーブルをクラックしても、28個中最大8個のオペコードしか判明しません。暗号自体はrotlとrotrによるキーミキシングを使用した128ビットストリーム暗号で、VMインタプリタ内で完全に実行されます。ペイロードはXXTEAを使用して暗号化されます。

VEHページフォールト復号

--vehを有効にすると、すべてのPEセクションページがPAGE_NOACCESSとしてマッピングされます。プログラムがページにアクセスしようとすると例外が発生し、ベクタード例外ハンドラがその1ページだけを復号して正しい保護を設定します。ウォッチドッグスレッドがバックグラウンドで実行され、200ms間アクセスされていないページを再暗号化します。どの時点でもプログラムの大部分はメモリ上で暗号化されたままなので、メモリダンプでは最近アクセスされたものだけが取得されます。

アンチダンプ

最も重要な4つのAPI(GetModuleHandleA、GetProcAddress、ExitProcess、VirtualAlloc)は、スタブ内のラッパー関数を通じてリダイレクトされます。ペイロードがロードされた後、インポートディレクトリ全体がゼロ化されるため、メモリダンプからインポートテーブルを再構築できません。

ライセンス

MIT

補足

  • リードミーに記載していない機能が多数あります。コードを自分で読むか、changelog.mdを参照してください
  • テストしたほとんどのファイルで動作します。もしあなたのファイルで壊れた場合はissueを開いてください。調査します
  • 提案や機能アイデアもissueにどうぞ
  • 使っていただけるならスターをいただけると大変助かります <3
  • はい、AVはパッカーを検出します。それは想定内です。(現在virustotalで9件の検出があります。パックしたファイルはどれも9件検出されます。内容は関係ありません)
  • マルウェアをパックするのはやめてください。正規の目的での使用を想定しています
ツールをダウンロード
フラグ機能
--i <file>パックする入力exe
--o <file>出力パス(デフォルト:input_packed.exe)
--vmVM暗号化
--cLZ77圧縮
--vehVEHページフォールト復号
--noconsoleGUIサブシステム