假設有一個包含sprintf()的錯誤程序,我想將其更改爲snprintf,所以它沒有緩衝區溢出。我如何在IDA中執行此操作?使用IDA修補EXE
回答
你真的不想使用來自IDA pro的信息進行這種改變。
儘管IDA的反彙編質量相對較高,但其質量不足以支持可執行重寫。將調用轉換爲sprintf以調用snprintf需要將新參數推入堆棧。這需要引入一條新的指令,這會影響可執行映像中所有跟隨它的EA的EA。更新這些有效地址需要非常高質量的拆卸。特別是,你需要能夠:
- 確定可執行哪些地址數據,以及哪些代碼
- 確定哪些指令操作數的符號(地址引用)和指令操作數是數字。
Ida不能(可靠地)給你這些信息。另外,如果可執行文件與crt靜態鏈接,它可能不包含snpritnf,這將使手動執行重寫變得非常困難。
有幾種潛在的解決方法。如果在進行調用的函數中(或之後)有足夠的填充,則可能只能重寫單個函數。或者,如果您有權訪問對象文件,並且這些對象文件是使用/ GY開關編譯的(假設您使用的是Visual Studio),那麼您可能能夠編輯該對象文件。但是,編輯目標文件可能仍然需要大量修復。
但是,如果您有權訪問目標文件,那麼您可能也有權訪問源代碼。改變來源可能是你最好的選擇。
不需要在任何接近該功能的地方提供可用空間,只要您可以在某處找到(或製作)一些空間在適當的章節中,您可以用JMP將原始函數中的某些內容替換爲您的新指令序列。但是,說實話,OllyDbg如何做到這一點更容易。 – SamB 2010-07-15 19:30:04
你是對的..你不一定需要在功能附近有空間。但我不會主張頻繁做,因爲這可能會對業績產生不利影響(地區差)。對於一個打電話給sprintf的人來說,這沒關係。但是,如果你有很多打電話給sprintf的話,那麼你不想在整個地方引入一堆瘋狂的跳躍。 – 2010-07-16 02:23:51
- 1. 用IDA修補iphone calculator.app進行測試
- 2. 如何使用IDA/pro修補iPhone應用程序?
- 3. IDA Pro CommandLine補丁程序
- 4. 使用純WIX修補
- 5. 創建使用IDA
- 6. 使用方法修補程序覆蓋類修補程序(修飾符)
- 7. IDA Pro的彙編指令修改
- 8. 如何使用unittest修補方法io.RawIOBase.read?
- 9. 使用模擬修補功能
- 10. 被修補
- 11. 使用Java修改exe資源?
- 12. 使用C#EXE修改不同C#EXE文件的資源
- 13. 更改修補程序中的文件名或編輯修補程序,使修補程序保持有效
- 14. 尋找一個修補程序實用程序可以生成exe文件
- 15. 編輯(補丁)在IDA的二進制文件臨
- 16. 如何使用修復bug的修補程序
- 17. 修補程序datetime.timedelta.total_seconds
- 18. 修補流星default_connection
- 19. Lua + SWIG Monkey修補
- 20. 修補紅寶石
- 21. Esky修補程序
- 22. 修補程序/修補程序的構建和交付方法
- 23. MSI修補程序未針對修補版本(錯誤2356)
- 24. 要在Android中創建九個可修補的修補程序?
- 25. 如何在Windows上完成修補MQ修補程序
- 26. 使用ida pro提取函數
- 27. 如何在IDA中使用JMP?
- 28. 爲什麼bds.exe大地址感知和dcc32.exe不是?我可以修補dcc32.exe頭,它可以工作嗎?
- 29. 修補程序錯誤:「檢測到未反向的修補程序!跳過修補程序。」
- 30. 避免修補程序命令詢問要修補哪個文件「文件修補」錯誤
這是一個相當大的改變,因爲你需要改變整個調用堆棧...你試圖與開發者交談嗎? – kennytm 2010-02-20 06:39:22
我的項目並未停止,我想修復這個錯誤以保護我自己 – 2010-02-22 04:12:30