PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
-
9119
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Добрый.
Сейчас делаю так:
Есть файл, скажем B2DD.tmp. около 20МБ.
Открываю его в hex редакторе, нахожу нужное а именно (35 32 88 65 59 18 01).
Важно! сама искомая комбинация выглядит так: 08 3А 35 32 88 65 59 18 01, но почему то по полному запросу не находит.
Меняю полную найденную строку на 08 8A XX XX XX XX XX XX XX. Сохраняю файл.
Можно ли это проделать в powershell? без использования hex-редактора.
Или с помощью любой другой консольной утилиты. (если можно с примерами)
Спасибо.
Сейчас делаю так:
Есть файл, скажем B2DD.tmp. около 20МБ.
Открываю его в hex редакторе, нахожу нужное а именно (35 32 88 65 59 18 01).
Важно! сама искомая комбинация выглядит так: 08 3А 35 32 88 65 59 18 01, но почему то по полному запросу не находит.
Меняю полную найденную строку на 08 8A XX XX XX XX XX XX XX. Сохраняю файл.
Можно ли это проделать в powershell? без использования hex-редактора.
Или с помощью любой другой консольной утилиты. (если можно с примерами)
Спасибо.
-
Iska
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Цитата 9119:
Можно ли это проделать в powershell?
Можно.
Цитата 9119:
Или с помощью любой другой консольной утилиты.
Можно.
Цитата 9119:
Есть файл, скажем B2DD.tmp. около 20МБ.
Цитата 9119:
Важно! сама искомая комбинация выглядит так: 08 3А 35 32 88 65 59 18 01, но почему то по полному запросу не находит.
Упакуйте файл в архив и выложите на вменяемый обменник или облако.
Можно ли это проделать в powershell?
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Можно.
Цитата 9119:
Или с помощью любой другой консольной утилиты.
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Можно.
Цитата 9119:
Есть файл, скажем B2DD.tmp. около 20МБ.
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Цитата 9119:
Важно! сама искомая комбинация выглядит так: 08 3А 35 32 88 65 59 18 01, но почему то по полному запросу не находит.
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Упакуйте файл в архив и выложите на вменяемый обменник или облако.
-
9119
-
9119
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Разобрался:
Так запускаю скрипт:
Код:
Сам скрипт:
Код:
Спасибо огромное всем кто откликнулся!
Так запускаю скрипт:
Код:
Код: Выделить всё
$list = Get-content C:\Users\Administrator\Desktop\list.txt
$number = 0
$my_data = ($list)[$number]
While ($my_data -ne $null)
{
$file = Get-ChildItem -Path "C:\Windows\Temp" -recurse -include *.tmp | Sort-Object LastAccessTime -Descending | Sort-Object -Descending -Property length | Select-Object -First 1 |%{$_.FullName}
$my_data_byte = $([byte[]]($my_data -split ','))
.\find_replace.ps1 -fin (0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01) -rep ($my_data_byte)
$current_stroke = $number + 1
echo "Строка с данными в документе - $current_stroke"
echo "Данные - $my_data"
echo "Временный файл - $file"
pause
$list = Get-content C:\Users\Administrator\Desktop\list.txt
$number = $number + 1
$my_data = ($list)[$number]
if ($my_data -eq $null){
Write-Host "Список данных пустой!"
break
}
}Сам скрипт:
Код:
Код: Выделить всё
param(
[byte[]]$fin = (0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01),
[byte[]]$rep = (0x08,0x8A,0x34,0x31,0x87,0x64,0x58,0x17,0x00)
)
$file = Get-ChildItem -Path "C:\Windows\Temp" -recurse -include *.tmp | Sort-Object LastAccessTime -Descending | Sort-Object -Descending -Property length | Select-Object -First 1 |%{$_.FullName}
$fout = Get-ChildItem -Path "C:\Windows\Temp" -recurse -include *.tmp | Sort-Object LastAccessTime -Descending | Sort-Object -Descending -Property length | Select-Object -First 1 |%{$_.FullName}
$bytes = [io.file]::readallbytes($file)
$i = -1
$a = -join $fin
do {
$i = [byte[]]::indexof($bytes,$fin[0],($i+1))
[byte[]]$tmp = @()
for ($k = $i; $k -lt ($i+$fin.count);$k++){
$tmp += $bytes[$k]
}
$b = -join $tmp
} while ($a -ne $b)
for ($j,$n=0,$i;$j -lt $rep.count;$n++,$j++){
$bytes[$n] = $rep[$j]
}
[io.file]::writeallbytes($fout, $bytes)Спасибо огромное всем кто откликнулся!
-
9119
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Цитата alpap:
у меня вышло пока так
не до конца разобрался в коде...
вижу часть замены 08 3a на 08 8A, а где остальная замена 35 32 88 65 59 18 на нужное мне XX XX XX XX XX XX ?
как-то так?:
Код:
p.s. как я понял файл декодируется в txt (метров 100 наверное будет).. потом правится и сохраняется.
Есть ли более быстрая возможность замены?(как это делают hex редакторы.. скорость в данном случае для меня имеет значение). Возможно сторонние консольные утилиты .
p.s.s как привел выше... комбинаций для замены будет несколько (скажем 20). и после выполнения, скрипт должен становится на паузу, а переменная $stroke должна увеличиваться после каждого выполнения на +1 (тем самым получая следующую строку $my_data в следующем цикле).
у меня вышло пока так
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
не до конца разобрался в коде...
вижу часть замены 08 3a на 08 8A, а где остальная замена 35 32 88 65 59 18 на нужное мне XX XX XX XX XX XX ?
как-то так?:
Код:
Код: Выделить всё
$my_data = 'XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX'
$stroke = '0'
$cont = Switch -Regex -File $tmp {
" 08 3a $slineHex" {$_ -Replace ' 08 3a', ' 08 8A' -Replace ' $slineHex', ' ($my_data)[$stroke]'}
Default {$_}
}p.s. как я понял файл декодируется в txt (метров 100 наверное будет).. потом правится и сохраняется.
Есть ли более быстрая возможность замены?(как это делают hex редакторы.. скорость в данном случае для меня имеет значение). Возможно сторонние консольные утилиты .
p.s.s как привел выше... комбинаций для замены будет несколько (скажем 20). и после выполнения, скрипт должен становится на паузу, а переменная $stroke должна увеличиваться после каждого выполнения на +1 (тем самым получая следующую строку $my_data в следующем цикле).
-
alpap
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Цитата 9119:
Есть ли более быстрая возможность замены?
Код:
Цитата 9119:
но почему то по полному запросу не находит.
Патамушта "А" - это совсем не "A"
Есть ли более быстрая возможность замены?
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Код:
Код: Выделить всё
$file = 'F0D7.tmp'
$fout = 'F0D7_1.tmp'
[byte[]]$fin = 0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01
[byte]$rep = 0x8A
$bytes = [io.file]::readallbytes($file)
$i = -1
$a = -join $fin
do {
$i = [byte[]]::indexof($bytes,$fin[0],($i+1))
[byte[]]$tmp = @()
for ($k = $i; $k -lt ($i+$fin.count);$k++){
$tmp += $bytes[$k]
}
$b = -join $tmp
} while ($a -ne $b)
$bytes[($i+1)] = $rep
[io.file]::writeallbytes($fout, $bytes)Цитата 9119:
но почему то по полному запросу не находит.
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Патамушта "А" - это совсем не "A"

