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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
egodeath — 暗号学的識別不能難読化技術に基づくJavaScript難読化ツール | Kitploit
ツール/GitHubGitHub/nstarke/egodeath
静的分析コード分析リバースエンジニアリング論文と研究学習と教育
GitHubnstarke/egodeath

egodeath

暗号学的識別不能難読化技術に基づくJavaScript難読化ツール

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

人気

すべて見る →

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

すべてのツールを探索

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

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

egodeath

このプロジェクトは識別不能難読化を実現していません。この製品を秘密を保護するために使用すべきではありません。それはリバースエンジニアリングを防ぐのではなく、抑止するために存在します。

Tests

images/screenshot.png 人間とLLMの両方にとってコードの読み取りと解析を極めて困難にするように設計されたJavaScript難読化ツールです。TypeScriptで記述されています。査読済みの暗号学的難読化研究の手法を実装しています。

インストール

root@kitploit:~
npm install
npm run build

CLI 使用法

root@kitploit:~
# 基本使用法
node dist/index.js input.js > output.js

# ターゲットトークン予算を指定(デフォルト: 2,000,000)
node dist/index.js --target-tokens 500000 input.js > output.js

# 最小限の難読化(小さい出力)
node dist/index.js --target-tokens 10000 input.js > output.js

# 最大の肥大化(10Mトークン)
node dist/index.js --target-tokens 10000000 input.js > output.js

# 環境変数を使用
INPUT_FILE=input.js node dist/index.js > output.js

# ヘルプ
node dist/index.js --help

オプション

オプションデフォルト説明
--target-tokens <n>2000000トークン単位のターゲット出力サイズ。小さな入力はこの制限まで肥大化されます。大きな入力は予算内に収めるために肥大化を抑えます。
--help, -hヘルプメッセージを表示

npm スクリプト

root@kitploit:~
npm run build              # TypeScriptをdist/にコンパイル
npm run start              # 難読化ツールを実行(input.jsを読み込む)
npm run test               # テストスイートを実行
npm run obfuscate-package  # npmパッケージとの互換性テストを実行

プログラム API

root@kitploit:~
const { obfuscate } = require('./dist/obfuscator');

const code = 'function add(a, b) { return a + b; }';
const obfuscated = obfuscate(code);

// オプション付き
const obfuscated = obfuscate(code, { targetTokens: 500000 });

変換パイプライン

難読化ツールは4つのフェーズで20の変換を適用します。各段階は前の段階に基づいて構築されます。

フェーズ1: セキュリティ & アンチ解析事前変換

フェーズ2: 構造的事前変換

フェーズ3: 識別子パス

フェーズ4: 事後変換

デッドコード注入

デッドコードは複数ポイントで2つの生成戦略とともに注入されます:

戦略ソース説明
テンプレートベースtransforms/deadCodeInjection.ts9つのテンプレートタイプ: ループ累積、配列構築、オブジェクト操作、文字列連結、ネスト条件、try/catch、whileカウントダウン、switch計算、ビットチェーン。テンプレートは実際のスコープ変数を参照します。

デッドコード注入ポイント:

  • CFFデッドスイッチケース(関数ごとに約30%追加、予算に応じてスケーリング)
  • 不透明述語elseブランチ
  • 非CFF関数内のスタンドアロンデッドブロック(予算制御)

研究論文の参考文献

いくつかの変換は査読済みの暗号学的難読化研究に触発されています:

検証ツール

2つの検証ツールが難読化品質を測定します。src/verification/にあります:

Null回路テスト (verification/nullCircuitTest.ts)

実際の関数と「null」関数(同じ形状で何もしない)を難読化し、14の構造的メトリクスを比較してそれらがどの程度区別可能かをスコアリングします。類似性が高いほど難読化が良好です。

root@kitploit:~
import { runNullCircuitTest } from './verification/nullCircuitTest';
const result = runNullCircuitTest(realCode, paramCount, stmtCount, threshold, targetTokens);
console.log('Similarity:', result.similarity); // 0.0-1.0

