数値システム#
一般的な数値システムには、2 進数(binary)、10 進数(decimal)、16 進数(hexadecimal)があります。
2進数(binary)
:数字を 0 と 1 の文字で表します。
10進数(decimal)
:数字を 0 から 9 までの 10 個の文字で表します。
16進数(hexadecimal)
:数字を 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 ビットのバイナリ数では、最初のビット(bit)の 0 は正数を表し、1 は負数を表します。
計算機で 0x7fffffff に 1 を加えると、最上位ビットが 1 になり、他のビットが 0 になります。
IDA の変換ツールでは、入力時にデフォルトで正数として扱われますが、数字の前に「-」を付けると負数として扱われます。
最大の負数 - 1 に対応する 16 進数は0xffffffff
であり、最小の負数は0x80000000
です。正負を考慮しない場合、0から0xffffffff
までのすべての数は正の値です。正負を考慮すると、0x0から0x7fffffff
はすべての正数であり、0xffffffffから0x80000000
はすべての負数です。
ASCII 文字#
http://www.asciima.com/ascii/12.html
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 命令は関数として認識されません。時には、いくつかの不正な命令によって関数が正しく認識されないことがあります。