-
9119
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Код:
Помогите это положить в цикл, чтобы после каждого выполнения становился на паузу и увеличивал $number на +1.
Чтобы выполнялся Пока ($list)[$number] не равно null; когда переменная пустая (т.е строки закончились) - выдать уведомление что строк нет и стать на паузу.
Спасибо.
Код: Выделить всё
$file = 'F0D7.tmp'
$fout = 'F0D7_1.tmp'
$list = '0x08 0x8a 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0x21
0x08 0x8a 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0x22'
$number = '0'
[byte[]]$fin = 0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01
[byte]$rep = ($list)[$number]
$bytes = [io.file]::readallbytes($file)
$i = -1
$a = -join $fin
do {
$i = [byte[]]::indexof($bytes,$fin[0],($i+1))
[byte[]]$tmp = @()
for ($k = $i; $k -lt ($i+$fin.count);$k++){
$tmp += $bytes[$k]
}
$b = -join $tmp
} while ($a -ne $b)
$bytes[($i+1)] = $rep
[io.file]::writeallbytes($fout, $bytes)Помогите это положить в цикл, чтобы после каждого выполнения становился на паузу и увеличивал $number на +1.
Чтобы выполнялся Пока ($list)[$number] не равно null; когда переменная пустая (т.е строки закончились) - выдать уведомление что строк нет и стать на паузу.
Спасибо.
-
YuS_2
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Цитата 9119:
чтобы после каждого выполнения становился на паузу и увеличивал $number на +1.
Это лишнее... я так понимаю, что просто надо получить, вот это:
Код:
Добавлено:
Либо, чтобы была возможность для простой замены нескольких строк по шаблону, то уравнять шаблон поиска и замены по количеству символов, и подавать эти шаблоны извне:
Код:
и запускать можно так:
Код:
чтобы после каждого выполнения становился на паузу и увеличивал $number на +1.
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Это лишнее... я так понимаю, что просто надо получить, вот это:
Код:
Код: Выделить всё
$file = 'F0D7.tmp'
$fout = 'F0D7_1.tmp'
[byte[]]$fin = 0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01
[byte[]]$rep = 0x8A,0x34,0x31,0x87,0x64,0x58,0x17,0x00
$bytes = [io.file]::readallbytes($file)
$i = -1
$a = -join $fin
do {
$i = [byte[]]::indexof($bytes,$fin[0],($i+1))
[byte[]]$tmp = @()
for ($k = $i; $k -lt ($i+$fin.count);$k++){
$tmp += $bytes[$k]
}
$b = -join $tmp
} while ($a -ne $b)
for ($j,$n=0,$($i+1);$j -lt $rep.count;$n++,$j++){
$bytes[$n] = $rep[$j]
}
[io.file]::writeallbytes($fout, $bytes)Добавлено:
Либо, чтобы была возможность для простой замены нескольких строк по шаблону, то уравнять шаблон поиска и замены по количеству символов, и подавать эти шаблоны извне:
Код:
Код: Выделить всё
param(
$file = '.\F0D7.tmp',
$fout = '.\F0D7_1.tmp',
[byte[]]$fin = (0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01),
[byte[]]$rep = (0x08,0x8A,0x34,0x31,0x87,0x64,0x58,0x17,0x00)
)
$bytes = [io.file]::readallbytes($file)
$i = -1
$a = -join $fin
do {
$i = [byte[]]::indexof($bytes,$fin[0],($i+1))
[byte[]]$tmp = @()
for ($k = $i; $k -lt ($i+$fin.count);$k++){
$tmp += $bytes[$k]
}
$b = -join $tmp
} while ($a -ne $b)
for ($j,$n=0,$i;$j -lt $rep.count;$n++,$j++){
$bytes[$n] = $rep[$j]
}
[io.file]::writeallbytes($fout, $bytes)и запускать можно так:
Код:
Код: Выделить всё
.\script.ps1 -fin (0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01) -rep (0x08,0x5A,0x54,0x51,0x57,0x54,0x78,0x77,0x10)-
9119
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Код:
Помогите это положить в цикл, чтобы после каждого выполнения становился на паузу и увеличивал $number на +1.
Чтобы выполнялся Пока ($list)[$number] не равно null; когда переменная пустая (т.е строки закончились) - выдать уведомление что строк нет и стать на паузу.
Спасибо.
Код: Выделить всё
$file = 'F0D7.tmp'
$fout = 'F0D7_1.tmp'
$list = '0x08 0x8a 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0x21
0x08 0x8a 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0x22'
$number = '0'
[byte[]]$fin = 0x08,0x3A,0x35,0x32,0x88,0x65,0x59,0x18,0x01
[byte]$rep = ($list)[$number]
$bytes = [io.file]::readallbytes($file)
$i = -1
$a = -join $fin
do {
$i = [byte[]]::indexof($bytes,$fin[0],($i+1))
[byte[]]$tmp = @()
for ($k = $i; $k -lt ($i+$fin.count);$k++){
$tmp += $bytes[$k]
}
$b = -join $tmp
} while ($a -ne $b)
$bytes[($i+1)] = $rep
[io.file]::writeallbytes($fout, $bytes)Помогите это положить в цикл, чтобы после каждого выполнения становился на паузу и увеличивал $number на +1.
Чтобы выполнялся Пока ($list)[$number] не равно null; когда переменная пустая (т.е строки закончились) - выдать уведомление что строк нет и стать на паузу.
Спасибо.
-
YuS_2
Re: PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Чуть более лаконичный вариант
Код:
Цитата 9119:
Что значение не одно.
Вообще, одно:
Код:
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Код:
Код: Выделить всё
$file = 'D:\temp\F0D7.tmp'
$tmp = 'D:\temp\tmp.tmp'
$pattern = '08 3a 35 32 88 65 59 18'
$replacement = '08 8a 35 32 88 65 59 18'
certutil -f -encodeHex "$file" "$tmp" > $null
(gc "$tmp") -replace "$pattern","$replacement" |set-content "$tmp"
certutil -f -decodeHex "$tmp" "$file" > $nullЦитата 9119:
Что значение не одно.
PowerShell - [решено] Поиск hex значения в файле, замена значения на заданное, сохранение файла
Вообще, одно:
Код:
Код: Выделить всё
f17050 00 00 35 35 30 6e ff 01 08 3a 35 32 88 65 59 18 ..550n...:52.eY.