難読化不可能関数テスト (verification/unobfuscatableTests.ts)

論文1の不可能性証明からの7つのテストケースで、難読化されたコードから秘密を抽出しようと試みます:

root@kitploit:~
import { runAllTests, printSummary } from './verification/unobfuscatableTests';
console.log(printSummary(runAllTests(10000)));

テスト: ポイント関数(パスワード)、マジックナンバー、カナリア文字列、埋め込みキー、URL、正規表現パターン、制御フローシグネチャ。

出力サイズの予算

--target-tokensオプションは、デッドコード注入(主要なボリュームレバー)をスケーリングする肥大化予算を介して出力サイズを制御します。予算ゲート付き変換:

予算比率有効な変換
> 3アンチデバッグ、トリップワイヤ、CFF、不透明述語、カンママージ
> 5プロキシ関数、プロパティキーエンコード、ノイズ注入、自己完全性
> 8コンテキストウィンドウ枯渇
> 10グローバル変数エンコード

デッドコード乗数は1倍(比率30)から150倍(比率1500+)の範囲で、デッドスイッチケースと不透明述語ブランチの数とサイズを制御します。

プロジェクト構造

root@kitploit:~
src/
  index.ts              CLIエントリポイント
  obfuscator.ts         メインパイプラインオーケストレーター(20変換)
  options.ts            予算システムとオプション
  types.ts              AST型定義
  random.ts             ランダムUnicode名生成(6〜16文字、16スクリプト範囲)
  ast.ts                ASTノードファクトリ関数
  keywords.ts           動的キーワード発見(globalThis + windowパッケージ)
  globals.ts            グローバル状態管理(nullプロトタイプマップ)
  substitute.ts         識別子置換ユーティリティ
  declarations.d.ts     モジュール型宣言
  passes/
    firstPass.ts        識別子カタログ化
    secondPass.ts       識別子置換 + 文字列エンコード
    thirdPass.ts        ダミーパラメータ注入
  transforms/
    antiDebug.ts        eval("debugger")トラップ + setIntervalループ
    tripwires.ts        パンクチャードプログラム秘密入力チェック [論文 4]
    noiseInjection.ts   LPNに着想を得た算術ノイズ [論文 7]
    controlFlowFlattening.ts  while/switch + モジュラー算術ディスパッチ [論文 3]
    opaquePredicates.ts       15の常に真/偽数学述語
    proxyFunctions.ts         コールグラフ平坦化ディスパッチャ
    contextExhaustion.ts      三項/voidノイズ(LLMコンテキスト埋め用)
    commaExpressions.ts       カンマ演算子による文マージ
    globalVariableEncoding.ts グローバル用eval+replace
    propertyKeyEncoding.ts    スコープごとのレジストリを持つ計算プロパティアクセス
    numberEncoding.ts         11のビット単位/算術エンコード戦略
    selfIntegrity.ts          改ざん防止実行時チェック [論文 10]
    stringArrayExtraction.ts  連鎖XOR + 疎位置エラー [論文 2, 9]
    deadCodeInjection.ts      テンプレート + 突然変異ベースデッドコード [論文 3]
  verification/
    nullCircuitTest.ts        デッドコード品質スコアリング [論文 10]
    unobfuscatableTests.ts    秘密抽出テストケース [論文 1]
  __tests__/                  21スイートにわたる300以上の単体テスト
tools/
  obfuscate-package.ts  Webpackベースのnpmパッケージ互換性テスト
tests/
  input*.js             元のテスト入力ファイル

テスト

root@kitploit:~
# すべてのテストを実行
npm test

# 特定のテストスイートを実行
npx jest controlFlowFlattening
npx jest tripwires
npx jest noiseInjection

# npmパッケージに対するテスト(リポジトリをクローン、webpackバンドル、難読化、テスト実行)
npm run obfuscate-package                    # 10パッケージすべて
npm run obfuscate-package -- minimist semver # 特定のパッケージ

