close
IDAPro

タイプストレージの統一 (ASMTIL)

Structure、Enum、Local型のビューとそれらの間の同期が存在することは、特にIDAを初めて使うユーザーを混乱させました。 すべての欠けている機能(構造体フィールド表現など)をLocal型に追加することに決定しました。 そして今では、すべての型操作を(使い慣れたショートカットキーで)Local型でご利用いただけます。 新しいデータベースは、デフォルトでLocal型のみを持ち、StructureとEnumは非推奨となります。

新しいLocal型ウィジェットは、従来のStructureウィジェットのように、またはフリーテキスト・ エディターを使って構造を編集することが可能です。

ARM/iOSの改善

iOSおよびmacOSのソフトウェアで一般的に見られる、Apple固有の命令とシステムレジスタのサポートを追加しました。 これにより、ファイルを操作する際に、逆アセンブルを妨げる未定義のバイトのインスタンスが少なくなり、コードがより理解しやすくなります。

ARMv8.6-Aのサポート。ARMv8.6-Aのほとんどの必須命令とオプション命令を追加しました(SVEの顕著な例外を除く)。 特に、以下の命令セット拡張を追加しました:

  • FEAT_SHA3:(4)Advanced SIMD SHA3命令
  • FEAT_SHA512:(4)Advanced SIMD SHA512命令
  • FEAT_DotProd:(2)Advanced SIMDドット積命令
  • FEAT_BF16:(8)BFloat16(Brain Floating Point)命
  • FEAT_FHM:(2)半精度浮動小数点乗算命令
  • FEAT_I8MM:(5)Int8行列乗算命令

ARMv8-Mサポート:現在、ARMv7-M以降に導入された新しいシステム・レジスタへのアクセスを適切に逆アセンブルします (例えば、一部のレジスタのNSバリアントなど)。

デバッガの改善

最近のAndroidバージョンのサポートを追加し、デバッグ情報のないアプリケーションで作業する場合に、より堅牢にしなりました。 最近の(API28+)Androidで実行している場合、IDAは変数の型を自動的に推測しようとします。 Dalvik VMでは、その型を知らないと変数の値を表示できないため、これによりデバッグ体験が大幅に向上します。

型情報のないDalvikデバッガ:(クリックで拡大できます)

同じアプリケーションですが、スコープ内のすべてのローカル変数スロットの型が正しく推測されています:(クリックで拡大できます)

プロセスオプションで、Windows/Linux/Macのデバッガの環境変数を指定できるようになりました:

デバッグバックエンドに様々な改善を行いました:

  • ASLR (Address Space Layout Randomization) をサポートするほとんどのプラットフォーム(ローカルデバッガとリモートgdbstub) で無効にすることができます。これにより、決定的なアドレスが望ましい場合のデバッグが簡素化されます。
  • iOSでNoAckモードを有効にし、1回の往復時間を節約しました。 これは、高遅延接続(通常はクラウドベースのエミュレーター)を介してリモートデバイスをデバッグするすべての人にとって有益です。
  • リモートデバッグサーバーはARM64 Linuxで利用可能になりました。

モダンなデザインと操作性

すべてのアイコンをブラッシュアップされたベクター化されたものに置き換え、大きなグラフでの方向づけのためにミニグラフビューに十字のエフェクトを追加しました。(クリックで拡大できます)

さらに、グラフ・モードのテキストは、どのズーム・レベルでも鮮明に表示されるようになりました。

Rustメタデータの解析の改善

Rust固有のデータと構造体を解析するプラグインを追加しました。 その結果、Rustバイナリによく見られる巨大な文字列プールが適切に分割されるようになりました。 さらに、このプラグインは、レガシーと v0 Rust の両方の名前マングリングフォーマットのデマングリングを追加しました。 (クリックで拡大できます)




IDA64の(32ビット).idbファイルのサポート

IDA64は、あらゆる場面でレガシーな32ビットIDAを完全に置き換えることができるように、さらに改良を加えました。移行を容易にするため、レガシーな.idbデータベースを.i64に変換する機能(コードネーム:CVT64)を実装しました。

32ビットIDAは現在非推奨となっていて、いずれ廃止される可能性があります。

UXの改善

