2012-12-02 27 views
1

我有一個使用的例子庫test2.dll一個示例程序test1.exe如何更改呼叫與逆向工程

  • test.dll所包含的功能和A()相同類型的B()
  • test1.exe調用A然後退出。

在這裏,我找到了呼叫A()The line which test.exe calls Ahttp://i.stack.imgur.com/5W9Jd.jpg

現在,如果我沒有記錯,我需要用正確的B()偏移更換88FDFFFF,卻怎麼也我計算它,以便B()將被調用,而不是A()

+1

如果您打算使用二進制調試工具,您最好在認識目標計算機的指令集方面進行認真的投資。這些信息很容易在參考手冊中找到;對於x86,英特爾提供了很容易找到的在線參考資料,這些參考文獻將詳細淹沒您。 –

回答

2

如果這在x86呼叫相對指令,偏移值是通過減去呼叫之後的指令的地址計算(=調用指令位置+ 5個字節),從目標的地址。所以,你需要修補偏移地址(B) - 地址(callinstruction + 5)。

+0

好的。但是'B()'位於一個dll中,那麼'address(B)'究竟是什麼?我知道它是'test2.dll'內的入口點,但是如何將它轉換爲'text1.exe'中的地址?並且'callinstruction + 5 = ADD ESP,0C'? – assafmo

+1

歡迎來到逆向工程,在那裏你可以瞭解更多關於系統細節的信息,而不是你真正想知道的。您需要花時間學習如何組織DLL,以及標準代碼如何調用DLL中的函數。然後你就會明白如何找到地址(A),因此地址(B)。 [我不會寫「callinstruction + 5 = ADD ...」作爲一個合理的等式。我沒有檢查你的例子,看看這個調用之後有什麼指令;它可能是那個具體的ADD是那個指令。在這種情況下,「地址(callinstruction)+5 ==地址(ADD ...)」如果這是你的問題] –

-1

我建議先學習asm基礎知識,並使用HIEW hexeditor/disassembler來改變簡單代碼。

+0

我知道asm,並且HIEW使用起來不舒服。 – assafmo

+1

是的,HIEW是99.9%反向器的基本工具,已經習慣了,使用起來非常簡單。 –

+1

大多數反向器使用IDA和OllyDBG。我爲此謀生,從未使用過HIEW。只是我2美分。 – samoz

0

如果b在test1.exe進口很容易,否則你必須使用LoadLibrary和GetProcAddress的。

ctrl+N,看是否b進口與否。