数値システム
一般的な数値システムには、2 進数、10 進数、16 進数があります。
2進数
:数字を 0 と 1 の文字で表します。
10進数
:数字を 0 から 9 までの 10 個の文字で表します。
16進数
:数字を 0 から 9 までの 10 個の文字と A から F までの 6 個の文字で表します。
Python のインタラクティブモードで 0x45 と入力すると、先頭の 0x は 16 進数と解釈されます。Enter キーを押すと、0x45 が 10 進数に変換され、出力結果は 69 になります。
もし 10 進数を 16 進数に変換したい場合は、hex () 関数を使用します。
Bin () 関数は他の進数の数字を 2 進数に変換します。出力結果は 1000101 です。先頭の 0b は 2 進数であることを示しています。
10 進数と 16 進数を 2 進数に変換する
2 進数を 10 進数と 16 進数に変換する
直接入力された数字は Enter キーを押すと 10 進数に変換されますが、Python の hex () や bin () 関数を使用して 16 進数や 2 進数に変換して出力することもできます。
便利なのは、メニューの「VIEW-CALCULATOR」を使用して、IDA の組み込み変換器を開くことです。
この変換器は、数字をさまざまな進数に変換した結果を同時に表示します。また、数字に対応する ASCII 文字も表示されます。たとえば、0x45 に対応する文字は「E」です。
ほとんどのリバースエンジニアリング作業は 16 進数を扱うため、32 ビットの 16 進数で負の数を表現する方法が問題となります。32 ビットの 2 進数では、最初のビット(bit)が 0 の場合は正数を、1 の場合は負数を表します。
IDA の変換器では、入力時にデフォルトで正数として扱われますが、「-」記号を数字の前に付けると負数として扱われます。
最大の負数 - 1 は 16 進数で「0xffffffff」に対応し、最小の負数は「0x80000000」です。正負を考慮しない場合、すべての数は「0 から 0xffffffff」までの正の値です。正負を考慮すると、「0x0 から 0x7fffffff」はすべての正数、「0xffffffff から 0x80000000」はすべての負数です。
ASCII コード文字
16 進数から文字に変換するには、chr () 関数を使用します。
IDA の検索機能
-
次の実行可能命令(NEXT CODE):次の実行可能命令(CODE)を検索するための機能です。途中に実行可能命令でない部分がある場合、それはスキップされます。
-
次のデータ(Next data):次のデータを検索するための機能です。
-
次の探索済み項目(NEXT EXPLORED):次の実行可能命令またはデータを検索するための機能です。
-
次の未探索項目(NEXT UNEXPLORED):次の実行可能命令またはデータでない項目を検索するための機能です。
ハードコードされた値を検索する(SEARCH INMEDIATE):実行可能命令やデータ項目の中の定数を検索するための機能です。
新しいウィンドウが開き、検索結果が表示されます。
テキストを検索する(TEXT):入力したテキストを検索し、正規表現をサポートします。単一の検索を選択した場合、次のテキスト(NEXT TEXT)を使用して検索を続ける必要があります。
検索結果ビュー
バイトシーケンスを検索する(SEQUENCE OF BYTES):入力したバイトシーケンスを検索するための機能です。
検索結果ビュー
該当する検索結果をクリックすると、IDA は逆アセンブリビューに移動します。
不完全な関数を検索する(NOT FUNCTION):次の不完全な関数を検索するための機能です。
アドレス 004013D7 上の単独の RET 命令は関数として認識されません。時には、いくつかの不正な命令によって関数が正しく認識されないことがあります。