設計資料・過去の記録

Ourin Migrator 計画

設計案・過去の実装記録です。本文中の予定、完了数、環境条件は執筆時点のものです。現在の実装や公開版の対応保証として扱わず、最新の対応状況と合わせて読んでください。 対応状況 · 既知の問題

Ourin Migrator は、SSP/Windows 由来の資産を壊さずに読み取り、Ourin で利用可能な形へ段階的に変換・補助する DevTools 機能として実装する。

目的

  • [local-path] 配下の SSP 互換資産を解析する
  • Windows 向け .dll / .exe を Ourin 本体では実行せず、移行対象として扱う
  • descript.txt など既存の SSP 互換メタデータを維持する
  • Ghidra headless 解析で疑似 C、imports、exports、strings、resources を取得する
  • ourin.json を生成し、Ourin 側の builtin 置換や macOS plugin 実装へつなげる
  • 未知 DLL については完全自動変換ではなく、.plugin 雛形と実装 TODO レポートを生成する

基本方針

DLL/EXE は Ourin 本体ではロードしない。通常起動時は descript.txt、ourin.json、macOS native plugin、builtin replacement だけを利用する。

Ghidra は Ourin に同梱しない。DevTools 側でユーザー指定の analyzeHeadless を外部プロセスとして呼び出す。

SSP 互換の元ファイル構造は保持し、Ourin 用の追加情報だけを ourin.json や ourin/ 配下に置く。

移植済み plugin を配布・保管する場合は、install.txt、descript.txt、message.*.txt をパッケージディレクトリのルートに置き、Ourin ホストがそれらを解釈する。生成する macOS .plugin は、元 DLL の load / loadu / request / unload / unloadu 互換と、必要最小限の descript.txt fallback に責務を限定する。表示文言や言語選択は .plugin 内に固定せず、原則として message.*.txt へ委譲する。

plugin/shared_value/
  descript.txt
  install.txt
  message.japanese.txt
  message.english.txt
  shared_value.dll
  ourin.json
  ourin/
    analysis/
      report.md
      imports.json
      exports.json
      strings.txt
      resources.txt
      decompiled.c
    macos/
      shared_value.plugin/

配布用の macOS パッケージディレクトリは以下を標準形とする。

plugin/shared_value_mac/
  install.txt
  descript.txt
  message.japanese.txt
  message.english.txt
  shared_value.plugin/
  Sources/
    SharedValuePlugin.c
  OriginalDocs/
    ReadMe.txt

OriginalDocs/ は元配布物の保存・参照用であり、通常の実行時入力ではない。

実装場所

Ourin/DevTools/Migrator/
  OurinMigratorView.swift
  LegacyAssetScanner.swift
  LegacyBinaryAnalyzer.swift
  GhidraHeadlessRunner.swift
  MigrationReport.swift
  OurinManifest.swift
  PluginScaffolder.swift
  Resources/
    DecompileAll.java

既存の互換処理は以下を利用する。

Ourin/Compat/LegacyDescriptor.swift
Ourin/Compat/SSPCompat.swift
Ourin/Calendar/CalendarRegistry.swift
Ourin/PluginHost/PluginRegistry.swift

対象ディレクトリ

初期スキャン対象は以下とする。

[local-path]
[local-path]
[local-path]
[local-path]

検出対象:

*.dll
*.DLL
*.exe
*.EXE
descript.txt
ourin.json

表示情報

DevTools の一覧では以下を表示する。

Name
Kind: plugin / calendar-plugin / headline / tool / unknown
Binary: PE32 / PE32+ / unknown
Filename
ID
Status: metadata-only / analyzed / mapped / scaffolded
Recommendation

UI の基本形:

Ourin Migrator
  [Scan Documents/Ourin]
  [Ghidra Path: ...]
  [Analyze Selected]
  [Generate ourin.json]
  [Create Migration Record]

Name | Kind | Binary | Status | Action

詳細ペイン:

descript.txt summary
imports
exports
strings preview
resources preview
migration recommendation
generated files

Ghidra 解析

Ghidra の既定候補:

[local-path]

解析は Process で外部プロセスとして実行する。プロジェクト作業領域は一時ディレクトリに作成し、成果物は各対象フォルダの ourin/analysis/ に保存する。

生成物:

ourin/analysis/decompiled.c
ourin/analysis/imports.json
ourin/analysis/exports.json
ourin/analysis/strings.txt
ourin/analysis/resources.txt
ourin/analysis/report.md

Ghidra 解析は時間がかかるため、DevTools 上で進捗表示とキャンセルを可能にする。

ourin.json

ourin.json は、元 DLL/EXE と Ourin 側実装の対応関係を表す。

例:

{
  "format": "ourin-migration-1",
  "source": {
    "filename": "shared_value.dll",
    "kind": "pe32-dll",
    "sspPluginId": "ABED14AF-F34B-4ff2-95B7-30ED37D5802D"
  },
  "mode": "native-replacement",
  "implementation": "builtin:shared_value",
  "analysis": {
    "decompiled": "ourin/analysis/decompiled.c",
    "report": "ourin/analysis/report.md"
  }
}

