Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   как заменить бинарную строку ? (http://forum.oszone.net/showthread.php?t=351896)

shadowbat 12-09-2022 21:07 2992309

как заменить бинарную строку ?
 
Вложений: 1
  • 6.zip (0 bytes, скачиваний: 0)
есть бинарный файл test1.bin
Код:

test1.bin
3132330D0A3435370D0A3835

как через BAT файл заменить "3435" на "3436" чтобы получился файл test2.bin ?

Код:

test2.bin
3132330D0A3436370D0A3835



Архив с тестовыми файлами:
Файл 167231

olga_maksi29 12-09-2022 22:06 2992312

тут только 2 варианта как мне известно
с помощью bat и сторонней утилиты .Но тут на форуме вроде как запрещено )
2 вариант с помощью power shell и метода -Encoding byte.
а так с помощью любого hex редактора можно сделать патч.

shadowbat 12-09-2022 22:20 2992314

Цитата:

Цитата olga_maksi29
с помощью bat и сторонней утилиты
»

а как название утилиты?

Цитата:

Цитата olga_maksi29
2 вариант с помощью power shell и метода -Encoding byte.
»

есть пример кода?

Цитата:

Цитата olga_maksi29
а так с помощью любого hex редактора можно сделать патч. »

с помощью какого hex редактора можно сделать патч без исходного и конечного файла? все испробованные мной патчеры создают патч на основе исходного и конечного файлов. и если исходный файл изменился, то патч перестаёт работать. а нужно просто через поиск и замену hex-строки, что будет работать всегда

ddv122 12-09-2022 22:22 2992315

Примерно так
Код:

$as_bytes = Get-Content test1.bin -Raw -Encoding byte
$as_text = $as_bytes.forEach('ToString', 'X2') -join ' '
$patternregex = ('31 32 33 0D 0A 34 35 37 0D 0A 38 35')
$patch = '31 32 33 0D 0A 34 36 37 0D 0A 38 35'
$checkPattern=Select-String -Pattern $patternregex -InputObject $as_text
If ($checkPattern -ne $null) {
    $as_text_replaced = $as_text -replace $patternregex, $patch
}
Elseif (Select-String -Pattern $patch -InputObject $as_text) {
Write-Output ' Already patch, exiting'
Exit
}
else {
Write-Output "Byte not found"
}
[byte[]] $as_bytes_replaced = -split $as_text_replaced -replace '^', '0x'
Set-Content test2.bin -Encoding Byte -Value $as_bytes_replaced


shadowbat 13-09-2022 12:49 2992350

Цитата:

Цитата ddv122
Примерно так »

такая ошибка выскакивает


можно так:
(2й и 3й способ не принимают x00 в строке замены, 1й принимает)
Код:

@echo off
copy test1.bin test2.bin
call JREPL.BAT \x34\x35 \x34\x36 /XSEQ /M /F "test2.bin" /O -
call JREPL.BAT \x0A\x38 \x0A\x38\x38 /XSEQ /M /F "test2.bin" /O -

Код:

@echo off
copy test1.bin test2.bin
set "F1=\x34\x35"
set "R1=\x34\x36"
set "F2=\x0A\x38"
set "R2=\x0A\x38\x38"
call JREPL.BAT "%F1% %F2%" "%R1% %R2%" /T " " /XSEQ /M /F "test2.bin" /O -

Код:

@echo off
copy test1.bin test2.bin
call JREPL _find.txt _replace.txt /T FILE /XSEQ /M /F "test2.bin" /O -


YuS_2 14-09-2022 18:36 2992402

http://forum.oszone.net/post-2963448.html#post2963448

DJ Mogarych 14-09-2022 21:24 2992406

Я автору уже давал эту ссылку в его прошлой теме, но, видимо, надо повторить.

YuS_2 15-09-2022 10:40 2992427

Цитата:

Цитата DJ Mogarych
уже давал эту ссылку в его прошлой теме, но, видимо, надо повторить. »

Повторение - мать учения. Непреложная истина, которую нам в советской ещё школе на стене, в кабинетах вывешивали... :)
Да, в том топике есть и скрипты, и утилита для решения вопроса, надо просто почитать. Если нужен результат - почитает, а если персональный ответ... возможно, кто-нибудь напишет... :)


Время: 23:51.

Время: 23:51.
© OSzone.net 2001-