我目前正在嘗試獲得RE方面的一些實踐,並且需要一些修補DLL的幫助。這是我的步驟:我首先分析IDA中的主程序和dll,以了解邏輯。然後,我切換到OllyDBG進行修補。好吧,問題在於,由於Olly動態加載dll(與IDA中的靜態獨立分析相反),所以偏移量是不同的,並且我不知道如何找到我在IDA中檢查過的偏移量。
預先感謝!簡單的方法來“重新發現” dll中的偏移量?
我目前正在嘗試獲得RE方面的一些實踐,並且需要一些修補DLL的幫助。這是我的步驟:我首先分析IDA中的主程序和dll,以了解邏輯。然後,我切換到OllyDBG進行修補。好吧,問題在於,由於Olly動態加載dll(與IDA中的靜態獨立分析相反),所以偏移量是不同的,並且我不知道如何找到我在IDA中檢查過的偏移量。
預先感謝!簡單的方法來“重新發現” dll中的偏移量?
如果僅更改了基數,但是偏移量是恆定的(我猜是這樣),則可以在IDA中重新設置程序的基數。您可以通過編輯->段->重新設置程序...菜單來實現。在IDA中指定與Olly中相同的起始基準應該會有所幫助。由於許多原因,基準可能有所不同,其中之一可能是ASLR。
是否有一些簡單的方法可以“重新發現” dll中的偏移量?
是的,這是算法:
Target_Address_in_OllyDbg = Source_Address_in_IDA-Base_Address_in_IDA + Base_Address_in_OllyDbg
以下是定義:
Target_Address_in_OllyDbg
:OllyDbg中的目標地址。
Source_Address_in_IDA
:IDA中的源地址。
Base_Address_in_IDA
:IDA中反彙編模塊的基地址。您可以通過進入IDA菜單欄中的編輯->細分->重新設置程序... 來找到該值。該對話框中 Image base 的 Value 是 Base_Address_in_IDA
。
Base_Address_in_OllyDbg
:目標模塊的基地址,以OllyDbg表示。您可以通過按OllyDbg中的 Alt-E (或轉到OllyDbg菜單欄中的 View->可執行模塊)來找到該值。在可執行模塊窗口中找到目標模塊;最左邊的字段( Base )是 Base_Address_in_OllyDbg
。
如果有人覺得有用,我給自己做了一個小計算器,可以很容易地在反彙編器中獲取地址,該地址使用上述相同的算法,當前默認為二進制忍者的基址,但這很容易在代碼中更改。 https://github.com/scrapbird/OffsetCalc
我使用這個小的IDC腳本,我只設置了一次基數,然後使用AskAddr輸入olly地址。
auto olbase,oladdr,rva; olbase = 0x20000; oladdr = AskAddr(0,“輸入地址(如olly所示));跳轉(MinEA()+ oladdr-olbase);
我通常在IDA中將其重新設置為 0
。然後,使用StrongOD的 Adv Ctr + G
選項,您只需將IDA中的地址作為RVA放入所需的模塊即可。