banner
lca

lca

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

《從零開始學IDA逆向》學習筆記-2(數值運算)

image

數值系統#

常用的數值系統有(二進制) 、decimal (十進制) 和 hexadecimal (十六進制) 。

Binary(二進制):僅以 0 和 1 字符表示數字。
Decimal(十進制):使用 0~9 共 10 個字符表示數字。
Hexadecimal(十六進制):使用 0~9 加上 A~F 共 16 個字符表示數字。

在 Python 交互中輸入 0x45, 由於開頭的 0x 將會被解釋為十六進制數。直接按回車可將 0x45 轉換為十進制數,輸出結果為 69。

image

image

如果需要將十進制轉換為十六進制數,可以使用 hex () 函數。

image

Bin () 函數將其他進制的數字轉換為二進制數。輸出結果是 1000101。開頭的 0b 代表這是一個二進制數,

十進制和十六進制轉換為二進制數

image

二進制數轉換為十進制和十六進制

image

所有直接輸入的數字在按回車後會轉換為十進制數輸出,通過 Python 函數hex()bin()可以轉換為十六進制或者二進制數輸出。

為了方便起見,通過菜單VIEW-CALCULATOR, 可以打開 IDA 內置的轉換器。
該轉換器能夠同時顯示數字轉換為各種進制的結果。也會顯示數字對應的ASCII字符。例如0x45對應的字符是E

image

幾乎所有逆向工作都要涉及十六進制數,那麼問題是如何用 32 位十六進制表示一個負數。在一個 32 位二進制數中,第一個比特 (bit) 上的 0 用來表示正數,1 來表示負數。

image
在計算器中將 0x7fffffff 再加上 1, 最高位變成 1, 其他位變成了 0。
image

IDA 轉換器在輸入的時候默認都是正數,除非我們在數字前面加上 “-” 號。
最大負數 - 1 對應十六進制 0xffffffff,最小負數 0x80000000。如果不考慮正負,所有的數從0到0xffffffff都是正值。考慮正負,0x0到0x7fffffff是所有的正數,0xffffffff到0x80000000 是所有的負數。

image

ASCII 碼字符#

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

十六進制轉字符#

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 指令無法識別為函數。有時候,因為一些非法指令導致有些函數無法被 IDA 識別出來。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。