2012-08-06 33 views
1

我使用Windows7的x64和OllyDbg的2.01(阿爾法2)如何注入在Windows7 64位Windows API調用使用OllyDbg的

我有一個exe,我想彈出一個消息框,顯示執行過程中的一些信息,並有一個偉大的教程告訴您如何做到這一點: How to inject code into a exe file,基本上,這是有關將MessageBoxA API調用與想要的信息:

PUSH 0     ; BUTTONS = <OK ONLY> 
PUSH 1008751   ; CAPTION = Our adress of the "INJECTED NOTEPAD" 
PUSH 1008751   ; MESSAGE = Same like above. 
PUSH 0     ; ICON  = <NO ICON> 
CALL MessageBoxA  ; Run MessageBoxA with the Params above. 

它在現場調試會話時的工作:我注入代碼,然後調試它 - 消息框會彈出。但是我保存的可執行文件 (RMB->編輯 - >全選; RMB->編輯 - >複製到可執行文件;在新窗口中,人民幣 - >保存文件),然後執行,它只是墜毀。

下面是我觀察到:

之前保存的CALL MessageBoxA實際上CALL 74DAFD1E,這意味着 是74DAFD1E API MessageBoxA的地址,但保存之後, 地址更改爲一些其他的價值。

另外,你認爲ASLR將幾乎停止注入Windows API調用?

任何想法?我怎麼能設法顯示我想從那個EXE的信息?
在此先感謝!

+0

是的,最有可能的是ASLR在這裏殺死你,因爲MessageBoxA的地址在加載時是固定的。一個簡單的方法就是在調用MessageBoxA的EXE中找到另一個位置,並複製它使用的調用__'代碼。最可能的情況是它會調用一個已修復的存根。 – 2012-08-06 23:45:28

+0

謝謝,我試過了,它調用類似於:CALL DWORD PTR DS:[<&USER32.MessageBoxA>],但是當我在我的位置注入此代碼時,它僅轉換爲固定地址,將失敗 – 2012-08-07 03:02:09

+1

否,您需要查看靜態可執行文件。試試[IDA](http://www.hex-rays.com/products/ida/index.shtml)。他們有一個免費版本。或者,使用十六進制編輯器。 – 2012-08-07 14:46:10

回答

0

這是由ASLR引起的,爲了使它在Windows7中工作,一種方法是禁用ASLR(需要您自擔風險)。

您也可以下載Enhanced Mitigation Experience Toolkit (EMET)工具,安裝,並在彈出的對話框中運行EMET_GUI.exe,禁用ASLR和重啓: EMET GUI

您可能要完成你的工作後,重新啓用ASLR,如它會影響您的操作系統的安全性。

相關問題