いくつかの戦略的な面でUIのパフォーマンスを向上させました。 例えば、「関数」ウィンドウ(フィルターの有無に関わらず)によるDyld Shared Cacheの自動解析の遅さは過去のものとなりました。

IDA Teams

■ Vaultサーバーに接続するために(HTTP CONNECT形式の)プロキシを指定することが可能になりました。

■ マージセッション中に、ツールバーの代わりにコンテキストメニューを使用して、 コンフリクトを解決するためのチャンクを選択できるようになりました。

■ ライセンスロジックが改善されました:

  • 以前は、一部のライセンスが期限切れになると、Vaultサーバーはユーザー数を有効なライセンスの数まで減らすまで動作を拒否していました。 今後は動作を続けますが、そのような状況では新しいライセンスのチェックアウトを単純に拒否します。
  • IDAはローカルのida.keyファイルに依存しており、Vaultサーバー上でライセンスが更新されても、 そのファイルから表示される有効期限を表示していました。 今後はIDA Teamsはローカルのida.keyを全く使用せず、サーバーからの情報のみを使用します。

IDA Home

逆コンパイラのIDA Python API(ida_hexraysモジュール)は、 IDA Homeで利用可能なクラウド逆コンパイラと連携できるようになりました。

プロセッサモジュールの改善

■ PPCプロセッサモジュールは、LSP拡張と新しいPower ISA 3.1命令をサポート。

■ ARMモジュールで、ARM64システムレジスタのシンボリック名を表示するようになりました。

■ MIPSとRISC-Vモジュールは、レジスタ値のトラッキングを改善し、より良い解析とより多くの発見されたクロスリファレンス (相互参照)につながるようになりました。

■ DEXモジュールとローダーは、DEX 039フォーマット(Android 9と10)に追加された新機能をサポート。

■ PC:3つ以上のオペランドを持つ命令(imulやvinsertpsなど)は、各オペランドに適切に異なる型をサポートできるようになりました。実際には、これはすべてのプロセッサで3つ以上のオペランドを持つ命令に適用されます。

ローダー

  • ESP:Espressif ESPチップラインで使用される共通ファイルフォーマットをサポートする新しいローダーです。
  • Cortex-M:Cortex-Mのrawバイナリファームウェア用の新しいローダーで、ARMv6-MからARMv8-Mまでをサポートし、ロードベースの自動検出を行います。
  • ELF:ローダーは、使用される命令セットの詳細を含むPPC固有のセクションを解析し、プロセッサモジュールを自動的に設定するようになりました。

プラグイン

  • golang:Go 1.20に対応し、Goメタデータの検出と解析を改善しました。
  • Goomba:MBAの難読化解除用のオープンソースプラグインで、IDAの一部として出荷されるようになりました。
  • DWARF:DWARFデバッグ情報の読み込みが、特に大きなファイルに対して大幅に高速化されました。
  • OBJC:iOS16で導入されたObjective-Cの最適化(一般的なセレクタ用のobjc_msgSendのスタブやretain/release用のカスタムラッパー) に対応しました。

逆コンパイラ

  • デフォルトで行われるいくつかのオプションの最適化を無効にすることが可能になりました。 これは、マイクロコード上で独自の解析を行うプラグイン作成者にとって有用です。
  • 8.2で初めて導入されたアウトライン化された関数のサポートに対して、複数の修正が行われました。
  • ARM64でX8経由で渡される戻り値の検出を含む、複数の状況での呼び出し引数の検出が改善されました。



IDA 8.2ハイライト

IDA64での32 ビットのサポート

8.1 で開始した 32 ビット IDA の廃止に向けたもう一つのステップとして、 32 ビットのデバッグとデコンパイルがIDA64 で可能になりました。 デコンパイルには、対応する32-bitデコンパイラのライセンスが必要です。 IDA HomeとIDA Freeは、クラウドデコンパイラを使用した32ビットバイナリのデコンパイルもサポートするようになりました。

プロセッサモジュールの改善

Xtensaモジュールの大幅な見直しにより、様々なオプション命令やマクロ命令を追加(対応命令数は約3倍) 一般的なスイッチパターンをほとんど認識し、マークアップしています。

●Xtensaスイッチとオプション

スタック変数が追跡され、関数で作成されるようになりました。

●RISC-Vモジュールがベクター拡張命令を逆アセンブルできるようになりました。

