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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
jsdeob-workbench — 難読化されたJavaScriptをビジュアルにリバースエンジニアリングします。変換を連鎖させ、ASTの変更を検査し、再利用可能なデオブフスケーション(難読化解除)プラグインを作成します。 | Kitploit
ツール/GitHubGitHub/owl4444/jsdeob-workbench
静的分析コード分析リバースエンジニアリングスクリプトと自動化デバッガマルウェア分析バイナリ解析学習と教育
GitHubowl4444/jsdeob-workbench

jsdeob-workbench

難読化されたJavaScriptをビジュアルにリバースエンジニアリングします。変換を連鎖させ、ASTの変更を検査し、再利用可能なデオブフスケーション(難読化解除)プラグインを作成します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

jsdeob-workbench

JavaScriptの難読化を解除するためのビジュアルワークベンチ。変換チェーンを構築し、ステップ実行し、独自のプラグインを作成できます。

img

img

YouTube デモ

  • https://www.youtube.com/watch?v=7zuqKoJT2BM
  • https://www.youtube.com/watch?v=bOVnPIfjoco

これは何?

このアプリケーションはJavaScriptプログラムの抽象構文木(AST)を表示します。このアイデアは、obfuscatio.io関連のマルウェアサンプルを分析しているときに生まれ、結果としてBabelJSを使った難読化解除についてさらに学ぶことになりました。 もし難読化されたJS(例:webpackバンドル、obfuscator.ioの出力、パックされたマルウェアサンプル)をリバースエンジニアリングしようとしたことがあるなら、その苦痛をご存知でしょう。このツールを使えば次のことができます:

  • BabelJSに基づいた変換スクリプトの作成
  • ASTViewerからASTを素早く参照
  • 複数の変換を視覚的にチェーンし、変更を確認するためのサマリーを取得
  • プラグインをコラボレーターと共有(手動)し、構成をエクスポート
  • 後でプラグインとして再利用できるパターンを作成
  • 他のJSサンプルを分析する際にプロジェクトを保存

クイックスタート

root@kitploit:~
npm install
npm start
# ブラウザで http://localhost:3000 を開く

これだけです。

インターフェース

左サイドバー - 利用可能なすべての変換(組み込み + レシピとしてのプラグイン)とレシピチェーン。(Cyberchef をイメージ)

中央 - 入力/出力エディター。左側に難読化されたコードを貼り付け、右側で変換後のコードを表示します。

右パネル - ASTビューアー、スコープアナライザー、わかりやすいサマリー。

img

スコープ分析

BabelJSを使用してスコープとバインディングを表示できます。これは特に未使用の変数などがあるかどうかを確認するのに便利です。また、このビューでは変数が参照されている場所を探すこともできます。

img

変換の作成

+ ボタンをクリックするか Ctrl+N を押してスクリプトエディターを開きます。変換は単なるJSコードで、以下のものにアクセスできます:

root@kitploit:~
// 利用可能なグローバル変数:
ast        // 解析されたBabel AST
traverse   // ツリーを走査: traverse({ Identifier(path) { ... } })
t          // Babelタイプ: t.isStringLiteral(node), t.identifier('x')
config     // レシピカードからのユーザー設定
stats      // 変更を追跡: stats.replaced = 5
parser     // コードを解析: parser.parse('var x = 1')
generate   // コードを生成: generate(node).code
run        // evalヘルパー: run('1+1') => 2 (危険。自分のマシンのサンドボックス内で実行することを想定)

例 - すべての "debug" 文字列を削除(StringLiteral):

root@kitploit:~
// 次の2つはレシピチェーン内でパラメータとして表示されます(次のスクリーンショット参照)
const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;

traverse({
  StringLiteral(path) {
    if (path.node.value === targetValue) {
      if (removeMatches) {
        path.remove();
        stats.removed = (stats.removed || 0) + 1;
      }
    }
  }
});

次のいずれかを選択できます:

  • このスクリプトを直接(CTRL + ENTER)で素早くテストする
  • プラグインとして保存せずに、書いたスクリプトをレシピチェーンに追加する(スクリーンショットのように)。後で保存可能
  • 動作が確認でき、他の人と共有したいプラグインとして保存する

