ニュース
DE Decompiler v26.7をリリース
DE Decompiler 26.7では、Delphiで記述されたプログラムのネイティブコード復元を改善しました。条件式、文字列、プロパティ、引数、評価順序の精度に加え、ライブラリの識別、データベースの読み込み、解析の安定性も向上しています。
- 3つ以上の分岐で選択される値を使う条件式の復元を改善し、Delphi風コードに残る未解決の中間値を削減しました。
- 出力パラメータを完全には識別できない呼び出しの後で、文字列比較に古い初期値が使われる問題を修正しました。
- 呼び出し先のシグネチャが未解決の間接呼び出しで、スタック経由の出力パラメータに格納される文字列などの値をより正確に扱い、誤った空文字列や定数条件の生成を抑えました。
- 適切な場合は切りのよい数値定数を10進数で表示し、既知のアドレスとビットマスクは16進数表記を維持します。
- 異なるDelphiライブラリにある同名クラスをより正確に区別し、継承されたライブラリメソッドの識別を高速化しました。識別結果の曖昧さも減少しています。
- Delphiライブラリデータベースの読み込みを高速化し、小規模なデータベースを読み込む際の安定性を改善しました。
- ローカル変数とカウンタのサイズの復元を改善し、8ビットおよび16ビットの演算をより正確に保持します。
- ローカル変数が再利用される場合の計算結果の復元を改善し、誤った値の置き換えやメモリの再読み取りを防ぎます。
- Delphiクラスの継承されたプロパティの復元を改善し、名前が一致するだけの無関係なメソッドは通常の呼び出しとして保持します。
- Delphiライブラリの呼び出し復元を改善しました。プロパティとして確実に表現できないルーチンでは、引数と戻り値を保持します。
- 継承されたTextやCaptionを含むDelphiプロパティの読み取り精度を向上しました。プロパティを再度読み取る代わりに、取得済みの文字列を保持します。
- 符号付き・符号なし変換後の整数計算をより正確に復元し、64ビット演算と分岐ごとに選択される値を保持します。
- 複数の分岐から選択される値の復元を改善し、保存済みの結果と後続の計算を区別します。
- Delphiコントロールのセッター(書き込みアクセサ)の呼び出しをプロパティ代入として復元できるケースを拡充しました。継承されたTextとCaptionも対象です。
- 結果を保存してから使用するDelphiのオブジェクトの型判定の復元を改善しました。元の判定を繰り返さず、論理式を保持します。
- 早期リターン経路での関数の戻り値を保持します。複数の分岐から到達する共通のリターンブロックやクリーンアップ処理にも対応します。
- 復元した値の選択処理内で、関数呼び出しが1回だけ評価されるようにし、元の副作用を保持します。
- 共通のエラー処理ブロックを持つルーチンの入口解析を修正しました。ある分岐内でのみ代入された値を、未代入の経路で使う問題も防ぎます。
- 論理条件と入れ子の分岐で欠落していた関数呼び出しを復元し、分岐から復元した値に必要な宣言を追加しました。
- 不正なAPI呼び出し記述の解析で過大なメモリを確保しないようにしました。未解決の引数は省略せずに保持します。
- 関数の戻り値を使用する処理とループ条件の評価順序をより正確に復元します。途中に別の処理があっても呼び出しを保持し、復元したループで未初期化値を使う問題を防ぎます。
- Delphiの型判定と実行時チェックを伴うオブジェクトのキャストを、より多くのケースでis/as式として表示します。必要なチェックと例外の動作を保持します。
- 1つの式で複数回使用される関数の戻り値をより正確に扱い、復元コードで同じ関数が繰り返し呼び出される問題を防ぎます。
- 分岐をまたいで値が渡される関数引数の復元精度を向上しました。欠落していた引数を復元し、到達不能なコードの値を使わないようにしました。
- 埋め込みデータや特殊なリターン命令を含むネイティブプロシージャの解析で発生するフリーズを修正し、スタック引数も保持します。
- 特殊な呼び出し規約でのスタック処理を改善し、ネイティブコード解析中のオーバーフローエラーを防ぎます。
- 論理値への変換後のローカル変数宣言を修正し、元の記憶領域のサイズと標準的な表現とは異なるTrue値を保持します。
DE Decompiler v26.6をリリースしました
DE Decompiler 26.6では、C++Builderで作成されたVCLアプリケーションへの対応を拡充し、ネイティブコードの復元、操作時の応答性、フォームのプレビューを改善しました。プラグインからの移動や関数のマーク操作に使えるSDKコマンドも追加しました。
- C++Builderとコンパイラの識別
- C++BuilderのVCLアプリケーションで、フォームの復元と表示、ユニット・クラス・関数の解析、イベントハンドラへの移動に対応します。その他の解析ツールも利用できます。復元したコードはDelphi風のPascalで表示し、PAS/DFM形式で出力します。元のC++ソースを復元するものではありません。
- C++Builder固有のライブラリに対応するRTTI知識ベースは、まだ用意されていません。共通のVCLの認識範囲に含まれない関数や、識別できないオブジェクトのプロパティ・メソッドは、ライブラリ内の名前を付けずに表示される場合があります。このため、C++Builderのコードの復元品質は、Delphiで記述されたプログラムより明らかに低くなります。 この制約はコードの復元精度とライブラリ内の名前の識別に関するものです。フォーム表示や構造解析など、その他の機能はDelphiで記述されたプログラムと同じエディションの条件で利用できます。
- C++BuilderとFree PascalをDelphiとは区別して識別します。互換シグネチャデータベースの使用時や保存済みプロジェクトの読み込み後も、入力のコンパイラ情報を保持します。長いコンパイラ名やバージョン範囲はメイン画面のラベル内に収まり、詳細はツールチップで確認できます。
- C++Builderのコードでは、文字列オブジェクトの処理を読みやすくし、出力引数の復元を改善しました。アプリケーションの処理に混在する例外管理用の文も減らしました。
- 型、呼び出し、プロパティ
- 深く入れ子になった連結内の文字列変数、数値・文字の明示的な型変換後のローカル変数、関数の戻り値の型を改善しました。符号付き・符号なし整数、文字、文字列、Booleanの格納型を扱います。動的配列へのポインタの一部を読む処理を、配列全体への参照として表示する問題も修正しました。
- ポインタサイズの整数、参照引数、Booleanの格納型、型付きプロパティへの代入を修正しました。復元したクラス情報を使い、var/out引数や文字列の戻り値を含む仮想メソッドの引数と結果を改善しました。ライブラリやラッパー経由の呼び出しでは、既定値を含む引数と型をより正確に復元します。
- オブジェクトのクラスやBooleanの格納型など、保持されたプロパティ取得結果の型を改善しました。必要なゲッター呼び出しと評価順序を維持し、結果の再利用では変換を保ちながら重複するゲッターを減らします。継承プロパティや共通アクセサーを改善し、名前が曖昧な場合はメソッド呼び出しを残します。
- ランタイムヘルパーの識別により、無関係なメソッドを置き換えたり後続コードを省いたりする問題を修正しました。複数のライブラリルーチンが同じ機械語を共有していても、不適切な名前や戻り値の型を確定しません。同名の外部APIとランタイムヘルパーも区別します。
- 文字列とファイル処理
- AssignFile、Write、WriteLnの復元精度を高め、文字コード、明示的なコードページ、ゼロ文字、フィールド幅を維持します。連続するテキスト出力やファイルレコードの変更で、呼び出しが重複したり古い値が使われたりする問題を修正しました。バイナリファイルの終端判定も改善しました。
- ポインタ経由の文字列長、長さを明示した文字列バッファ、メモリ初期化、ShortStringの代入と連結を改善しました。長さを制限したコピー、埋め込まれたゼロバイト、構造体内の文字列フィールドをより正確に表現します。
- 文字列の内容比較と呼び出し後の引数復元を改善し、不適切な定数条件や余分な引数を減らしました。引数経由で返される文字列の結果と、文字列フィールドを含むレコードを区別します。
- 制御フローと機械語命令
- ループ内の変数参照、関数結果の再利用、ポインタ経由の書き込みを修正しました。参照先データの変更をポインタ自体の変更として表示しません。解決できないレジスタ名や重複する呼び出し式も減らしました。
- 整数の限界付近での符号付き比較、負の定数、算術オーバーフロー条件を改善しました。複雑な条件や共通の戻り経路への分岐では、呼び出しと代入の順序を保ち、重複呼び出しや誤った戻り値を防ぎます。
- 32ビットアプリケーション内のまれな16ビットメモリアドレッシングや、セグメントオーバーライドのデコードを修正しました。
- 速度、メモリ、保存済み解析
- 深く入れ子になった式や、関数・プロパティの結果を多く再利用するプロシージャの処理を高速化し、安定性を改善しました。複雑なプロシージャの表示、フォームやクラスの多いプロジェクトの初期処理、プロシージャ間の切り替えを高速化しました。
- 更新した関数シグネチャを後続の呼び出しに反映します。ファイル変更、保存済みプロジェクトの読み込み、プラグインによる編集後には解析を更新します。既存データベースとの互換性を保ちながら、保存方法を最適化しました。
- 大きなファイルのHEXエディターのメモリ使用量を削減し、編集、Undo/Redo、保存は維持しました。フォーム・クラス・コード分岐の検出、ネイティブコード解析、シグネチャ読み込みも省メモリ化しました。解析状態の保存に失敗した際のメモリリークも修正しました。
- 不完全な起動テーブルや実行ファイル末尾付近の文字列参照の処理を改善しました。ProとLiteの全体逆コンパイル後も文字列参照を表示します。Liteで保存済みプロシージャを開き直した際の空の逆アセンブラー表示を修正し、参照から適切なコードビューへ移動します。
- VCLフォームのプレビュー
- 対応するTMSのラベル、ボタン、リスト、グループボックス、スライダー、スクロールバー、タブのプレビューを改善し、保存された文字列と配置をより正確に再現します。アクティビティ表示は静止プレビューとし、埋め込みWeb領域はページを読み込まずに位置を示します。
- ウィンドウ形状を設定する補助コンポーネントやイメージリストが、フォーム内容を覆う問題を修正しました。透明なスライダー背景が黒くなる問題も修正しました。
- プラグインSDK
- GetDisplayedTreeItem(65)で表示中のフォーム、ユニット、クラス、プロシージャを取得できます。GetModuleFunctionMark(66)とSetModuleFunctionMark(67)で関数のマークを取得・変更し、FindModuleFunctionByVA(68)で仮想アドレスから関数を検索できます。GetModuleFunctionVA(69)は64ビットを含む完全な仮想アドレスを返します。既存のコールバックシグネチャとコマンド番号は維持しています。
- キャンセルとヘルプ
- 大きなアプリケーションの読み込み、クラス検出、フォーム読み取り、全プロシージャの逆コンパイル時のキャンセルを改善しました。キャンセル要求後は以降のプロシージャ処理を停止します。全体逆コンパイルをキャンセルした場合、不完全な結果は破棄します。
- 任意のプロトタイプ解析をキャンセルしても、解析済みファイルは開いたままとし、検出済みのプロトタイプ、API、文字列を保持します。未完了の解析レポートは表示せず、中断後はデコード設定を復元します。
- 選択した言語のヘルプがない場合は、英語のPDFまたはWebサイトを開きます。ローカルのPDFやCHMを開けない場合は、対応するオンラインドキュメントを表示します。
復元したネイティブコードは、IDEで利用する前に手作業で確認・修正してください。
DE Decompiler v26.5をリリース
DE Decompilerは、Delphi 3~13で作成されたWin32/Win64のVCLアプリケーションをネイティブ解析する製品として一般販売を再開します。バージョン26.5では、次の機能と改善を提供します。
- インターフェース翻訳の更新
- アラビア語、ブラジルポルトガル語、中国語(簡体字・繁体字)、チェコ語、デンマーク語、オランダ語、英語、フランス語、ドイツ語、ギリシャ語、ヘブライ語、インドネシア語、イタリア語、日本語、クルド語(Sorani)、ペルシア語、ポーランド語、ポルトガル語、ロシア語、スロバキア語、スペイン語、トルコ語、ウクライナ語のインターフェース翻訳を更新しました。
- ネイティブコードと制御フロー
- Delphiで記述されたWin32/Win64プログラム用の逆コンパイルエンジンが、
if/else条件、入れ子のcase、for/while/repeatループ、識別できるBreak/Continueの経路を再構築します。根拠が得られる場合は、ローカル変数に意味を反映した名前を生成します。 - 符号付きオーバーフロー、符号なしのキャリーとボロー、真偽値の判定、部分レジスタ、ポインタ幅、短絡評価の処理を改善しました。型やデータフローを確定できない箇所は、根拠のない高水準式に置き換えず、明示的な表現を維持します。
- Delphiで記述されたWin32/Win64プログラム用の逆コンパイルエンジンが、
- 文字列、配列、ランタイムライブラリ呼び出し
AnsiString、UnicodeString、WideStringの結果、参照引数、隠れた戻り値領域の復元を改善しました。元の呼び出し順序と副作用を維持します。- 認識されたRTL処理をDelphiの式や文として表示します。
Length、Copy、Delete、Insert、SetLength、連結、動的配列の添字、Variant配列、TextFile入出力などに対応します。シグネチャが曖昧な場合は低水準の表現を維持します。
- RTTI、VCL呼び出し、シグネチャデータベース
- 実行ファイルのメタデータとシグネチャデータベースから、フィールド、プロパティ、仮想メソッド、VCL呼び出しを復元します。修飾された継承情報で同名クラスを区別し、Windows APIには実際のWin32/Win64呼び出し規約を適用します。
- コンパイラの識別はデータベース選択から独立しています。商用版では、完全一致、同じビット数の最も近い新しいバージョン、最も近い古いバージョンの順に選択します。代替データベースや不確実な一致はアスタリスクとツールチップで確認できます。Delphi 12.3とDelphi 13のシグネチャにも対応します。
- VCLフォーム、DFMソース、イベントへの移動
- 対応するメニュー、ページ、リスト、グリッド、ツールバーボタン、プロパティ、フォント、継承色を復元して表示します。対応するAlphaSkinsコントロールはVCL相当の表示に変換し、元のDFMクラス名を保持します。
- 元のDFMテキストを構文強調、折りたたみ、検索、コピー付きで参照できます。復元したコントロールやメニューイベントからハンドラへ移動でき、戻る・進むで選択、タブ、スクロール位置を復元します。対象アプリケーションの描画処理やイベントコードは実行しません。
- 画像と共通プラグインSDK
- DFM内の元のBMP、PNG、JPEG、GIF、ICO、CUR画像を画像プラグインに提供し、PNGのアルファとGIFの透明度を維持します。FRX Image Viewerは、認識されたDelphiネイティブImageList内の個別アイコンを、マスクとアルファ付きで表示・保存できます。
- DE Decompiler 26.5は共通SDKリビジョン26.6に対応し、
GetFrxImageListInfo(63)とGetProductName(64)を提供します。既存のエクスポート名とコマンド識別子の互換性を維持します。
- プロジェクト構造、検索、バイナリ表示
- ツリーは「ユニット → クラス → プロシージャ」でコードを分類します。ユーザークラス/VCLクラスのフィルタ、非公開関数のヒューリスティック検出、修飾名による検索で対象コードを探せます。匿名メソッドのコンパイラ生成フレームは通常非表示とし、明示的な移動時に表示できます。
- 検索、名前変更、参照はPascalの大文字・小文字を区別しない識別子と折りたたまれたコードを扱います。コード/逆アセンブル間の移動とHEXエディタは完全なWin64アドレスに対応します。Free Liteでも文字列参照と逆アセンブル結果への移動を利用できます。
- 出力、処理のキャンセル、解析データの保存
- UTF-8のPASユニット、個別のDFM、Delphiプロジェクト、結合したPASコードリストを出力できます。プロシージャ一覧は完全なWin64アドレス付きのTXT、MAP、IDC、HIEWに対応します。IDCは再配置を考慮し、既存のIDA命令とデータを保持します。
- 初回解析、出力、VDD保存はプロシージャ間でキャンセルできます。既存ファイルは完全な書き込み後に置換し、複数ファイル出力で完了済みのファイルはキャンセル後も残ります。VDDはリソース、変更した名前、キャッシュ済みコードを保持し、元の実行ファイルなしで参照できます。未処理のプロシージャには対応するバイナリが必要です。
- AI Helper、難読化、操作性
- AI Helperは折りたたまれた部分を含む完全なプロシージャをOllamaまたは設定済みのOpenAI/DeepSeek APIへ送信します。キャンセルとプロジェクト状態の管理を改善しました。ローカルモデルには対応するハードウェアが必要です。
- Win32/Win64の難読化ではバックアップを作成し、保存後に解析を再構築します。失敗時の復元処理も備えています。デコード済み命令とデータベース状態の再利用で重複処理を削減しました。言語・テーマ選択、最近使ったファイル、各言語のPDF/CHM/オンラインヘルプへの移動も改善しました。
高水準コードは、機械語命令とバイナリに残された情報から再構築されます。復元された型、自動生成された名前、識別できない呼び出しは、対応する機械語と併せて確認してください。 復元されたコードの解釈.
過去のリリース(2007~2008年)
2026年の再公開以前に一般公開したバージョンの更新履歴です。
DE Decompiler v2.0をリリースしました
- Delphi 2007でコンパイルされたアプリケーションの逆コンパイルに対応しました。
- コードのエミュレーションを大幅に改善しました。
- 既知の不具合をすべて修正しました。
DE Decompiler v1.4をリリースしました
- パッカーの検出を改善しました。
- Delphi 6でコンパイルされたアプリケーションの識別を改善しました。
- コードのエミュレーションを改善しました。
- ShowRefプラグインで使用する後方ジャンプのエミュレーションを修正しました。
- 「Decompile for VA」がDelphiで記述されたアプリケーションに対応しました。
- アンパッカーを更新しました。
- 逆コンパイラのプロセス優先度を変更するプラグインを追加しました。
- 難読化ツールがC++Builderで作成されたアプリケーションに対応しました。
- 難読化ツールで処理できるフィールドを追加しました。
- プロシージャ解析前のスタックのクリア処理を修正しました。
- コンポーネントのフィールドが見つからない場合に、ユーザー定義クラスを正しく解析できない問題を修正しました。
DE Decompiler v1.3をリリースしました
- ユーザー定義クラスの解析に関する不具合を修正しました。
- フォームの解析に関する不具合を修正しました。
DE Decompiler v1.2をリリースしました
- フォームの解析に関する不具合を修正しました。
DE Decompiler v1.1をリリースしました
- ドイツ語のヘルプファイルを追加しました。
- 逆コンパイルモードの不具合を修正しました。
DE Decompiler v1.0をリリースしました
- 初の一般公開版をリリースしました。