Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Аватара пользователя
Vovusja

Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Добрый день, помогите кто разбирается в Swiss File Knife.

Требуется найти файл с определенным именем (файлов будет несколько штук во вложенных папках)

Открыть его в Двоичном режиме и перейти к определенному смещению,

Сравнить пару байт от этого смещения с определенной маской, если совпадают - то Записать с этого смещения содержимое другого файла (с известным именем, например File.tmp)

Если содержимое не слвпадает с маской, то перейти к другому адресу и так же сравнить и если совпало - то Записать содержимое из файла File.tmp

И так далее, пока не перезапишет каждый файл
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Я так понимаю в этом варианте проверяются Четыре байта по смещению 0x100

у всех файлов Sample.exe, и записывается код из Patch.bin ?
Аватара пользователя
Iska

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Iska »

Был опыт написания Бат файлов в cmd,

Мне показалось что это похоже, и легче освоить.

На самом деле разницы нет, просто другое не знаю.
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Цитата Vovusja:



На самом деле разницы нет, просто другое не знаю.
Любой язык - Помогите написать скрипт Swiss File Knife (SFK)




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()
        }
    }
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Спасибо, если если заработает - отблагодарю.
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Спасибо, если если заработает - отблагодарю.
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Цитата Vovusja:



Iska у вас превышен Лимит сообщений, хотел написать вам в Л.С.
Любой язык - Помогите написать скрипт Swiss File Knife (SFK)




Ага. Пишите здесь.
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Подскажите пожалуйста подробнее, что к чему в этом скрипте?



Если просто Поиск значеиния без Указания Адреса - так можно?
Аватара пользователя
Vovusja

Re: Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Сообщение Vovusja »

Цитата Vovusja:



Если просто Поиск значеиния без Указания Адреса - так можно?
Любой язык - Помогите написать скрипт Swiss File Knife (SFK)




Можно. Но для этого потребуется другой код. В этом же — строго по ТЗ:


Цитата Vovusja:



перейти к определенному смещению,

Сравнить пару байт от этого смещения с определенной маской, если совпадают - то…
Любой язык - Помогите написать скрипт Swiss File Knife (SFK)




Опишите саму Вашу задачу.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»