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

Builder собственными руками.
  #1  
Старый 17.01.2008, 03:56
Аватар для razzzar
razzzar
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме:
725870

Репутация: 208
Smile Builder собственными руками.

[ 0x00 Intro ]
Builder – это утилита, которая на основе введеных вами параметров генерирует исполняемый файл.

Возьмем к примеру известный троян под названием Pinch. Для создания собственной копии вы все несомнено пользовались билдерами. Вы вводили адрес своей статы или e-mail’а. После этого программа генерировала сам пинч.

Многие новички в программировании озадачиваются как же написать свой собственный билдер. В этой статье мы с вами напишем простенький, но работающий экземпляр билдера.
[ 0x01 Soft ]
Сначала выясним что нам надо для того, чтобы написать свой билдер.
  • Компилятор языка С/С++. Думаю объяснять зачем он нужен не требуется  Я использую Microsoft Visual Studio 2003 .NET
  • HEX редактор. Он нужен для того, чтобы узнать оффсет данных в файле, которые надо изменить. Я использовал HEX Workshop v5. Взять можна здесь: http://dociyo.nnm.ru/hex_workshop_v5022769.
  • Дампер HEX в тестовый файл в виде массива. Я использовал BIN2TEXT. Можете еще использовать мою разработку Into Hex. Взять их можна соответственно в этих местах: http://rapidshare.com/files/84364989/BIN2TEXT.EXE , http://forum.antichat.ru/showthread.php?p=543234 .
[ 0x02 Build ]
Перед тем, как делать билдер, надо собственно взять саму программу, для которой будем делать билдер. Я решил не делать билдер для какого-то уже готового продукта, а сделать этот сам продукт самому.

Вот его исходник:
Код:
#include <windows.h>

int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	char szText[256] = "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq";

	MessageBox(0, szText, "!", 0);
}
Как ясно из исходного кода, ничего сверхъестественного наша программка делать не будет. Всего лиш покажет диалоговое окно с нашей надписью на нем.

Посмотрите внимательно на объявление переменной szText. Во-первых она заданой длины ( 256 байт ). Во-вторых ей сразу присваивается значение, состоящие из 255 символов ‘q’, а также 256-ого символа окончания строки ‘\0’. Вы спросите почему мы задали эту строку через цикл или не функцией memcpy? А потому что, тогдабы наша строка инициализировалась в момент выполнения программы, и при отбражении ее в HEX редакторе мы бы нашли только один символ ‘q’, который бы мы передавали в цикле или функции. Как аналог можна было б выполнить функцию strcpy, но эти не рационально, потому как в ее параметре мы передали б все ту же строку, состоящую из 255 символов ‘q’ и одного ‘\0’. То есть мы бы просто-напросто затрачивали лишнии ресурсы на запуск постороней функции.

После объявления переменной, мы вызываем функцию MessageBox, в параметры которой передаем указатель на нашу строку. Эта функция и покажет нам наше диалоговое окно с нашей строкой.

После написания исходного кода, компилируем его и получаем exe файл, для которго и будем делать билдер.
[ 0x03 Builder ]
Теперь поговорим о самом интересном

Изменять как вы уже догадались мы будем ту самую строку, которая выводится в диалогов окне.

Для начала нам нужно сделать дамп HEX’а нашей программки. Запускаем BIN2TEXT с такими параметрами:
  • bin2text.exe c build.exe

Примичание. Build.exe – это исполняемый файл, который мы создали в пред. пункте.

После этого у нас в папке с BIN2TEXT появился файлик build.c. Открываем его и видим внутри уже созданный массив типа unsigned char ( BYTE ), в котором находится каждый байтик нашей программки.

Далее запускаем HEX Workshop и в нем открываем build.exe. Выбираем пункт меню Edit->Find… ( CTRL+F ). В открывшемся диалоговом окне вводим такие значения:
  • Type: Text String
  • Value: qqqq

