|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2003-12-12, 02:57 AM | #1 |
榮譽會員
|
被加殼vb5/6程序的OEP定位經驗
被加殼vb5/6程序的OEP定位經驗
近日看了woodmann論壇上+splaj關於利用特徵字串尋找被加殼程序的oep方法,頗有興趣!結合我瞭解的vb5/6可執行文件的結構,說說如何定位其OEP。 任何反編譯過vb程序的人,總會見到其OEP是如下結構: //******************** Program Entry Point ******** :00401060 68B4114000 push 004011B4 :00401065 E8F0FFFFFF Call <MSVBVM60.ThunRTMain> 對於以位址004011B4開始的一段程式碼,在vb程序結構中將之稱為ExeInitStructure,儲存著程序執行啟始化所必須的資料;而其也必定是以特徵字串「VB5!」開始。所以對於被加殼的vb5/6程序,可以執行後用winhex搜尋記憶體,查到「VB5!」位址,在此為004011B4,再搜尋hex值「B4114000」,即搜尋到位址00401061,將此位址-1就是OEP:00401060 此外,利用vb函數addressof我們可以作一些研究工作。 建立一個vb標準exe工程,去除form,加入一個.bas文件,於中寫入 Attribute VB_Name = "Module1" Private Sub Main() Dim a As Long, c As Long c = getaddress(a, AddressOf Main) MsgBox ("Start address of Main() is " + Hex(a - 16)) End Sub Public Function getaddress(a As Long, X As Long) a = X + 16 End Function 編譯後執行,可以顯示sub Main()程式碼的起始位址。有興趣的不妨研究研究,看看如何突破addressof的局限,或找到替代函數 |
送花文章: 3,
|