簡體   English   中英

使用c#替換本機.exe中的字符串

[英]Replace strings in native .exe using c#

如何從本機Windows .exe文件中捕獲所有字符串,並在以后使用c#替換它們?

背景:我想創建一個ac#工具來從一個簡單的.exe文件中提取和替換字符串。

這有可能嗎?

您需要啟動的是PE / COFF解析器。 如果你的字符串存儲在PE的資源部分,那么它很容易。 例如,您可以將exe作為資源文件加載到Visual Studio中,並使用其資源編輯器在exe中更改圖標和字符串等。 另一方面,如果字符串存儲在數據部分中或者立即存儲在機器代碼中,則會出現更復雜的問題。 按原樣覆蓋字符串,使它們保持相同的長度可能會起作用,但是使它們更長時間會開始移動,弄亂重定位和偏移。 重寫exe​​實際上並不是實現你想要的方法。

從我的評論中提出:PE / COFF是Windows程序的exe格式。 如果您只想編輯資源,則不需要解析器。 您可以首先使用帶有標志LOAD_LIBRARY_AS_IMAGE_RESOURCE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE的LoadLibraryEx()來加載exe以僅使用資源並使其可寫。 然后開始查看LoadString()。 這些都是本機API調用。 我真的不知道你是怎么用C#做的。

如果你只是想要玩得開心,那么我建議你使用Resource Hacker ,這是一個非常強大的程序。

如果這是項目要求那么我也會看這個空間尋求答案:)

請記住,這通常是不可能的。 有許多方法可以在本機C ++程序中存儲字符串。 資源字符串很容易,正如aman.tur正確提到的那樣。

另一方面,數據段中的字符串通常直接編入索引。 在這種情況下,如果你改變它們的起始偏移量(因為前面一個字符串的長度發生變化),你需要找到表達該偏移量的所有方法,這幾乎是不可能的。 此外,當數據庫中的字符串變長時,您可能會在固定緩沖區上運行。 如果總字符串集合增長,那么它們之后的數據也可能會移動。

也很可能在代碼段中標記小字符串(例如,最多4個字符,包括\\ 0)。 改變這些可能是一個更大的挑戰,因為你甚至不太可能修改字符串長度。

請注意,根據設計,這將使所有數字簽名無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM