2014-02-26 59 views
0

我想破解到一個EXE來找到某些功能的執行情況,並在一個注入的DLL中執行操作。 該exe是一種屏幕保護程序,幸運的是非常簡單,所以它使用重要的字符串來標識代碼段。ida專業虛擬功能實際聲明

我的兩難處境是,'getaxis'這個功能之一是一個虛擬功能。我知道這多虧了弦窗和其他告密者信息的字符串(Audioplayer.Tracklist :: GetAxis),我上溯到RDATA部分

.data:01E204B0 off_1E204B0  dd offset aAudioplayer_to ; DATA XREF: _call_vfuncr 
.data:01E204B0           ; _call_vfunc+26r 
.data:01E204B0           ; "Audioplayer.Tracklist::Internal_GetTrack" 
... 

使用IDA親我已經成功追蹤了非常函數調用,但我無法找到實際的虛擬功能實現。

因此,這裏是我的問題:

1 - 我懵了關於這個問題,作爲一個新手在拆卸:有沒有辦法真正找到一個虛函數的實現? Ida清楚地顯示了「函數窗口」中的各種'subs',但裏面有幾百個函數,我希望找到一個虛擬函數聲明的更好方法。

2-子名稱和虛擬函數之間是否有任何關聯。我無法找到任何。

那麼如何在反彙編代碼中找到實際的虛函數聲明? 這可能嗎?

謝謝。

+0

這真的是一個如此困難的課題嗎?難怪我在谷歌上也找不到任何東西。 –

回答

0

你知道用什麼編譯器/語言來生成這個程序嗎?我只熟悉大多數C++實現如何生成vftables。 「瞭解你的敵人」是逆向工程的關鍵。

從它的外觀來看,那些'_call_vfunc'函數可能是某種其他語言的編譯器(比如說一些隨機的Pascal編譯器,或者其他)需要保留這種元數據的某種實現細節。當一個pure/nullptr條目用於vftable時,call_vfunc可能會引發錯誤,因此使用/引用該字符串。

如果使用call_vfunc執行所有虛函數調用,則可以掛鉤該函數並記錄它最終使用的vftable地址。除非這是一個過於複雜的屏幕保護程序,否則不應該使用太多的vftables。如果IDAPython有任何調試器API,則可以在使用IDA進行調試時通過Python腳本執行所有日誌記錄。