1 (изменено: kiber_punk, 2009-03-06 21:46:56)

Тема: CMD/BAT: патчер бинарных файлов

Скрипт должен с успехом работать во всех версиях Windows.

pat4.bat

:: patcher v 1.0.3 by kiber_punk 
@echo off
CHCP 1251>nul
set a=
set data=
set ext=

if "%~1"=="/?" (GOTO HELP)
if "%~1"=="" (GOTO file)
if not "%~1"=="" (echo File: %~nx1)

set newname=%~s1

rem ИМЕЕМ КОРОТКОЕ ИМЯ
:new
if "%2"=="" (GOTO address)
if "%3"=="" (GOTO byte)
if not "%3"=="" (GOTO go)

rem ВВОД АДРЕСА
:address
set /p a=Offset address (+100h), default - BOF:  
if "%a%"=="" (set a=100)
rem ВВОД БАЙТА
:byte
set /p data=Input byte for include, default ^<00^>:  
if "%data%"=="" (set data=00)

:go
rem переименовать чтобы исключить все возможные ошибки
ren %1 "tmp.bin"
rem задаём короткое имя в формате DOS
call :short "%~dp1tmp.bin"

CALL :WORK "%newname%" %2 %a% %data% %3 %4 %5 %6 %7 %8 %9

rem обратное переименование
ren "%~dp1tmp.bin" "%~nx1"

rem вывод информации
echo ...
echo Filename:    %~nx1
echo Address: %2 %a%
echo Byte:    %data% %3 %4 %5 %6 %7 %8 %9
echo ...
echo Press AnyKey...
pause>nul
exit /b

rem ИНТЕРАКТИВНОЕ ЗАДАНИЕ ИМЕНИ
:file
set /p file=Enter filename:  
CALL :new %file%
exit /b

rem РАБОЧАЯ ЧАСТЬ
:WORK
echo e %2 %3 %4 %5 %6 %7 %8 %9>patch.dbg
echo w>>patch.dbg
echo q>>patch.dbg
chcp 866>nul
debug %~1 < patch.dbg >nul
del patch.dbg
exit /b

rem СПРАВКА
:HELP
    echo Used command line:  pat4 [^<file^> [address [byte]]] [/?]
    echo ...
    echo ^<file^>    - файл для обработки
    echo ^<address^> - адрес ввода байтов +100h ^(HEX^)
    echo ^<byte^>    - байт^(ы^) разделенные через пробел ^(HEX^)
    echo   Пример:
    echo ..
    echo ^<pat4.bat file.exe 100 01 02 3c^> - записывает в начало файла
    echo                           последовательность байт 01,02,3c
    echo ^<pat4.bat file.lnk 13c 07^>       - записывает байт 07 по адресу 3C&echo ..
exit /b

:short
set newname=%~s1

Для добавления пункта "Patch" в контекстное меню проводника необходимо скопировать скрипт в системную директорию и выполнить reg-файл:
pat4.reg

REGEDIT4

[HKEY_CLASSES_ROOT\*\shell\Patch\command]
@="pat4.bat \"%1\""
[HKEY_CLASSES_ROOT\lnkfile\shell\patch\command]
@="pat4.bat \"%1\""

За один проход скрипта можно вводить по 7 байт.
__
Обсуждение скрипта на форуме

2

Re: CMD/BAT: патчер бинарных файлов

Пример использования.

Создайте ярлык к файлу cmd.exe
Выполним такую команду:

PAT4.BAT cmd.exe.lnk 13c 07

Ярлык теперь имеет параметр запуска "свёрнутое в значёк"
Потом такую:

PAT4.BAT cmd.exe.lnk 13c 03

Окно запускается развёрнутым.

такую:

PAT4.BAT cmd.exe.lnk 13c 00

Запуск уже происходит в режиме SW_HIDE.

3 (изменено: kiber_punk, 2009-04-05 05:08:37)

Re: CMD/BAT: патчер бинарных файлов

Pat4_v3
- При использовании этой версии скрипта следует вводить реальный адрес смещения.
- Реализован механизм преобразования HEX-чисел без обращения к внешним программам, что заметно ускоряет процесс патча.
- Обновлена справка, удалены лишние условия и функции.
В прикрепленном архиве - конечный инсталлятор, который выполняет все необходимые функции (извлечение скрипта и добавление пункта "Patch" в контекстное меню проводника).
_
Благодарность alexii за помощь в разработке скрипта.

Post's attachments

pat4_v3.zip 32.3 kb, 138 downloads since 2009-04-05 

You don't have the permssions to download the attachments of this post.