用OllyDbg插入代碼彈出對話方塊

來源:互聯網
上載者:User

之前寫過一篇用OllyDbg做破解, 但是為了獲得資訊,需要通過OllyDbg調試,在適當的地方設斷點,並查看記憶體,非常麻煩,不要說不懂的人,就算是我剛做過,沒過幾個禮拜就忘的差不多了。所以如果這個工具要經常性使用,最好還是能做成一個工具:比如能彈出一個對話方塊顯示需要的資訊。 

這次花了兩個晚上搜尋、研究、實踐了一下,終於搞了出來。

首先,在網上找到一篇非常靠譜的文章,正是exactly我想要的:How to inject code into an exe file, 照其步驟走一遍,彈出一個對話方塊應該不是問題了。其基本做法是:

  1. 在空白程式碼片段(作業碼為00, 一般在最後)插入對MessageBoxA的調用 - 可通過雙擊指令逐行修改添加。
  2. 在需要的資訊產生之後的某處,加一行JMP到MessageBoxA調用的地方,當然,MessageBoxA傳入的參數是重要訊息的地址
  3. 因為在2出插入代碼是實際上是覆蓋了原有代碼,一般是將被覆蓋的代碼放到MessageBoxA調用之後,並在最後加一個JMP,跳回其接下來指令的地址。

下面是幾個值得注意/記錄的地方:

  • 傳給MessageBoxA的message地址,能不用常量地址就盡量不用,因為其可能是動態算出,在不同的session值是不一樣的 - 比如這裡,授權碼的地址是在寄存器EBX中,那麼直接傳EBX即可
  • 如何儲存修改過的exe? RMB->Edit->Select all; RMB->Edit->Copy to executable; In the new window, RMB->save file
  • 有時開啟後代碼格式不是很正常,比如明明是正常的指令,卻為解析為資料,可以RMB->Analysis->Remove analysis from module
  • 右鍵jmp指令可以Follow到目標地址
  • exe的斷點、注釋等資訊存在:OllyDbg2.1\udd\*.udd檔案中

 

修改代碼後直接debug,發現資訊是在彈出對話方塊中顯示了出來。但是,當我儲存後執行修改過的exe,卻怎麼也無法工作。Debug進去看了一下,是call MessageBoxA這個函數時出的錯,事實上,這個函數調用是針對某個函數地址的,比如:CALL 754DE055, 但檢查發現這個地址卻是錯誤的,並不對應到MessageBoxA的載入地址。

為什嗎?

一番搜尋與思考後,覺得這是ASLR的問題,ASLR=Addresss Space Layout Randomization, 他是Windows vista依賴引入的一個新的機制,其使得系統dll在進程中載入的基地址不再是固定的,從而防止使用者惡意在exe中插入對windows api的調用 - 而它也確實成功了,對於windows xp與windows 2003, 沒有ASLR這個特性,自然也不會有這個問題。

我用的是Windows7的系統,怎麼辦? 禁掉ASLR!

你需要下載一個叫做Enhanced Mitigation Experience Toolkit(EMET)的工具,安裝並運行:

把ASLR disable掉並重啟即可。

 

然後,插入MessageBoxA並儲存,然後運行破解後的代碼,一切ok!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.