Поток жмем на кнопку OK. Мы видим что программа спозиционировала нас на оффсет, где записана наша строка. В нижней панельке в самой верхей стркое будет написано что-то по типу offset: 17136 [0x000042F0]. Это и будет оффсет нашей строки. Нас интересует его значение в десятичном представлении, то есть 17136.

После того как мы сделали все предварительные действия, приступаем к написанию самого билдера.

Покажем билдеру оффсет нашей строки:

Код:
#define OFFSET 17136
Скопируем из build.c в наш проект массив данных. В своей программе я переименовал массив из build в data.

Код:
unsigned char data[]=
{
0x4d,0x5a,0x90,0x00,0x03,0x00,0x00,0x00
...
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
Теперь напишем функцию, которая будет изменять в этом массиве наши данные.

Код:
int Replace(char * szReplace)
{
	if ( strlen(szReplace) > 256 )
	{
		return 0;
	}

	for ( int k=OFFSET, l=0; l<=(int) strlen(szReplace); k++, l++ )
	{
		data[k] = szReplace[l];
	}

	return 1;
}
В параметры этой функции мы передаем указатель на строку, которая будет заменять собой строку в билде.

Потом мы проверяем не выходит ли стркоа за рамки допустимой длины ( ведь в нашей программе макс. строка – это 256 символов ). Если выходит – тогда завершаем функцию, возвращая 0.

Далее мы делаем цикл, в котором собственно изменяется строка. k – это номер байта в массиве ( начало нашей строки – OFFSET ), l – текущий символ новой строки. С каждым проходом цикла изменяется по одному символу строки на новый. В самом цикле мы указали условие выхода, когда l будет больше длины новой строки. Это надо для того, чтобы скопировать последний символ строки, то есть смвол окончания строки ‘\0’.

Потом функция возвращает 1, как знак того, что она выполнилась успешно.

Теперь разберем главную функцию билдера:

Код:
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShow)
{
	char szReplace[256];
	FILE * fFile;

	strncpy(szReplace, lpCmdLine, 256);
	if ( Replace(szReplace) == 0 )
	{
		MessageBox(0, "Error!", "Builder", 0);
		return 0;
	}

	fFile = fopen("file.exe", "wb");
	fwrite(data, sizeof(unsigned char), sizeof(data), fFile);
	fclose(fFile);

	return 1;
}
В самом начале мы объявляем строку длиной 256 символов. Далее мы копируем в нее 256 символов из строки параметров нашей программы. Это и будет строка, которая будет заменена в программе.

Далее мы вызываем ранее написаную нами функцию Replace, в параметр которой мы передаем указатель на нашу строку szReplace. Если функция вернула 0, то сообщаем об ошибке и и завершаем выполнение нашей программы.

Следующим шагом будет собствено создание самого билда. Мы открываем файл на запись в бинарном режиме ( если он ранее существовал, то будет уничтожен ) и пишем туда наш, уже измененый, массив данных. Потом закрываем файл и завершаем выполнение программы.

После компиляции, мы можем запускать наш билдер. Допустим так:
  • builder.exe Hello!

В директории с билдером появится файл file.exe. После запуска которго, мы увидим диалоговое окошко с надписью “Hello!”.
[ 0x04 Outro ]
На этом все  Мы написали свой собственный билдер, иэто было не так уж и сложно. Надо лишь уметь работать с HEX редактором, умение работать с массивами и с файлами в языке С/С++.

Исходные тексты программ, разработаных в данной статье, можна взять здесь: http://rapidshare.com/files/84378956/builder.rar.

С уважением RaZzZaR.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Жучек для прослушки своими руками Gen1rus Сотовый фрикинг 16 10.03.2009 12:29
Лазер своими руками!!! silveran Аппаратное обеспечение 24 18.12.2008 20:50
eXploit Builder Fugitif Forum for discussion of ANTICHAT 1 08.12.2007 02:48
Руководство по подсветке корпуса своими руками dinar_007 Аппаратное обеспечение 8 28.02.2006 20:54
Как своими руками заставить мышь вибрировать dinar_007 Аппаратное обеспечение 8 17.02.2006 09:18



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


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




ANTICHAT.XYZ