[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Иногда возникает необходимость сделать полностью автономный батник, не требующий внешних файлов.
Ресурсы можно встроить в сам батник используя Base64 кодирование, в приложенном файле демонстрируется эта возможность.
Работоспособен на winxp-win10.
Вложение

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
dialmak
57293Просто склеить через
Можно.
Но правка такого файла может испортить бинарное содержимое, не все редакторы нормально относятся к таким файлам, воспринимая, например символ nul как конец файла или автоматом преобразуют его кодировку.
По этой-же причине и расклеить его с помощью findstr не получится, она корректно работает только с текстовыми данными.
А так склеить можно, но для редактирования придется его разбирать, редактировать и снова клеить.
К стати, tbs скрипты жмутся так, что в них отсутствуют непечатные символы, это хоть и уменьшает уровень компрессии, но защищает скрипт от порчи его текстовым редактором, что по сути base64 и делает.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
57295не все редакторы нормально относятся к таким файлам
Это наменьшее из зол
по этой-же причине и расклеить его с помощью findstr не получится, она корректно работает только с текстовыми данными.
практика говорит об обратном, склеивал и картинки и exe-шники - все нормально при расклеивании
для редактирования придется его разбирать, редактировать и снова клеить.
тоже практика говорит об обратном, редактировал, все ок.
К стати, tbs скрипты жмутся так, что в них отсутствуют непечатные символы, это хоть и уменьшает уровень компрессии, но защищает скрипт от порчи его текстовым редактором, что по сути base64 и делает.
ты просто не пробовал открыть, отредактировать и сохранить в обычном блокноте в 7. Частично распакованый скрипт после сохранения не пашет. Если через Notepad++ делать - пашет.
Пример твоего примера, скачать

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
dialmak
Древний вопрос, что первично, яйцо или курица?
Лично для меня первичен батник, вложение довесок, не более.
Если делать батник просто для создания одного файла, согласен, вариант не плохой, но если это серьезный батник, не слишком то все красиво, да и ограничение в один файл не радует.
Тем более, в большинстве случаев требуется одна-две утилитки небольшого размера, компрессия не особо важна.
А так, можно и sfx архив создать, почти все проблемы идеально решатся.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
nikzzzz,
не слишком то все красиво, да и ограничение в один файл не радует
Это ж просто концепт.
Красивость можно сделать, не проблема.
Ограничение на один файл можно убрать через идентификаторы, findstr это умеет.
Короче не убедил..
А так, можно и sfx архив создать, почти все проблемы идеально решатся.
По такой логике, то и тема "бинарные ресурсы в батниках" вроде как и не нужна

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
dialmak, ну, ты пример-то приведи. Склей, скажем, три бинарника и бат-ником раздели.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
dialmak
57301По такой логике, то и тема "бинарные ресурсы в батниках" вроде как и не нужна
Батник - это открытый код, удобный для редактирования.
Гибрид bat+bin это уже не текстовой файл со всеми вытекающими из этого последствиями, его и батником можно назвать только в кавычках.
Я вообще-то не любитель sfx поделок, предпочитаю держать все в распакованном виде, но иногда это необходимо, например это гарантирует, что файлы не могут быть модифицированы.
А данный батник я написал скорее для развлечения, решил вспомнить wsh, поэтому и к критике отношусь достаточно безразлично.

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
dialmak, я так понял, примера по склеиванию/разбору бинарников бат-ником мы так и не дождёмся.
nikzzzz,
Нашел ещё пример. Я практически не разбираюсь в WSH, но даже тут почти понял ab
for %%i in (
4D53434600000000C9050000000000002C000000000000000301010001000000
4D4200004900000001000315000E000000000000000095494277200047657449
...
) Do >>test.dat (Echo.For b=1 To len^("%%b"^) Step 2
ECHO WScript.StdOut.Write Chr^(Clng^("&H"^&Mid^("%%b",b,2^)^)^) : Next)
Cscript /b /e:vbs test.dat>test.ex_
expand -r test.ex_
В секции for (...) do просто hex значения (я, например, открыл в HxD, выбрал просмотр по 16 байт, копи-пастнул в текстовый файл, заменил пробел на перевод строки и сшил по две строки).

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Ander_73
Так с созданием временных файлов проблем особых нет, но не интересно, создаешь внешний vbs скрипт-распаковщик с помощью echo , а дальше просто им пользуешься.
К тому-же могут быть ограничения - 8191 символ, это конечно можно обойти, разбив на куски, но тоже не слишком хорошо.
А hex представление - это 2 байта на каждый закодированный байт, вместо 4/3 байт в base 64.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Ander_73,
я так понял, примера по склеиванию/разбору бинарников бат-ником мы так и не дождёмся.
Да вроде это уже обсуждали ранее. Если нужно 3...100 файлов воткнуть, то makecab запаковать, expand распаковать. Поддерживается вроде везде.
Так что никакого примера и не нужно, все прозрачно..

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
dialmak, возможно, я непонятно выразился.
Ты сказал, что не вопрос склеить воедино бат и ехе (любые бинарные) файлы, а потом при запуске бат-ника эти бинарники вычленять и запускать или, скажем, распаковывать. Я и прошу привести пример такого "склеенного" с бинарниками бат-файла.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Ander_73, Думаю можно, но не вижу смысла.
Ибо практически такой вариант не очень хорош, проще\лучше\быстрее через cab, плюс можно и exe-шник через cab слепить дополнительно как бонус. Вот в таком варианте это будет неплохо, лучше чем у nikzzzz, и может и стОит сделать кодер\декодер.. Но, если откровенно - мне лень, может сам возмешься?
Что касается утилиты nikzzzz, то видимо можно не использовать cscript, просто юзать CERTUTIL, она умеет работать с Base64
Даже больше - CERTUTIL позволяет подгрузить из интернета нужный файл и декодировать его при желании, так что и не нужно ничего внедрять, подгрузка нужного модуля онлайн например из github ..
Вот тогда да, это будет архиполезная утилита.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет 2 месяца
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
dialmak
57339просто юзать CERTUTIL, она умеет работать с Base64
Ее нет в WinXp, да и временные файлы создавать придется. ac

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 1 месяц
  • Сообщений: 842
  • Репутация:40

    [+] [-]
nikzzzz,
Ее нет в WinXp
Ну и славно. Там много чего нет.
да и временные файлы создавать придется
Не очень понимаю что в этом плохого..
Да вроде компу пофиг, как и пользователю, главное чтобы работало.
В принципе можно и не создавать, если подгружать онлайн, но в случае exe-шников напрямую нежелательно грузить (да и гитхаб не одобряет это, предупредит и потом перекроет кислород), лучше через cab\zip\base64..

Страница 2 из 2


Показать сообщения:    

Текущее время: 28-Мар 21:19

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы