Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Новый участник


Сообщения: 5
Благодарности: 1

Профиль | Отправить PM | Цитировать


YuS_2
Сравнил результаты работы вашего скрипта и утилиты sfk.

$ copy original.exe patched.exe
$ sfk.exe replace patched.exe -binary /0F851F030000/E92003000000/ -yes
$ fc.exe /b original.exe patched.exe
00000B02: 0F E9
00000B03: 85 20
00000B04: 1F 03
00000B05: 03 00

Меняю в вашем скрипте верхушку, указывая последовательность для поиска и замены:
[byte[]]$fin = 0x0F,0x85,0x1F,0x03,0x00,0x00
[byte[]]$rep = 0xE9,0x20,0x03,0x00,0x00,0x00

$ pwsh.exe -f patch.ps1
$ fc.exe /b original.exe patched.exe
00000B03: 85 E9
00000B04: 1F 20
00000B08: 4C 00

Как видите, результаты расходятся. А почему?

Добавлю своё решение для небольших файлов, которое повторяет результат sfk.
Для запуска нужен PowerShell 5 или старше.

Код: Выделить весь код
$fileOriginal   = 'original.exe'
$filePatched    = 'patched.exe'
$patternFind    = '0F 85 1F 03 00 00' -replace ' ', '-'
$patternReplace = 'E9 20 03 00 00 00' -replace ' ', '-'

$byteArray  = [IO.File]::ReadAllBytes($fileOriginal)
$byteString = [BitConverter]::ToString($byteArray)
$byteString = $byteString -replace $patternFind, $patternReplace
[byte[]] $newByteArray = $byteString -split '-' -replace '^', '0x'
[IO.File]::WriteAllBytes($filePatched, $newByteArray)

Последний раз редактировалось Kraeved, 29-01-2024 в 01:07.


Отправлено: 17:14, 28-01-2024 | #24