互換性テストツール

tools/obfuscate-package.tsツールは、実際のnpmパッケージに対して難読化ツールをテストします:

  1. パッケージのgitリポジトリをクローン
  2. すべての依存関係をインストール(テスト用のdevDependenciesを含む)
  3. ビルドスクリプトがある場合はパッケージをビルド
  4. webpackを使用してライブラリのメインエントリポイントを単一のCommonJSファイルにバンドル
  5. バンドルファイルに難読化ツールを実行
  6. ライブラリのメインエントリを難読化されたバンドルに置き換え
  7. ライブラリ自身のテストスイートを難読化バージョンに対して実行

出力場所

パス内容
dist/obfuscated/<package>/bundle.js各パッケージの難読化されたwebpackバンドル
dist/obfuscated/report.jsonバンドルサイズ、難読化ステータス、テスト出力を含む完全なJSONレポート

ライセンス

MIT - 著作権 2026 Nicholas Starke

ツールをダウンロード
順序変換ファイル説明
1アンチデバッグトラップtransforms/antiDebug.tseval("debugger")文と10〜20のsetIntervalループを素数間隔(5秒〜600秒)で注入し、繰り返しデバッガーブレークポイントをトリガーします。各インスタンスは一意のエンコードされた文字列を使用します。
2パンクチャードプログラムトリップワイヤtransforms/tripwires.tsパラメータハッシュを秘密の値と比較する隠されたチェックを埋め込みます。5つのハッシュパターン(ビット単位フィンガープリント、モジュラー算術、charCodeAt、数値ハッシュ、typeof+length)。秘密の入力に対してサイレントな状態破壊、ビジーループ、または例外をスローします。 [論文 4]
3LPNノイズ注入transforms/noiseInjection.ts算術計算の分割パスを通じてランダムノイズを追加およびキャンセルします。6つのパターン: add/sub、XOR、mul/div、split dual-variable、computed hash-chain、bit-rotate。中間値は完全なキャンセルを追跡しない限り無意味です。 [論文 7]
順序変換ファイル説明
4制御フロー平坦化transforms/controlFlowFlattening.ts関数本体を while(true) { switch((_s * P) % M) { ... } } 状態機械に変換し、モジュラー算術ディスパッチを使用 — ケース値は (stateId * multiplier) % modulus によりランダムな素数パラメータでエンコードされます。 [論文 3]
5不透明述語transforms/opaquePredicates.ts常にtrueまたはfalseと評価されるが数学的に証明が困難なif条件を注入します(例: (x*x+x)%2===0)。モジュラー算術、ビット単位、型チェックカテゴリにわたる15の述語式。
6プロキシ関数transforms/proxyFunctions.tsすべての関数呼び出しを2つのディスパッチャ経由でルーティングします: 単純な呼び出しには_fc(fn, ...args)、メソッド呼び出しには_mc(obj, prop, ...args)。耐障害性のためにローカル変数にキャプチャされたFunction.prototype.applyを使用します。
7コンテキストウィンドウ枯渇transforms/contextExhaustion.ts式を深くネストされた三項演算子(不透明条件付き)、void式チェーン、条件付きvoidパディングでラップします。LLMにノイズでコンテキストウィンドウトークンを浪費させます。
8カンマ式マージtransforms/commaExpressions.ts連続する式文を単一のカンマ式に圧縮します: a(); b(); return c() は return a(), b(), c() になります。
順序パスファイル説明
9パス1: カタログ化passes/firstPass.tsASTを走査し、すべての識別子をカタログ化し、16のスクリプト範囲(CJK、ハングル、ギリシャ語、キリル文字、デーヴァナーガリー、タイ語、アラビア語、カタカナなど)から6〜16文字のランダムなUnicode名を割り当てるグローバルマップを構築します。
10パス2: 置換passes/secondPass.tsすべての識別子名を難読化されたUnicode相当に置き換えます。require()の引数をString.fromCharCode(...)としてエンコードします。静的import/exportソースをUnicodeエスケープされた文字列リテラルとしてエンコードします。クラスのsuperClass参照、テンプレートリテラル式、分割代入パターンを置換します。
11パス3: ダミーパラメータpasses/thirdPass.tsすべての関数宣言と式に0〜15のランダムな未使用パラメータを注入します。残余パラメータを持つ関数はスキップします。すべてのコメントを削除します。
順序変換ファイル説明
12グローバル変数エンコードtransforms/globalVariableEncoding.tsグローバル(globalThis + windowパッケージから動的に発見)への参照を eval("Name<suffix>".replace(new RegExp("<suffix>$"), "")) で置き換えます。両方の文字列は文字列配列を通じて流れます。
13プロパティキーエンコードtransforms/propertyKeyEncoding.tsドットアクセスをスコープごとのレジストリを持つ計算アクセスに変換します。すべてのサフィックスが.replace()を介して実行時に同じプロパティ名に解決されるため、スコープをまたぐアクセスが機能します。
14数値エンコードtransforms/numberEncoding.ts11のエンコード戦略: シフト+加算、XOR恒等、補数、除算、ネストシフト、二重否定、モジュラーなど。各インスタンスは一意に生成されます。プロパティキーとswitchケース値はスキップします。
15自己完全性検証transforms/selfIntegrity.ts2〜4の実行時チェックを注入: evalネイティブコード検証、Function.prototype.toString完全性、タイミング異常検出、コード構造検証。改ざん防止応答: ビジーウェイト、スロー、サイレント破壊。 [論文 10]
16文字列配列抽出transforms/stringArrayExtraction.tsすべての文字列を 連鎖XOR復号(エントリNのキーはエントリN-1のデコード済みコンテンツに依存)と 疎な位置依存エラーパターン(各文字は異なるXORキーを持ち、選択された位置にLPNに着想を得た疎エラーが発生)を持つ単一の配列に収集します。 [論文 2, 9]
17Consoleスタブobfuscator.tsすべてのconsoleメソッドを動的に発見し、それぞれをno-op関数に設定します。
18Terser最小化obfuscator.tsterserを介して空白/書式を削除(mangle: false、compress: false)。terserが出力を解析できない場合は、正規表現ベースの削除にフォールバックします。
突然変異ベース
transforms/deadCodeInjection.ts
実際の文をクローンし、突然変異させます: 等価グループ内の演算子を交換、定数を攪乱、識別子をリネーム。構造的に実際のコードと区別がつかないAST構造的に同一のデッドコードを生成します。 [論文 3]
論文著者実装された手法
[論文 1] On the (Im)possibility of Obfuscating ProgramsBarak, Goldreich, Impagliazzo, Rudich, Sahai, Vadhan, Yang難読化不可能関数テストケース — 秘密が難読化を生き残るかどうかをテストする検証ツール
[論文 2] Candidate iO and Functional Encryption for all CircuitsGarg, Gentry, Halevi, Raykova, Sahai, Waters連鎖文字列復号 — 各エントリのキーが前のデコード済み文字列に依存するKilianスタイルのランダム化
[論文 3] iO from the Multilinear Subgroup Elimination AssumptionGentry, Lewko, Sahai, Waters突然変異ベースのデッドコード(実際のコードと構造的に同一); CFFにおけるモジュラー算術状態遷移
[論文 4] How to Use iO: Deniable Encryption, and MoreSahai, Watersパンクチャードプログラムトリップワイヤ — 秘密の入力でトリガーする隠されたチェック
[論文 7] iO from Well-Founded AssumptionsJain, Lin, Sahai数値計算におけるLPNに着想を得たノイズ注入
[論文 9] iO from Bilinear Maps and LPN VariantsRagavan, Vafa, Vaikuntanathan位置依存エラーパターンを持つ疎XORエンコード
[論文 10] iO of Null Quantum Circuits and ApplicationsBartusek, Malavoltaデッドコード品質検証のためのNull回路テスト; 自己完全性検証(デュアルモード)