Показать полную графическую версию : Помогите написать скрипт Swiss File Knife (SFK)
Добрый день, помогите кто разбирается в Swiss File Knife.
Требуется найти файл с определенным именем (файлов будет несколько штук во вложенных папках)
Открыть его в Двоичном режиме и перейти к определенному смещению,
Сравнить пару байт от этого смещения с определенной маской, если совпадают - то Записать с этого смещения содержимое другого файла (с известным именем, например File.tmp)
Если содержимое не слвпадает с маской, то перейти к другому адресу и так же сравнить и если совпало - то Записать содержимое из файла File.tmp
И так далее, пока не перезапишет каждый файл
Vovusja, почему именно Swiss File Knife?
Был опыт написания Бат файлов в cmd,
Мне показалось что это похоже, и легче освоить.
На самом деле разницы нет, просто другое не знаю.
На самом деле разницы нет, просто другое не знаю. »
Vovusja, тогда куда проще будет использовать PowerShell. Что-то наподобие такого (без каких-либо проверок и т.п.):
$sSourceFolder = 'C:\Мои проекты\0036\Sample'
$sSourceFileMask = 'Sample.exe'
$sPatchFile = 'C:\Мои проекты\0036\Patch.bin'
$iPosition = 0x100
$aByteTemplate = [System.Byte[]](0x0B, 0x02, 0x09, 0x00)
$aBuffer = New-Object -TypeName System.Byte[] -ArgumentList $aByteTemplate.Length
Get-ChildItem -Path $sSourceFolder -Recurse -File -Include $sSourceFileMask -Force |`
ForEach-Object -Begin {
$aPatchContent = [System.Byte[]](Get-Content -Encoding Byte -Path $sPatchFile)
} -Process {
Write-Host $_.FullName -ForegroundColor Yellow -NoNewline
$oFileStream = $_.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite)
try {
$oFileStream.Seek($iPosition, [System.IO.SeekOrigin]::Begin) | Out-Null
$oFileStream.Read($aBuffer, 0, $aByteTemplate.Length) | Out-Null
if (([System.Collections.IStructuralEquatable]$aByteTemplate).Equals($aBuffer, [System.Collections.StructuralComparisons]::StructuralEqualityComparer)) {
$oFileStream.Seek($iPosition, [System.IO.SeekOrigin]::Begin) | Out-Null
$oFileStream.Write($aPatchContent, 0, $aPatchContent.Length) | Out-Null
Write-Host "`tOk" -ForegroundColor Green
} else {
Write-Host "`tCan't find bytes template in file content" -ForegroundColor Red
}
} finally {
$oFileStream.Close()
}
}
Спасибо, если если заработает - отблагодарю.
Iska у вас превышен Лимит сообщений, хотел написать вам в Л.С.
Iska у вас превышен Лимит сообщений, хотел написать вам в Л.С. »
Ага. Пишите здесь.
Подскажите пожалуйста подробнее, что к чему в этом скрипте?
Если просто Поиск значеиния без Указания Адреса - так можно?
Если просто Поиск значеиния без Указания Адреса - так можно? »
Можно. Но для этого потребуется другой код. В этом же — строго по ТЗ:
перейти к определенному смещению,
Сравнить пару байт от этого смещения с определенной маской, если совпадают - то… »
Опишите саму Вашу задачу.
Я так понимаю в этом варианте проверяются Четыре байта по смещению 0x100
у всех файлов Sample.exe, и записывается код из Patch.bin ?
Дело в том что понимаете - проверку байт я хотел прикрутить чтоб можно было рекурсивно проходить по Адресам в файле.
А если этого в скрипте нет,то как бы проверку можно не устраивать.
Суть в том что имеется порядка 100 файлов, в каждый файл надо записать определеную часть кода - она для всех одинаковая.
А вот смещение в каждом файле разное, примерно 4 варианта на 100 файлов.
Можно конечно описать путь к каждому файлу и везде указать нужное смещение, на SFK это можно сделать последовательным написание комманд как мне кажется.
Просто хотелось упростить и уменьшить размер кода.
Дело в том что понимаете - проверку байт я хотел прикрутить чтоб можно было рекурсивно проходить по Адресам в файле. »
Не понимаю. Не понимаю, что значит «рекурсивно проходить по Адресам в файле».
Суть в том что… »
Что это за файлы? Что за определённая часть кода? Дайте более подробную и детальную информацию задачи. Не описывайте выбранное Вами решение, дайте описание задачи.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.