Swift

Swiftコンパイラによって生成されたメタデータ構造は、パース、フォマット、ラベル付けされます。 IDAで表現できる単純な型のいくつかは、Local Typesにインポートされます。

picture_search

現在のバイナリに埋め込まれている画像(ピクチャー)を検索し、表示することができる新しいプラグインです。

UI candy

CSSベースのIDAテーマが、IDAの多くのビューで背景画像をサポートするようになりました。

変更点・新機能の一覧

IDA TeamsとLumina

  • Lumina: TLS接続をデフォルトとする最近のMySQLバージョンへのサポートが追加されました。
  • Teams: Vault のパスワードは、OS 固有のキーチェーンに安全に保存されるようになりました。
  • Vault/Lumina: 任意のローカルMACアドレスが.licファイルで指定されたものと一致することを許可するようになりました。

プロセッサー・モジュール

  • XTENSA: 多くの追加命令、レジスタ、スタック変数のサポートを追加しました(Zak Escano に感謝)
  • XTENSA: 多くの標準的なスイッチパターンをサポート(Zak Escano に感謝)
  • XTENSA: 使用されるABI(CALL0またはwindowed)を検出するようにしました。
  • RISC-V: ベクトル拡張命令への対応を追加しました。
  • TRICORE: TC1.6.2のFTOHP命令とHPTOF命令をデコードできるようになりました。

ファイルフォーマット

  • macho: macho.cfg に USE_SEG_PREFIXES オプションを追加。IDA のセグメント名のプレフィックスとして Mach-O のセグメント名を使用するように指示します。

FLIRT / TILS / IDS

  • FLIRT: vc1434 の署名を追加 (Visual Studio 16.11)
  • FLIRT: vc1434 (Visual Studio 16.11) の MFC 署名を追加
  • FLIRT: icl 222 (Intel C++ 2021.2) の署名を追加
  • FLIRT: icl 2221 (Intel C++ 2021.2.1) の署名を追加
  • TIL: Aarch64 (ARM64) UEFI 2.5 のタイプライブラリを追加
  • idaclang: 「--idaclang-mangle-format」スイッチを追加しました。 これは、ユーザーがカスタムネームマングリングフォーマットを設定したいときに、tilibの-Gオプションと同様に機能します。

標準プラグイン

  • PDB: Windowsで、レガシーPDBファイルのロードにMSDIAを使用するように、デフォルトでフォールバックモードを有効にしました。
  • picture_search: バイナリに埋め込まれたラスターイメージを検索して表示するための新しいプラグイン
  • svdimport: cluster、derivedFrom、dim/dimIncrement周辺属性のサポートを追加
  • svdimport: プラグインのUIにフォルダベースのツリーを使用するように変更
  • swift: Swift メタデータの解析とフォーマット
  • swift: 単純型(enum, structs)をローカル型にインポート

カーネル(Kernel)

  • kernel: オフセット用の新しいフラグ REFINFO_SELFREF を追加 (ベースは現在の要素のアドレスと同じ)。

スクリプトとSDK

  • IDAPython: C++ SDK の processor_t を公開 (ida_idp._processor_t として)
  • SDK: 外部プログラムの出力をキャプチャするためのcapture_process_output()を追加。
  • SDK: レイジーロードされたdirtree choosersのサポートを追加。 CH2_LAZY_LOADED フラグは、ディレクトリが展開されたときに、 ディレクトリのコンテンツをロードするために dirtree ベースのチョーサーで使用することができます。
  • SDK: 非推奨の qerrcode() (代わりに errno に直接アクセスできます)

UI

  • UI: 現在のセグメントのメモリースナップショットを取得する簡単な方法を追加。
  • UI: 様々なプレフィックス(例:@r1)を使用するプラットフォームで、一致するレジスタのハイライトを改善。
  • UI: 逆アセンブルで、構造体や配列のメンバーの行プレフィックスのアドレスが、 それらのメンバーのオフセットと共に増加するようになりました。
  • UI: テーマでCSSを使用して、リスト(IDA View、Pseudocode、...)の背景に画像を指定することが可能になりました。
  • UI: 構造体や配列の途中のアドレスにジャンプすると、逆アセンブル・リストの正しい行にカーソルが配置されるようになりました。
  • UI: "Wait "ダイアログを一定のタイムアウト後にのみ表示するように変更 (これにより、ポップアップするダイアログの数を減らすことができます)

