Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

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

Аватара для Vovusja

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


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

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


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

Отправлено: 11:46, 01-01-2017

 

Ветеран


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

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


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

Отправлено: 13:21, 01-01-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Vovusja

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


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

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


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

Отправлено: 17:31, 01-01-2017 | #3


Аватара для Vovusja

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


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

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


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

Отправлено: 21:14, 01-01-2017 | #4


Ветеран


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

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


Цитата 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()
        }
    }
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 02-01-2017 | #5


Аватара для Vovusja

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


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

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


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

Отправлено: 11:41, 02-01-2017 | #6


Аватара для Vovusja

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


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

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


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

-------
Учиться никогда не поздно...


Отправлено: 15:18, 04-01-2017 | #7


Ветеран


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

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


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

Отправлено: 15:24, 04-01-2017 | #8


Аватара для Vovusja

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


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

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


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

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

-------
Учиться никогда не поздно...


Отправлено: 15:46, 04-01-2017 | #9


Ветеран


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

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


Цитата Vovusja:
Если просто Поиск значеиния без Указания Адреса - так можно? »
Можно. Но для этого потребуется другой код. В этом же — строго по ТЗ:
Цитата Vovusja:
перейти к определенному смещению,
Сравнить пару байт от этого смещения с определенной маской, если совпадают - то… »
Опишите саму Вашу задачу.

Отправлено: 16:01, 04-01-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Помогите написать скрипт Swiss File Knife (SFK)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите написать скрипт MkZ Программирование в *nix 2 16-03-2014 11:02
Помогите написать скрипт DeGReeS Microsoft Windows NT/2000/2003 12 01-06-2012 16:18
FreeBSD - Помогите написать скрипт Stirs Общий по FreeBSD 2 25-06-2008 02:29
Помогите написать скрипт!!! Sergei Antoshkin Вебмастеру 1 13-03-2003 18:22




 
Переход