Có nhiều công cụ, được đề cập bởi nhiều câu trả lời tuyệt vời, tôi sẽ chọn một công cụ.
Hacker tài nguyên
Tôi đã tải xuống phiên bản mới nhất ( 5.1.7 ) từ [AngusJ]: Resource Hacker . Tất cả thông tin cần thiết có thể được tìm thấy trên trang đó (tùy chọn dòng lệnh, tập lệnh, ...). Trong hướng dẫn sau, tôi sẽ thao tác trên 2 tệp thực thi (chuột thí nghiệm) mà (vì những lý do rõ ràng) tôi đã sao chép trong cwd của mình :
- ResourceHacker.exe : Tôi nghĩ sẽ rất thú vị khi tự vận hành
- cmake.exe : thực thi ngẫu nhiên mà không có Thông tin phiên bản được đặt (một phần của cài đặt v3.6.3 trên máy của tôi)
Trước khi đi sâu hơn, tôi muốn đề cập rằng ResourceHacker có một đầu ra đầu cuối vui nhộn và các đoạn sao chép / dán sau đây có thể tạo ra một chút nhầm lẫn.
1. Thiết lập
Đây giống như một bước sơ bộ, để làm quen với môi trường, cho thấy không có việc kinh doanh sôi nổi nào đang diễn ra, ...
e:\Work\Dev\StackOverflow\q000284258> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***
[prompt]> dir
Volume in drive E is Work
Volume Serial Number is 3655-6FED
Directory of e:\Work\Dev\StackOverflow\q000284258
2019-01-28 20:09 <DIR> .
2019-01-28 20:09 <DIR> ..
2016-11-03 09:17 5,413,376 cmake.exe
2019-01-03 02:06 5,479,424 ResourceHacker.exe
2019-01-28 20:30 496 ResourceHacker.ini
3 File(s) 10,893,296 bytes
2 Dir(s) 103,723,261,952 bytes free
[prompt]> set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin
[prompt]> .\cmake --help >nul 2>&1
[prompt]> echo %errorlevel%
0
[prompt]> .\ResourceHacker.exe -help
[prompt]>
==================================
Resource Hacker Command Line Help:
==================================
-help : displays these abbreviated help instructions.
-help commandline : displays help for single commandline instructions
-help script : displays help for script file instructions.
[prompt]> echo %errorlevel%
0
Như đã thấy, các tệp thực thi đều ổn, chúng chạy tốt và đây là cách Chi tiết của chúng (mà chúng tôi quan tâm) trông như thế nào:
2. Tài nguyên
Tệp tài nguyên là tệp văn bản chứa tài nguyên. Một tài nguyên (được đơn giản hóa) có:
Để biết thêm chi tiết, hãy kiểm tra [MS.Docs]: About Resource Files . Có nhiều công cụ (được đề cập trong các câu trả lời hiện có) hỗ trợ chỉnh sửa tệp tài nguyên như:
- VStudio tạo một cái mặc định khi bắt đầu một dự án mới
- Người ta có thể tạo một tệp như vậy theo cách thủ công
Nhưng, vì nó là về Resource Hacker , và:
- Nó có thể trích xuất tài nguyên từ tệp thực thi hiện có
- Nó có các tài nguyên được nhúng trong đó (như trong hình trước)
Tôi sẽ sử dụng nó cho bước này ( -action extract
)
Tiếp theo, để một tài nguyên được nhúng vào .exe ( .dll , ...), nó phải được biên dịch sang dạng nhị phân, phù hợp với định dạng PE . Một lần nữa, có rất nhiều công cụ có thể đạt được điều này, nhưng như bạn có thể đoán, tôi sẽ gắn bó với Resource Hacker ( -action compile
).
[prompt]> :: Extract the resources into a file
[prompt]> .\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con
[prompt]>
[28 Jan 2019, 20:58:03]
Current Directory:
e:\Work\Dev\StackOverflow\q000284258
Commandline:
.\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con
Open : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Save : e:\Work\Dev\StackOverflow\q000284258\sample.rc
Success!
[prompt]> :: Modify the resource file and set our own values
[prompt]>
[prompt]> :: Compile the resource file
[prompt]> .\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con
[prompt]>
[28 Jan 2019, 20:59:51]
Current Directory:
e:\Work\Dev\StackOverflow\q000284258
Commandline:
.\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con
Open : e:\Work\Dev\StackOverflow\q000284258\sample.rc
Save : e:\Work\Dev\StackOverflow\q000284258\sample.res
Compiling: e:\Work\Dev\StackOverflow\q000284258\sample.rc
Success!
[prompt]> dir /b
cmake.exe
ResourceHacker.exe
ResourceHacker.ini
sample.rc
sample.res
Trong trường hợp của bạn, lưu và chỉnh sửa tệp tài nguyên sẽ không cần thiết, vì tệp đã có sẵn, tôi chỉ làm điều đó với mục đích minh họa. Dưới đây là tệp tài nguyên sau khi được sửa đổi (và do đó trước khi được biên dịch).
sample.rc :
1 VERSIONINFO
FILEVERSION 3,1,4,1592
PRODUCTVERSION 2,7,1,8
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", "Cristi Fati\0"
VALUE "FileDescription", "20190128 - SO q000284258 demo\0"
VALUE "FileVersion", "3.1.4.1592\0"
VALUE "ProductName", "Colonel Panic\0"
VALUE "InternalName", "100\0"
VALUE "LegalCopyright", "(c) Cristi Fati 1999-2999\0"
VALUE "OriginalFilename", "ResHack\0"
VALUE "ProductVersion", "2.7.1.8\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409 0x04E4
}
}
3. Nhúng
Điều này cũng sẽ được thực hiện bởi Resource Hacker ( -action addoverwrite
). Vì các tệp .exe đã được sao chép nên tôi sẽ chỉnh sửa tài nguyên của chúng tại chỗ.
[prompt]> .\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
[prompt]>
[28 Jan 2019, 21:17:19]
Current Directory:
e:\Work\Dev\StackOverflow\q000284258
Commandline:
.\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
Open : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
Save : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res
Added: VERSIONINFO,1,1033
Success!
[prompt]> copy ResourceHacker.exe ResourceHackerTemp.exe
1 file(s) copied.
[prompt]> .\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
[prompt]>
[28 Jan 2019, 21:19:29]
Current Directory:
e:\Work\Dev\StackOverflow\q000284258
Commandline:
.\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
Open : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Save : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res
Modified: VERSIONINFO,1,1033
Success!
[prompt]> del /f /q ResourceHackerTemp.*
[prompt]> dir
Volume in drive E is Work
Volume Serial Number is 3655-6FED
Directory of e:\Work\Dev\StackOverflow\q000284258
2019-01-28 21:20 <DIR> .
2019-01-28 21:20 <DIR> ..
2016-11-03 09:17 5,414,400 cmake.exe
2019-01-03 02:06 5,479,424 ResourceHacker.exe
2019-01-28 21:17 551 ResourceHacker.ini
2019-01-28 20:05 1,156 sample.rc
2019-01-28 20:59 792 sample.res
5 File(s) 10,896,323 bytes
2 Dir(s) 103,723,253,760 bytes free
Như đã thấy, tôi đã phải thực hiện một mẹo nhỏ ( gainarie ) vì tôi không thể (ít nhất là tôi không nghĩ mình có thể) sửa đổi .exe trong khi sử dụng.
4. Kiểm tra
Đây là giai đoạn tùy chọn, để đảm bảo rằng:
- Các tệp thực thi vẫn hoạt động (chúng không bị xáo trộn trong quá trình này)
- Các tài nguyên đã được thêm / cập nhật
[prompt]> .\cmake --help >nul 2>&1
[prompt]> echo %errorlevel%
0
[prompt]> .\ResourceHacker.exe -help
[prompt]>
==================================
Resource Hacker Command Line Help:
==================================
-help : displays these abbreviated help instructions.
-help commandline : displays help for single commandline instructions
-help script : displays help for script file instructions.
[prompt]> echo %errorlevel%
0
Và chi tiết của họ :
UpdateResource
chức năng, nhiệm vụ nếu cập nhật phiên bản trong pe hiện