2010-12-12 53 views
0

我正面臨一個相當大的問題。我需要修補一個可執行文件來修改它的行爲。該程序是用C語言編寫的,到現在爲止我一直在使用IDA編輯它,但這樣我就無法替換整個函數等等。在我看來,最簡單的方法是創建一種加載器將加載程序並在運行之前對其進行修補。這會爲我節省很多時間,所有的編輯都會更容易。在BSD/Unix上動態修補可執行文件

問題是我找不到任何有關如何操作的文章。你們能否解釋我應該如何處理這個過程?加載器將用C/C++編寫。

回答

1

嘗試這一過程完全符合傳統。

  • 爲什麼不重新編譯這些更改?
    • 來源不可用是通常的原因。
  • 它是一個封閉的源代碼程序嗎?
    • 如果是這樣,您很可能會通過嘗試來破壞許可條款。
  • 源丟失了嗎?
    • 備份和版本控制發生了什麼?
  • 它是用共享庫中的關鍵代碼構建的嗎?
    • 如果是這樣,你可以看看用新功能替換共享庫?
  • 你能用LD_PRELOAD達到你的目的嗎?

由於的「源可用」 UNIX的理念,不會有太多的工具來幫助二進制文件的補丁 - 經典,選擇的工具是一個名爲adb程序 - 一個調試器(第7版UNIX手冊中說'adb - debugger')。它允許你編輯二進制文件。

但是,人們很少做出重大改變,因爲聽起來像你想做的事情,主要是因爲它是非常艱苦的工作,並且通過重新編譯原始資源來實現它更簡單和更可靠。

+0

是的,這是一個封閉的源程序,我需要修復一些安全漏洞。要做到這一點的唯一方法是對其進行逆向工程。 – kjagiello 2010-12-12 16:34:02

+0

@Balon:聯繫供應商 - 你在做什麼可能是不合法的。如果供應商不合作(或停業),則需要更換供應商。這是開源有益的原因之一。 – 2010-12-12 16:36:49

+0

我試過了,但沒有回答。該怎麼做,會再次嘗試與他們聯繫。 – kjagiello 2010-12-12 16:39:23