主な mode:

metadata-only       DLL/EXE は実行せず、SSPメタデータだけ利用する
native-replacement  Ourin builtin 実装へ差し替える
native-plugin       macOS .plugin/.bundle を利用する
scaffold            旧形式の雛形(新規生成しない)
unsupported         現時点では未対応

既知 DLL/EXE の builtin 置換候補

まずは以下を移行候補として扱う。

shared_value.dll -> builtin:shared_value
SAKNIFE.DLL      -> builtin:saknife または scaffold
SCHEDULE.dll     -> builtin:calendar_schedule または scaffold
SSPH.exe         -> builtin:ssph_compat
mcp.exe          -> unsupported(OurinはMCP互換HTTP入口を公開せず、要求は404)

既知 DLL は疑似 C から Swift へ機械変換するのではなく、Ourin 側で同等機能をネイティブ実装し、ourin.json で紐づける。

移行記録生成

未知 DLL の場合は完全変換せず、実行体を含まない移行記録を生成する。

ourin/macos/<name>_mac/
  descript.txt
  message.japanese.txt
  message.english.txt
  ourin.json
  OriginalDocs/
    ReadMe.txt
  README.md

移行記録には実行可能な .plugin、shell、固定 PLUGIN/2.0M 200 OK 応答を含めない。 ourin.json の mode は unsupported とし、解析結果への相対参照と個別移植要件を保存する。

実装後に個別のネイティブ .plugin を作成し、ourin.json を native-plugin または native-replacement に更新する。同時に ourin/analysis/report.md に、 exports/imports/strings から推定した実装要件を出力する。

実装フェーズ

Phase 1: スキャン

  • 対象ディレクトリから .dll / .exe / descript.txt / ourin.json を検出する
  • file 相当の判定で PE32 / PE32+ / unknown を分類する
  • LegacyDescriptor で descript.txt を UTF-8 / Shift_JIS 両対応で読む
  • DevTools に一覧表示する

Phase 2: 解析

  • Ghidra path を設定できるようにする
  • 選択ファイルを headless 解析する
  • 疑似 C、imports、exports、strings、resources を保存する
  • 解析ログ、成功/失敗、所要時間を記録する

Phase 3: レポート生成

  • report.md を生成する
  • binary kind、exports、imports、目立つ文字列、推定機能をまとめる
  • Ourin 側の推奨移行モードを提示する

Phase 4: ourin.json 生成

  • metadata-only / native-replacement / native-plugin / scaffold / unsupported を書けるようにする
  • 既知 DLL について builtin 実装名を自動提案する
  • 既存 ourin.json がある場合は上書き確認を行う

Phase 5: 移行記録生成

  • 未知 DLL 用に実行体なしの移行記録を生成する
  • 元資産のメタデータ、OriginalDocs、解析結果への参照、README を保存する
  • PluginRegistry は unsupported / 旧 scaffold manifest を実行対象にしない

MVP

最初の完成ラインは以下とする。

  1. DLL/EXE 一覧を DevTools に表示する
  2. 選択ファイルを Ghidra headless で解析する
  3. ourin/analysis/decompiled.c と report.md を生成する
  4. ourin.json を生成する
  5. shared_value.dll を builtin:shared_value として認識する

MVP では自動変換を目標にしない。解析、分類、Ourin 用マニフェスト生成を主目的とする。

注意点

  • Ghidra の疑似 C は元ソースではないため、Swift/macOS plugin への完全自動変換は行わない
  • 未信頼バイナリを扱うため、Ourin 本体プロセス内では実行しない
  • Ghidra/Java 依存を通常ユーザーへ強制しない
  • 元の SSP 資産を破壊しない
  • 生成物の上書きは確認またはバックアップを必須にする

ライセンス・帰属 / License & Attribution

  • Ghidra: 本機能は Ghidra(National Security Agency 開発、Apache License 2.0)を外部 ツールとして呼び出す。Ghidra は Ourin に同梱しない。
  • https://ghidra-sre.org/
  • https://www.apache.org/licenses/LICENSE-2.0
  • DecompileAll.java: Ghidra スクリプト API を使用する Ourin のコード(Apache-2.0)。 実行時に GhidraScriptSource.swift から実体化される。
  • 解析対象 DLL/EXE: SSP 互換資産は各々のライセンスに従う。Migrator は読み取り専用で 解析・変換を補助するものであり、元資産の再配布許可を意味しない。

アプリ内 About → 「ライセンスを表示…」から Ghidra ライセンス文を参照できる。

出典と編集について

Ourin / Furin Lab・contributors。文書はCC BY-SA 4.0(第三者の個別表記を除く)。Web版は見出し・リンクの整備とローカルパスの一般化を行っています。更新基準日: 2026-10-30。

元資料: docs/OURIN_MIGRATOR_PLAN_ja-jp.md
ソース SHA-256: 823bb47f25a0b8f603239c6acfa50b644de0b82e8dd111decba8395daf336794

ライセンス · 出典一覧 · 資料一覧に戻る