逆コンパイラ

  • 逆コンパイラ: 'alt+enter' ショートカットで新しい擬似コードウィンドウにジャンプするアクションを追加。
  • decompiler: 対応する32ビット逆コンパイラライセンスが利用可能な場合、IDA64で32ビットファイルの逆コンパイルが可能になりました。



IDA 8.1ハイライト

IDA 8.1 が正式にリリースされ、プライベートLumina サーバーなどの優れた機能が追加されました。

プライベートLuminaサーバー

Luminaの公開データベースは、数年前から公開されており、有用な情報が満載です。 しかし、守秘義務の関係ですべての組織が利用できるわけではありません。 そこで、組織内で機能メタデータを共有するために利用できるプライベートサーバーのオプションを提供することにしました。

IDA Teamsには無償のLuminaライセンスが含まれ、IDA Proユーザーは別途購入することができます。

Luminaサーバーについての詳細はこちらから

新しいアイコンの紹介

IDAのための新しいアイコンセットがデザインされました。使用されているアイコンは、IDA版専用のものとなります。

32ビットバイナリ(IDA32)用のIDAを順次終了へ

世界は64ビットに移行しており(実際、IDAも7.0以降64ビット実行ファイルです)、 32ビットIDAが使われることは少なくなってきています。 実装の都合上、32ビット実行ファイルの逆コンパイルに使用する必要がありましたが、現在この制限を徐々に解除しており、 将来的には32ビットファイルはIDA64で解析・逆コンパイルされるようになります。 最終的には、32ビットIDAは完全に非推奨とし、レガシー.idbファイルを扱うためだけに残しておく予定です。

Golang regabiサポート

最近のGoのバージョンでは、いくつかのアーキテクチャで、オリジナルのスタックベースの呼び出し規則ではなく、 レジスタベースの呼び出し規則 (ABIInternal) が有効になっています。 IDAでは__usercallを使って手動で記述することができましたが、 現在は検出されたGoのバージョンとバイナリのアーキテクチャに基づいて、 標準の__golang規約のためのレジスタを自動的に割り当てるようになっています。

例えば、sliceと2つの整数を取る関数は、8.0では以下のように手動で記述する必要がありました。

__int16 __usercall main_crc16@(_slice_uint8 buffer@<0:rax, 8:rbx, 16:rcx>, __int64 start@, __int64 length@)

8.1では以下のように問題なく動作します。

__int16 __golang main_crc16(_slice_uint8 buffer, __int64 start, __int64 length);

変更点・新機能の一覧

IDA TeamsとLumina

  • Lumina: プライベートLuminaサーバーが利用可能になりました。
  • Lumina: LUMINA_HOSTとLUMINA_PORTの設定パラメータを削除(これらの値は代わりにレジストリに保存/取得されます)。
  • Teams:Vaultサーバーのパスワード保存をPBKDF2ハッシュへ変更。

プロセッサー・モジュール

  • ARM: Android NDK 19 ツールチェーンで生成されるA32スイッチパターンの認識を改良。
  • XTENSA: nop.n命令のデコードを追加。
  • XTENSA: a1レジスタを'sp'と表示するようにしました。

ファイルフォーマット

  • ELF:ARM: R_AARCH64_IRELATIVE リロケーションのサポート追加

FLIRT / TILS / IDS

  • FLIRT: icl 221 (Intel C++ 2022.1) 用の署名を追加。
  • FLIRT: ucrt 22621の署名を追加。
  • FLIRT: VC: vc1431 (Visual Studio 16.11.10) 64bit用の署名を追加。
  • FLIRT: VC: vc1432 (Visual Studio 16.11)用の署名を追加。

標準プラグイン

  • golang: regabi呼び出し規則のサポート追加

カーネル(Kernel)

  • noret.cfg: より多くの __noreturn 関数名を追加。

スクリプトとSDK

  • SDK: アプリケーションのビット数の変更 (例:inf_set_64bit()) で、 基本的な型サイズも調整されるようになりました。
  • SDK: 64ビットモードをサポートするプロセッサーモジュールはPR_USE64を設定しなければならないようになりました。

