我使用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的信息?
在此先感謝!
是的,最有可能的是ASLR在這裏殺死你,因爲MessageBoxA的地址在加載時是固定的。一個簡單的方法就是在調用MessageBoxA的EXE中找到另一個位置,並複製它使用的調用__'代碼。最可能的情況是它會調用一個已修復的存根。 – 2012-08-06 23:45:28
謝謝,我試過了,它調用類似於:CALL DWORD PTR DS:[<&USER32.MessageBoxA>],但是當我在我的位置注入此代碼時,它僅轉換爲固定地址,將失敗 – 2012-08-07 03:02:09
否,您需要查看靜態可執行文件。試試[IDA](http://www.hex-rays.com/products/ida/index.shtml)。他們有一個免費版本。或者,使用十六進制編輯器。 – 2012-08-07 14:46:10