以下のスクリーンショットは次のものを示しています:

  1. スクリプトエディター(左上の新規ボタンをクリック、または Ctrl-E ショートカット)
  2. BabelJSスクリプトを書いた後、レシピチェーンに追加。
  3. レシピ内で、検出されたパラメータを使用してプラグインの動作を変更。
  4. 出力エディターに成功した変換が表示されます。

img

組み込み変換

これらは難読化手法によっては失敗する可能性があり、カスタムスクリプトが必要になる場合があることに注意してください。また、変更して新しいカスタムスクリプトとして保存することもできます。

名前動作
Beautifyコードをきれいにフォーマット
Constant Folding1 + 2 → 3、"a" + "b" → "ab"
Decode Strings\x48\x65\x6c\x6c\x6f → "Hello" をデコード
Inline Array Values単純な配列要素アクセスをインライン化
Inline String Array難読化ツールが使用する文字列配列をインライン化
Opaque Predicate Removal常に真/偽の条件を削除
Remove Commentsコードからすべてのコメントを削除
Remove IIFE(function(){...})() ラッパーを展開
Remove Unused Codeデッド変数と関数を削除
Simplify Literals!0 → true、void 0 → undefined

プラグイン

plugins/<カテゴリ>/ サブフォルダーに独自の .js ファイルを配置します。サイドバーにフォルダーごとにグループ化されて表示されます。

img

例:

  • 名前: ファイル名から派生(Bracket-to-dot-notation.js → "Decode Strings")
  • カテゴリ: サブフォルダー名(plugins/Utilities/ → カテゴリ "nyx")
root@kitploit:~
/**
 * Bracket to Dot Notation
 * Changes things like  console["log"] to console.log
 * 
 * Category: utilities
 */

// Script Editor - Ctrl+Enter to run, Ctrl+E to close
// Use traverse(visitor) to modify the AST
// Access 't' for Babel types

traverse({
  MemberExpression(path) {
    if(path.node.computed === true){
      // this is the bracket notation
      
      prop = path.node.property
      if(t.isStringLiteral(prop)  &&
          /^[a-zA-Z_][a-zA-Z_0-9]*$/.test(prop.value)
       ){

        path.node.computed = false; // step 1

      // step 2 change literal to identifier
        path.node.property = t.identifier(prop.value)
      

      }
    }
  }

});

パラメーターを追加する方法は2つあります:

  1. (優先され、強く推奨)次の形式でコード内に記述すると、スクリプトエディターが2つのパラメーター(targetValue と removeMatches)を作成しようとします。
root@kitploit:~
const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;
  1. エッジケースでパラメーターが見逃された場合、プラグインとして保存する際に追加のパラメーターを追加できます。

img

メインサマリー

含まれるもの:

  • 各プラグインの実行時間
  • コードサイズの変化統計
  • 変化を視覚化するグラフ

img

キーボードショートカット

キーアクション
Ctrl+Eスクリプトエディターの表示/非表示
Ctrl+Shift+Eevalパネルの表示/非表示(危険)
Ctrl+Sプロジェクトを保存

スタンドアロン実行ファイルの作成

ネストされたノードが多い場合、スタンドアロンでは問題が発生する可能性があります。回避策が常にうまくいくとは限りません。

npmを使用してビルドするには、次のコマンドを使用します。

root@kitploit:~
npm run build        # Windowsのみ

出力は dist/ に生成されます。カスタム変換を使用する場合は、plugins/ フォルダーをexeと同じ場所にコピーしてください。

スタックサイズの問題

深くネストされたコード(JSFuckなど)はスタックを溢れさせる可能性があります。ビルドスクリプトはWindows上で自動的にスタックサイズを増やそうと試みます。スタックオーバーフローが発生する場合は、ソースから npm start(--stack-size=65536 を使用)で実行してみてください。

スタンドアロン実行ファイルにビルドする際にスタックサイズを増やす方法はまだわかっていません。もし方法をご存知でしたら教えてください!

クレジット

以下のライブラリを使用して構築されています:

  • Babel - AST解析と変換
  • Monaco Editor - コードエディター
  • Express - バックエンドサーバー

img

質問は?問題がありますか?GitHubのIssueを開いてください。

ツールをダウンロード