UI

  • UI:IDAでは、エディション(Pro/Home/Free/Teams)に応じた新しいアイコンが使用されるようになりました。

逆コンパイラ

  • decompiler: x86: スタック引数を持つ __fascall 関数の検出が改善されました。




IDA 8.0ハイライト

いつものように、IDAは多くの面で改良されましたが、今回最も重要な機能は、新しいIDA Teamsの導入です。

IDA Teamsがリリース!!

IDA Teamsの詳細はこちらから

新しい製品の最後の仕上げに懸命に取り組んできました。シームレスなコラボレーションを実現する統合ツールです。

最高のリビジョン管理ツールに触発され、IDA TeamsはそのキーコンセプトをIDAのデータベースとワークフローに導入しました。

  • リビジョンコントロール
  • 属性の変更
  • 差分とマージ

iOS 16 dyld 共有キャッシュのサポート

Appleは再び、モバイルオペレーティングシステムのシステムファイルの内部フォーマットを変更し、 パフォーマンスとメモリ使用量を改善しました。そのため、新しい調整をサポートするためにIDAを更新しました。

アウトライン化された関数

最近のiOSバージョンでAppleが使用したもう一つの新しいトリックは、アウトライン化された関数です。 これはコードサイズの最適化で、コンパイラが複数の関数で使われる共通の命令シーケンスを新しい擬似関数に抽出し、 それを複数の場所から「呼び出す」ものです。

この動作は、特にアウトライン化された関数が親関数のレジスタやスタック変数を任意に使用する場合、 逆コンパイルされた疑似コードを醜くする傾向があります。レジスタや親関数のスタック変数を使用する場合は特にそうです。 このような関数には、特別な属性 でマークすることができ、逆コンパイルされたコードはより見栄えが良くなります。

たとえば、このような最適化でコンパイルされたファイルの一部を次に示します。

最初の擬似コードでは、コンパイラが生成した _OUTLINED_FUNCTION_NN フラグメントへの明示的な呼び出しと、 逆コンパイラが呼び出しによって損なわれたと見なすためにオレンジでマークされたいくつかの変数が確認できます (これは通常の関数への呼び出しの場合と同じです)。

これらの擬似関数に 'outline' 属性を付けて擬似コードを更新すると、逆コンパイラがすべてをインライン化し、 オレンジ色の変数はなくなります。

Golang 1.18

新バージョンの言語では、メタデータのレイアウトに変更が導入されました。 新しいIDAのバージョンはメタデータを解析し、関数名をうまく復元することができます。

例えば、ここにIDA 7.7で取り除かれたgolang 1.18のバイナリがあります。

そしてIDA 8.0の同じバイナリはこちら。

ARC逆コンパイラ

ARCプロセッサは、SSDドライブやWi-Fiチップセットなど、多くの組み込み機器に使用されています。 また、数年前まで悪名高いIntel MEに使用されていたコアでもあります。 新しいデコンパイラでは、現在IDAでサポートされているすべてのARC命令セット (従来の32ビットISA、32/16ビットARCompact、新しいARCv2)をサポートしています。 遅延 スロット、条件付き命令、ゼロオーバーヘッドループがサポートされています。

※注: この逆コンパイラは、最初は IDA Teams Ultra バンドルの一部としてのみ利用できます。

もうPython 2は必要ありません

Python 2.7のサポートが終了して2年以上が経過し、そろそろ手放す時期が来ているようです。 IDA 8.0 では、最新の 3.10 を含む Python 3.x のみをサポートします (Windows インストーラには Python 3.10.5 が含まれています)。

Function Finder プラグイン (patfind) によるファームウェア解析の改善

ファームウェアのバイナリは通常、シンボルやその他のメタデータがなく、 IDAがマークされていないロードされたデータからコードを見つけるのに役立ちます。 そのため、ユーザーは手作業でそれを行う必要がありました。 新しいリリースでは、Ghidra で使用されているパターン形式を利用するプラグインを追加しました (マイナーな拡張機能付き)。 このプラグインは、バイナリおよびバイナリに似た形式に対してデフォルトで有効になっており、 IDA がより多くのコードを自動的に検出するのに役立ちます。 また、通常の構造化ファイルに対して手動で呼び出して、参照されていないコードを見つけることもできます。

