Тема: CMD/BAT: патчер бинарных файлов
Должно работать во всех версиях Windows
:: patcher.bat v0.1 by kiber_punk
::
@echo off
chcp 1251>nul
if "%1"=="" (goto file)
if "%1"=="/?" (
echo Used command line: patcher [^<file^> [address [byte]]]
echo -
echo ^<file^> - файл для обработки
echo ^<address^> - начальный адрес смещения +100h ^(HEX^)
echo ^<byte^> - байт^(ы^) для внедрения, разделенные через пробел
echo Пример:
echo ...
echo ^<patcher file.exe 100 01 02 3c^> - записывает в начало файла
echo последовательность байтов 01,02,3c
echo ^<patcher file.lnk 13c 07^> - записывает байт 07 по адресу 3C&echo ...
goto :eof) else (set file=%~s1)
if "%2"=="" (goto address) else set a=%2
if "%3"=="" (goto byte) else set data=%3
if not "%4"=="" (set data=%data% %4 %5 %6 %7 %8 %9)
goto work
:file
set /p file=Enter filename:
:address
set /p a=Enter offset address (+100h), default - begin file:
if "%a%"=="" (set a=100)
:byte
set /p data=Input byte(s) for include:
if "%data%"=="" (set data=00)
:work
echo e %a% >patch.txt
echo %data% >>patch.txt
echo w>>patch.txt
echo q>>patch.txt
debug %file%<patch.txt>nul
del patch.txt
echo File: %~nx1
echo Address: %a%
echo Byte: %data%
pause>nul
В скрипте присутствует встроенная контекстная справка по использованию (ключ "/?")
При вызове без парметров последует интереактивный ввод имени файла и данных.
Адрес смещения следует вводить на 100h выше (особенность отладчика)
Для ввода байта 00 по адресу 3Ch используйте ком.строку:
patcher file.exe 13C 00
Для ввода последовательности байт по адресу 120h:
patcher file.exe 220 01 02 03 04