![]() |
Первый опыт с бэкдором
Такая история. Как-то один сайт под виндой сломал, загрузил, значится, туда шелы радмины и т.д. и т.п. Скопировал инфу, поугарал над админом, ну вообщем все как полагается =) Ну а на следующий день этот самый админ все это хозяйство и прикрыл. Ну в этот самый момент я и подумал, что надо иметь какое-то дополнительное средство перестраховки. Пользоваться чужими бэкдорами в лом и как-то не в кайф =), да и антивирями палятся моментом.
Перехожу к сути. Нужно на сишке написать программку такого типа. Все бы ничего, но вот проблема: как сделать че-то типа виндовой командной строки, т.е. задаешь, например, команду dir C: и получаешь в качестве ответа список файлов на диске С или то же самое с ipconfig и т.п. Про скрытность проги спрашивать пока не буду. Попробую сам че-нить "помыслить" =) Вообщем помогите кто чем может... З.Ы. Работаю в 2007 билдере (codegear который ака бывший борланд) |
Ну по идее выложи свои наработки, чтоб разговор был более предметным, разве не так?
|
Цитата:
И в-принципе че здесь можно выкладывать то? Исходники общения с каким-то сервером?.... Мне бы примерчик какой-нибудь по этой теме. А именно: эмуляция командной строки. Чтоб дальше предметный разговор вести... |
Win32 C++ Bind Shell:
https://www.rootkit.com/newsread_print.php?newsid=96 |
Цитата:
Нашел простое решение проблемы: Код:
#include <stdlib.h> |
Цитата:
|
Цитата:
Код:
>>answer.txtКонечно не все команды так работать будут, но процентов 90 должно по-любому, имхо. |
Dobby007, ну смотри...твой процесс работы(со стороны сервера):
Цитата:
Цитата:
|
Цитата:
|
Так ведь дали ссылку =)
Че там выкидывать-то?)) Ты просто вместо функций записи и чтения файла используй send() или sendto() :) |
Цитата:
Цитата:
скачать: http://rapidshare.com/files/171421315/bsAdmin.rar.html зеркало: http://rghost.ru/64854 зеркало: http://d.lsass.us/271 PS: Делфи |
_popen
Creates a pipe and executes a command. MSDN! Код:
|
Цитата:
Цитата:
З.Ы. Про МСДН учту =) |
угу, создаешь свой протокол, описываешь его и реализуешь.
|
и опять я =))))
Народ...
Вроде после долгих мучений и изучением (практически с нуля) как работать с сокетами на голом си, основную часть бэкдора сделал. Вот-с значит... Надо теперь организовать отправку файла. Ну с текстовыми файлами проблем вообще нет никаких: накалякал код, что программка отправляла и принимала файлы ЛЮБЫХ размеров. А вот с бинарными... Т.е. например *.exe или *.jpg... не выходит че-то, проще говоря. А если точнее, не получается прочитать его. Читается какая-та определенная часть и фзё. Вот код: СЕРВЕР: Код:
int sendfile(int ptr, char filename[255])Код:
int ret=0;char temp[20 * 1024]="";int i=0,j=0,t=0,k=0;Скорее всего, че-то я туплю и наверное решение какое-то простое (как всегда по-жизни :) ) должно быть. Но блин парюсь уже два дня, не могу понять в чем дело. Вообщем, помогите кто чем может =)) |
полностью код не просматривал, но что бросилось в глаза:
Код:
strncpy(temp,szRecvBuff,4); //четыре байта содержащие размер пакетаИ еще - функция recv может еще возвратить 0 если соединение корректно завершено удаленным узлом. Не мешало бы это обрабатывать. вообще tcp есть потоковый протокол, то есть твой алгоритм не должен зависеть от того, пришли ли данные одним пакетом или несколькими. А у тебя кажется зависит... для пересылки файлов есть замечательная функция TransmitFile лучше юзай ее |
Цитата:
Цитата:
Цитата:
Цитата:
P.s. Спасибо кстати за оперативный ответ. |
по поводу TransmitFile
http://msdn.microsoft.com/en-us/library/ms740565(VS.85).aspx Header: Mswsock.h Library: Mswsock.lib DLL: Mswsock.dll Цитата:
и еще - ты записываешь в файл с помощью fputs. Насколько я помню она пишет ANSIZ-строку, то есть если в твоем буфере где-то есть нулевой байт то все что после него записано не будет. Если файл бинарный то так делать нельзя, он будет сильно искажен |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Код:
sprintf(sendbuff,"%s%s",temp,filebuff); |
Цитата:
Шутка... Ты имеешь ввиду c memcpy и т.п. все копировать? |
Цитата:
Если ты хочешь написать действительно качественное сетевое приложение то сначала почитай эту книгу: Йон Снейдер "Эффективное программирование TCP/IP" |
Цитата:
TransmitFile посмотрел. Хорошо конечно. Но я так и не смог заставить ее работать. Возвращает какую-то ошибку с номером 6. На мсдн нет даже ее. Плюс еще размер программы увеличился. Было около 50кб а стало 173! За книжку спасибо - посмотрим... |
Цитата:
По поводу размеров: наверно доп. либы подключились :) |
С TransmitFile все предельно просто надо просто 2 указателя открытого приконекченного сокета и открытого файла.
Код:
char fname[1024]; |
Цитата:
Код:
HANDLE hFile=CreateFile("12321sa.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);Ну ладно... Вообщем сделал я, народ, передачу файлов "своим способом". Спасибо кстати Бонсу за совет про строки. Теперь и бинарные и текстовые передает. Плюс конечно же в том, ЧТО ПРОЦЕСС ОТПРАВКИ МОЖНО ОТСЛЕДИТЬ ;) :D Вот конечный вариант кода: Код:
// Посылаем файлКод:
//Принимаем файлВот то что делает программа вкратце: -Посылаем с клиента команду на принятие файла (элементарно, сами напишите) -Передаем путь к файлу и уже подключенный сокет в ReceiveFile() -Та отправляет клиенту размер файла, если файл существует или "ERROR_SENDING_FILE_TO_CLIENT" если его нет. -А дальше просто передается файл, как обычно, частями. В результате получается нечто похожее на: http://pic.ipicture.ru/uploads/09010...1S7sMZdVVJ.jpg |
Пходу файл неправильно открываешь.
|
Цитата:
|
Код:
HANDLE hFile=CreateFile("\\\\.\\C:\\12321sa.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,F ILE_ATTRIBUTE_NORMAL,NULL); |
Цитата:
Цитата:
Можно конечно написать у меня в коде CreateFile("\\?\C:\\123sa.txt",...), но здесь то в любом случае меньше 256 сиволов строчка... |
ЫЫЫЫЫ доконца читать нужно
Цитата:
|
Цитата:
Ладно... Мне в-принципе итак как щас устраивает (даже мне кажется так по-лучше будет). Цитата:
|
| Время: 04:49 |