banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

「ゼロから始めるIDA逆向き学習」学習ノート-2(数値演算)

画像

数値システム#

一般的な数値システムには、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 になります。

image

image

10 進数を 16 進数に変換するには、hex () 関数を使用します。

image

Bin () 関数は他の進数の数字を 2 進数に変換します。出力結果は 1000101 です。先頭の 0b は 2 進数であることを示しています。

10 進数と 16 進数を 2 進数に変換する

image

2 進数を 10 進数と 16 進数に変換する

image

直接入力された数字は Enter キーを押すと 10 進数に変換され、Python の hex () や bin () 関数を使用して 16 進数や 2 進数に変換して出力することができます。

便利なのは、メニューの「VIEW-CALCULATOR」を使用して、IDA に組み込まれた変換ツールを開くことができることです。
この変換ツールは、数字をさまざまな進数に変換するだけでなく、数字に対応するASCII文字も表示します。たとえば、0x45に対応する文字はEです。

image

リバースエンジニアリングのほとんどの作業は 16 進数を扱う必要がありますが、32 ビットの 16 進数で負の数を表す方法はどうなるでしょうか。32 ビットのバイナリ数では、最初のビット(bit)の 0 は正数を表し、1 は負数を表します。

image
計算機で 0x7fffffff に 1 を加えると、最上位ビットが 1 になり、他のビットが 0 になります。
image

IDA の変換ツールでは、入力時にデフォルトで正数として扱われますが、数字の前に「-」を付けると負数として扱われます。
最大の負数 - 1 に対応する 16 進数は0xffffffffであり、最小の負数は0x80000000です。正負を考慮しない場合、0から0xffffffffまでのすべての数は正の値です。正負を考慮すると、0x0から0x7fffffffはすべての正数であり、0xffffffffから0x80000000はすべての負数です。

image

ASCII 文字#

http://www.asciima.com/ascii/12.html

16 進数から文字への変換#

chr()

image

IDA の検索機能#

image

  • 次の実行可能な命令(NEXT CODE):この機能は、次の実行可能な命令(CODE)を検索するために使用されます。途中に実行可能な命令でない部分がある場合、その部分はスキップされます。
  • 次のデータ(Next data):この機能は、次のデータを検索するために使用されます。

image

  • 次の探索済み項目(NEXT EXPLORED):次の実行可能な命令またはデータを検索するために使用されます。
  • 次の未探索項目(NEXT UNEXPLORED):次の実行可能でない命令またはデータを検索するために使用されます。

ハードコードされた値の検索(SEARCH INMEDIATE):この機能は、実行可能な命令やデータ項目の中の定数を検索するために使用されます。

image

検索結果を表示するために新しいウィンドウを開きます。

image

テキストの検索(TEXT):入力されたテキストを検索し、正規表現をサポートします。単一の検索を選択した場合は、次のテキスト(NEXT TEXT)を使用して検索を続ける必要があります。

image

検索結果のビュー

image

バイトシーケンスの検索(SEQUENCE OF BYTES):入力されたバイトシーケンスを検索します。

image

検索結果のビュー

image

該当する検索結果をクリックすると、ida はディスアセンブリビューに移動します。

image

不完全な関数の検索(NOT FUNCTION):次の不完全な関数を検索するために使用されます。

image

アドレス 004013D7 上の単独の RET 命令は関数として認識されません。時には、いくつかの不正な命令によって関数が正しく認識されないことがあります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。