
既存のプログラムの動作を変更するためのアセンブリコードのパッチングは、マルウェア分析、ソフトウェアリバースエンジニアリング、およびセキュリティ研究のより広範なドメインでは珍しくありません。このプロジェクトは、人気のあるIDA Pro分解者を拡張して、迅速な反復のために設計された、より堅牢なインタラクティブなバイナリパッチングワークフローを作成します。
このプロジェクトは現在、ユビキタスキーストーンエンジンのマイナーフォークを搭載しており、X86/X64とARM/ARM64パッチングをサポートし、将来のリリースで残りのキーストーンアーキテクチャを有効にする計画を立てています。
このプラグインの開発をサポートしてくれたHEX-RAYSに感謝します。
このプラグインには、IDA 7.6とPython 3が必要です。Windows、Linux、およびMacOSをサポートします。
IDAの古いバージョン(8.2以降)は、Python 3.11以降と互換性がないことに注意してください。
IDAコンソールで次の行を実行して、プラグインを自動的にインストールします。
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())または、リリースページからそれぞれのプラットフォーム用の配布可能なプラグインパッケージをダウンロードして、プラグインフォルダーに解凍することにより、プラグインを手動でインストールすることができます。
このプラグインをIDAのユーザープラグインディレクトリにインストールすることを強くお勧めします。
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))パッチングプラグインは、サポートされているアーキテクチャ(x86/x64/arm/arm64)に自動的にロードされ、IDA分解ビューの右クリックコンテキストメニューに関連するパッチングアクションを挿入します。

コンテキストパッチングアクションの完全なリストについては、次のセクションで説明します。
メインパッチングダイアログは、右クリックのコンテキストメニューのアセンブルアクションを介して起動できます。迅速に連続して1つまたは複数の指示を編集するために使用できる基本的なIDA分解ビューをシミュレートします。

組み立てラインは、手順をリアルタイムで変更するために使用できる編集可能なフィールドです。 Enterを押すと、入力された命令がデータベースにコミットされます(パッチ)。
現在の場所(別名あなたのカーソル)は常に緑で強調表示されます。パッチ /編集の結果として密集する指示は、パッチをコミットする前に赤で強調表示されます。

最後に、編集可能なアセンブリテキストフィールドに焦点を合わせながら、 UP DOWNキーを使用して、マウスを使用せずに分解ビューを上下に移動するために使用できます。
最も一般的なパッチングアクションは、1つ以上の指示を削除することです。このため、右クリックメニューでは、NOPアクションが常に表示され、クイックアクセスが表示されます。

個々の指示は、選択された範囲の範囲であることができます。
条件付きジャンプを強制するために「良い」パスを常に実行することは、もう1つの一般的なパッチングアクションです。プラグインは、条件付きジャンプ命令を右クリックする場合にのみこのアクションを表示します。

条件付きジャンプを取得したくない場合は、代わりにそれをnopできます!
パッチは、いつでもパッチングサブメニューを介して選択した実行可能ファイルに保存(適用されます)。クイックアプリのアクションにより、同じ設定を使用して後続のパッチを保存することがさらに高速になります。

また、プラグインは、各セーブ中に現在のデータベースパッチを「きれいに」適用するために使用する元の実行可能ファイルのバックアップ( .bak )を保持するために積極的に取り組みます。
最後に、パッチに不満を抱いている場合は、パッチ(黄色の)ブロックを右クリックして、元の値に戻すことができます。

バイトを元の値に戻すことは「簡単」ですが、分析を以前の状態に復元するのは「難しい」ことがあります。パッチを戻すと、追加の人間の修正が必要になる場合があります。
時間と動機付けが許す、将来の作業には次のものが含まれます。
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
外部の貢献、問題、機能のリクエストを歓迎します。将来のリリースに検討したい場合は、このリポジトリのdevelopブランチへのプルリクエストをお願いします。