banner
lca

lca

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

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

數值系統

常用的數值系統有:二進制、十進制和十六進制。

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

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

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

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

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

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

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

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

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

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

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

ASCII 碼字符

十六進制轉字符

chr()

IDA 中的搜索功能

  • 下一條可執行指令 (NEXT CODE):這個功能用於搜索下一條可執行指令 (CODE)。如果中間有一部分不是可執行指令,這部分將會被跳過。

  • 下一處數據(Next data):這個功能用於搜索下一處數據。

  • 下一處已探查項 (NEXT EXPLORED):搜索下一處可執行指令或者數據。

  • 下一處未探查項 (NEXT UNEXPLORED):搜索下一處非執行指令且非數據。

搜索硬編碼值 (SEARCH INMEDIATE):該功能用於搜素可執行指令以及數據項中的常量。

打開新窗口,顯示搜索後的內容

搜素文本 (TEXT):搜索輸入的文本,支持正則表達式。如果讀者選擇了單個搜索,還需要使用下一處文本 (NEXT TEXT) 來繼續搜索。

搜索結果視圖

搜索字節序列 (SEQUENCE OF BYTES):搜索輸入的字節序列。

搜索結果視圖

點擊相應的搜索結果,ida 會進入到反彙編視圖中。

搜索非完整函數 (NOT FUNCTION):搜索下一處不完整的函數。

004013D7 地址上單獨的 RET 指令無法識別為函數。有時候,因為一些非法指令導致有些函數無法被 IDA 識別出來。

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