デフォルト設定での初期自動分析後に発見された関数の数の比較:

FLAIRパターンジェネレータ(makepat)

FLAIRツールキットは、IDA Proのすべてのユーザーが利用でき、静的ライブラリからFLIRTシグネチャを作成することができます。 しかし、そのようなライブラリは常にあるわけではなく、最終的にリンクされたバイナリしかない場合もあります。 makepatプラグインは、任意のIDAデータベースの関数に対する.patファイルの作成をサポートします。 Lumina用に追加された機能を使って、パターン内の可変バイトをマークします。 .patはsigmakeで署名ファイルとしてコンパイルされ、他のファイルに適用されます。

変更点・新機能の全リスト

プロセッサーモジュール

  • 68K:範囲チェックにcmpaを使用するスイッチのサポート
  • ARM: T疑似レジスタを介したARM/Thumbモードの手動設定の扱いを改善
  • AVR: ATmega640用のコンフィグを追加
  • PC:機能認識を改善

デバッガ

  • PIN: PIN 3.22-98547をサポート

ファイル形式

  • COFF: /bigobj オプションでコンパイルされたARM64とARMv7 のオブジェクトファイルをサポート
  • DWARF: libdwarfをバージョン20220625(aka 0.4.1)にアップグレード
  • MACHO: iOS16+ のdyldcachesにおけるブランチマッピングのシンボル化を改善
  • MACHO: iOS16のdyldキャッシュのサポート
  • MACHO: dyld 共有キャッシュをロードする際、「シングルモジュール」オプションをデフォルトの選択肢に

FLIRT / TILS / IDS:

  • FLIRT: GO: golangのシグネチャのカバレッジを拡大
  • FLIRT: MFC: vc1431のシグネチャを追加(Visual Studio 16.11.10)
  • FLIRT: VC: vc1431 32bit用のシグネチャを追加(Visual Studio 16.11.10)
  • idaclang: cmdlineツールに「--idaclang-parse-static」オプションを追加
  • idaclang: 「--idaclang-extra-c-mangling」オプションを導入し、C++, C, Objective-C などの言語が混在する入力に対してタイプライブラリをビルド可能に
  • idaclang: 現在ロードされているファイルに対応するデフォルトのターゲット設定を事前設定

標準プラグイン

  • DSCU: iOS16からのグローバルオフセットテーブルのロード(およびシンボル化)のサポート
  • dyldcaches
  • golang: go1.18 のサポート (関数名、型)
  • OBJC: objc_alloc_init() を使用して Objective-C オブジェクトを初期化する関数の逆コンパイルを改善
  • OBJC: idbに存在しないメソッドに対する人工的なインポートを作成することにより、 Objective-Cバイナリの逆コンパイルを改善
  • patfind: マークされていないバイナリのコードパターンを検出する新しいプラグイン

スクリプティングとSDK

  • IDAPython: Python 2サポートを削除
  • SDK: 空白をトリミングする新しいメソッドqstring::rtrim()を追加
  • 標準アクション (挿入、削除、編集、更新) をカスタマイズするためのセレクターにget_stdact_descs()を追加
  • シェルと同じルール (例: ** と [az] のような範囲) に従って、パターンに対してパス全体を照合できる wildcard_path_match()を追加
  • SDK: has_external_refs()のコメントを改善
  • SDK: ハッシュ化されたSTLコンテナでqstringの使用法をサポート

  • UI: [Debugger] > [Process options...] ダイアログのコマンドライン引数が 1024 文字に制限されなくなりました

逆コンパイラ

  • オプション HO_PROP_VOLATILE_LDX を追加して、揮発性メモリ アクセスをチェックせずにロード命令を伝達
  • アウトライン化された関数のサポートを追加
  • arm: 接尾辞 _from_thumb、_from_arm、_veneer を持つサンク関数を認識
  • 戻り値のばらつき(=複数のレジスタ/スタック位置の使用)の取り扱いを改善
  • 新しい逆コンパイラ HEXARC (ARCプロセッサ・ファミリ用)
  • pc: 制御レジスタ操作組込関数 (例: __writecr0) が 32 ビットモードで 32 ビット値で動作
  • 文字要素の型としてWCHAR, wchar16_t, wchar32_tをサポート