2
好的,我正在嘗試寫一個不是由我寫的程序的不同的基本修改。
我沒有它的來源。
我也不在乎這隻適用於單一版本的程序,所以硬編碼偏移是可行的。無論如何,我已經找到了函數,並在編譯的程序中調用它。C#:劫持近乎相對的電話
.text:1901C88F loc_1901C88F: ; CODE XREF: ConnectionThread+1A2j
.text:1901C88F ; DATA XREF: .text:off_1901CC64o
.text:1901C88F 8B C8 mov ecx, eax ; jumptable 1901C862 case 11
.text:1901C891 8B C6 mov eax, esi
.text:1901C893 E8 48 C5 FF FF call ChatEvent
據IDA的全功能的簽名是:
char *__usercall ChatEvent<eax>(char *Data<eax>, unsigned int Length<ecx>)
我已經有我需要在運行時修補程序,並做我所需要的任何其他操作。
我需要什麼,是能夠寫出像這樣一個功能:
bool ProcessChat(char *Data, unsigned int Length);
char *__usercall HijackFunction(char *Data, unsigned int Length){
if (ProcessChat(Data, Length))
Call OriginalChatEvent(Data, Length);
}
得到什麼,我試圖做的JIST?
使用stdcall函數很容易,只需用我自己的函數地址替換4字節地址即可。但這是一個近乎相對的呼叫,這是更煩人的。
那麼,任何人有任何想法?
Duh。計算相對地址。 – 2010-03-13 23:02:32
Anton Tykhyy ..有幫助,謝謝。 我的問題是上下文,我可以很容易地計算出相對地址0x1901C898 - MyPointer。 但是,我不能爲了我的生活而想到如何在C#中編寫__usercall委託,我可能只是腦筋急轉彎。 無論如何,這是在switch語句中,所以我可以輕鬆地將該特定情況重定向到我想要的任何內存點。但就像我說的,我對這個堆棧感到擔憂,並使這個世界爆炸。 我不想搞亂堆棧,並使所有的東西爆炸... – Lex 2010-03-14 00:10:05
你可以重新編譯C#二進制文件嗎?反射器應該能夠爲你提取整個項目.... – 2010-03-14 00:48:39