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

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

Vovusja 01-01-2017 11:46 2699980

Помогите написать скрипт Swiss File Knife (SFK)
 
Добрый день, помогите кто разбирается в Swiss File Knife.
Требуется найти файл с определенным именем (файлов будет несколько штук во вложенных папках)
Открыть его в Двоичном режиме и перейти к определенному смещению,
Сравнить пару байт от этого смещения с определенной маской, если совпадают - то Записать с этого смещения содержимое другого файла (с известным именем, например File.tmp)
Если содержимое не слвпадает с маской, то перейти к другому адресу и так же сравнить и если совпало - то Записать содержимое из файла File.tmp
И так далее, пока не перезапишет каждый файл

Iska 01-01-2017 13:21 2699991

Vovusja, почему именно Swiss File Knife?

Vovusja 01-01-2017 17:31 2700020

Был опыт написания Бат файлов в cmd,
Мне показалось что это похоже, и легче освоить.
На самом деле разницы нет, просто другое не знаю.

Vovusja 01-01-2017 21:14 2700045

Готов отблагодарить.

Iska 02-01-2017 09:00 2700094

Цитата:

Цитата Vovusja
На самом деле разницы нет, просто другое не знаю. »

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 02-01-2017 11:41 2700120

Спасибо, если если заработает - отблагодарю.

Vovusja 04-01-2017 15:18 2700651

Iska у вас превышен Лимит сообщений, хотел написать вам в Л.С.

Iska 04-01-2017 15:24 2700660

Цитата:

Цитата Vovusja
Iska у вас превышен Лимит сообщений, хотел написать вам в Л.С. »

Ага. Пишите здесь.

Vovusja 04-01-2017 15:46 2700674

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

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

Iska 04-01-2017 16:01 2700681

Цитата:

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

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

Цитата Vovusja
перейти к определенному смещению,
Сравнить пару байт от этого смещения с определенной маской, если совпадают - то… »

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

Vovusja 04-01-2017 17:01 2700713

Я так понимаю в этом варианте проверяются Четыре байта по смещению 0x100
у всех файлов Sample.exe, и записывается код из Patch.bin ?

Iska 04-01-2017 17:45 2700729

Vovusja, да.

Vovusja 04-01-2017 18:39 2700747

Дело в том что понимаете - проверку байт я хотел прикрутить чтоб можно было рекурсивно проходить по Адресам в файле.
А если этого в скрипте нет,то как бы проверку можно не устраивать.
Суть в том что имеется порядка 100 файлов, в каждый файл надо записать определеную часть кода - она для всех одинаковая.
А вот смещение в каждом файле разное, примерно 4 варианта на 100 файлов.
Можно конечно описать путь к каждому файлу и везде указать нужное смещение, на SFK это можно сделать последовательным написание комманд как мне кажется.
Просто хотелось упростить и уменьшить размер кода.

Iska 06-01-2017 06:44 2701164

Цитата:

Цитата Vovusja
Дело в том что понимаете - проверку байт я хотел прикрутить чтоб можно было рекурсивно проходить по Адресам в файле. »

Не понимаю. Не понимаю, что значит «рекурсивно проходить по Адресам в файле».

Цитата:

Цитата Vovusja
Суть в том что… »

Что это за файлы? Что за определённая часть кода? Дайте более подробную и детальную информацию задачи. Не описывайте выбранное Вами решение, дайте описание задачи.


Время: 19:08.

Время: 19:08.
© OSzone.net 2001-