Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - dapz

#1
Rootkits ? Windows ? 2018 ? Jajaja
Que buenos recuerdos los años 2009-2013 . Los rootkits de verdad murieron con x86 hace años .
Todos los ejemplos que se han sacado en x64 (todos bootkits) son tecnologia antigua , 100% detectable hoy en dia e incluso me atrevo a decir que estan muertos totalmente . Quizas haya algun gobierno con equipos sponsorizados que tengan un kit para un windows 10 (no digo 7 , vista o xp porque no interesan) x64, pero hasta que no se vea ninguno con tecnologia diferente o nuevas tecnicas de bypassear DSE , los rootkits en windows estan muertos
#2
Análisis y Diseño de Malware / Re: Zeus Botnet
7 Diciembre 2017, 22:44 PM
Zeus (zbot) es el mas "emblematico" por el bombo mediatico que le daban , todo por ser un troyano bancario.

Desde de un punto de vista tecnico de desarrollo nada se acerca a ZeroAccess o TDL , en mi opinion dos de las familias de malware mas avanzadas que se hayan creado de calle ademas. Ninguno de ellos atacaban bancos . Tenian un programa de afiliados , vendian paquetes con el kit completo por precios astronomicos y actuaban como plataformas para descargar mas malware + el sistema de clicks fraudulentos . Silencioso y mucho mas efectivo que atacar bancos
#3
La funcion para poder cambiar el escritorio es SystemParametersInfo

BOOL WINAPI SystemParametersInfo(
  _In_    UINT  uiAction,
  _In_    UINT  uiParam,
  _Inout_ PVOID pvParam,
  _In_    UINT  fWinIni
);

defines los parametros , la ruta de la imagen y cambia el fondo de escritorio, y lo del video
explicalo mejor, igual te refieres a un gif

#5
Mi pequeño Loader, que hace :
1-) registrar un servicio y ejecutarlo
2-) detener un servicio y eliminarlo

Loader:

#include <Windows.h>
#include <stdio.h>

char *driver = "C:\\hellowWorld.sys";

void instalar_driver() {
SC_HANDLE Manager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
if (Manager != ERROR) {
printf("\nCargando el driver...");
SC_HANDLE Service = CreateService(Manager, "TEST", "TEST", SERVICE_START | DELETE | SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, driver, NULL, NULL, NULL, NULL, NULL);
if (Service == ERROR) {
Service = OpenService(Manager, "TEST", SERVICE_START | DELETE | SERVICE_STOP);

}
if (Service) {
StartService(Service, 0, NULL);
printf("\nServicio Ejecutado");
}
CloseServiceHandle(Manager);
}

}

void eliminar_driver() {

SC_HANDLE Manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (Manager != ERROR) {
SC_HANDLE Service = OpenService(Manager, "TEST", SERVICE_START | DELETE | SERVICE_STOP);
if (Service != ERROR) {
SERVICE_STATUS status;
ControlService(Service, SERVICE_CONTROL_STOP, &status);
printf("\nServicio Detenido");
DeleteService(Service);
printf("\nServicio Eliminado");
CloseServiceHandle(Service);
}
CloseServiceHandle(Manager);
}
}

int main(void) {
int opcion;
while (1)
{
printf("\n1) cargar driver");
printf("\n2) eliminar driver de la memoria");
printf("\n3) salir del menu");
printf("\n\n->  ");
scanf("%d", &opcion);
switch (opcion) {
case 1:
instalar_driver();
break;
case 2:
eliminar_driver();
break;
case 3:
exit(1);

default:
printf("\n\nOpcion incorrecta");
break;
}

}
return 0;
}


Codigo del Driver

#include <ntddk.h>


VOID Unload(PDRIVER_OBJECT DriverObject)
{
DbgPrint("Driver Unloaded From Memory\n");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath)
{
DbgPrint("Hellow World From Kernel Space\n");
DriverObject->DriverUnload = Unload;  // No siempre hay que limpiar el codigo , pero si es recomendable si vamos a hacer pruebas, ya que , de lo contrario hay que reiniciar el ordenador continuamente
return STATUS_SUCCESS;
}


https://imgur.com/kfXwXNf
https://imgur.com/oeWnpO1
https://imgur.com/4obeza9

#6
Cita de: Yuki en 16 Septiembre 2017, 07:46 AM
Y... para el servidor te recomendaría cualquiera lenguaje que genere un .exe, yo personalmente nunca usaría un lenguaje como java o .net para crear un servidor de botnet.

Según tengo entendido, una botnet es semejante a cualquier troyano normal solo que con la variante de que por lo general se utilizan para realizar ataques de denegación de servicio, por esta razón se esperan una gran cantidad de conexiones y esto obliga a los desarrolladores a escribir los clientes en lenguajes como PHP, lo que les permite subir el cliente a un hosting de terceros que aguante las conexiones.

Te dejo el siguiente post que habla un poco de Winsocks de Windows.

C++ Winsockets como reconectar un cliente al server

¡Saludos!

Los ataques de denegacion de servicio apenas generan beneficios . Es la ultima opcion que tendria en un bot . Lo principal es un sistemas de clicks fraudulentos , es lo que mas dinero genera junto con un grabber de contraseñas . Realmente son las dos unicas opciones que consideraria imprescindibles
#7
Programación C/C++ / Inyeccion Dll básica
28 Agosto 2017, 18:31 PM
Como hacer una inyección básica de una dll en C

Código dll

#include <Windows.h>

BOOL APIENTRY DllMain(HMODULE hMod, DWORD callback, LPVOID Param)
{
switch(callback)
{
case DLL_PROCESS_ATTACH:
aqui ponemos el codigo que queremos que se ejecute en la dll
MessageBoxW(NULL, TEXT("Hola desde proceso injectado !"), TEXT("Test"), MB_ICONINFORMATION);
case DLL_PROCESS_DETACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
default:
break;
}
return TRUE;
}


codigo de la aplicacion externa

#include <Windows.h>
#include <stdio.h>
#include <winternl.h>

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

typedef struct _CLIENT_ID
{
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID, *PCLIENT_ID;

extern "C" NTSTATUS NTAPI ZwOpenProcess(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientID);


int main(int argc, char *argv[]) {

char *ruta_dll = "C:\\Dlltest.dll";
ULONG pid;
OBJECT_ATTRIBUTES oa;
HANDLE hproc;
CLIENT_ID cid;
NTSTATUS status;


printf("\n pid -> ");
scanf("%d", &pid);


cid.UniqueProcess = (HANDLE)pid;
cid.UniqueThread = 0;
InitializeObjectAttributes(&oa, NULL, 0, NULL, NULL);
if(NT_SUCCESS(ZwOpenProcess(&hproc, PROCESS_ALL_ACCESS, &oa, &cid))) {
if(NT_SUCCESS(status)) {
HMODULE dll = GetModuleHandle(L"kernel32");
if(dll != NULL) {
FARPROC load = GetProcAddress(dll, "LoadLibraryA");
if(load != ERROR) {
LPVOID base = VirtualAllocEx(hproc, NULL, 256, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if(base != ERROR) {
BOOL exito = WriteProcessMemory(hproc, base, ruta_dll, strlen(ruta_dll) + 1, NULL);
if(exito != 0) {
HANDLE thread = CreateRemoteThread(hproc, NULL, NULL, (LPTHREAD_START_ROUTINE)load, base, NULL, NULL);
if(thread != ERROR) {
printf("\n dll inyectada en proceso id: %d", pid);
}
}
}
}
}
}
}
return 0;

}

http://imgur.com/DsEoTz4
http://imgur.com/6HoVbVR
http://imgur.com/jD3CYTH

#8
Cita de: Grado 33 en 26 Agosto 2017, 04:15 AM
Oye y los troyanos son """"simplemente"""" eso?? enviar un comando, que no es mas que un numero o una string (en definitiva un dato/variable) y dependiendo de cual sea, el cliente ejecuta una acción u otra??

a muy grosso modo si, son eso, una aplicación cliente-servidor. Sin embargo hoy en día las cosas no son tan simples. El cliente del troyano tiene que esconderse por razones obvias. Tiene que esconder llaves del registro, archivos, procesos etc, y eso se consigue con dlls que al fin y al cabo son una forma de ejecutable, necesarios para hacer hooks en windows
#9
los mejores  foros malware son rusos (mas que nada por que bastante buenos desarrollando) , y no , no hace falta irse a la cebolla para encontrarlos, normalmente los registros en este tipo de foros es tener un requisito principal, hablar el idioma . Hacen versiones del foro para gente extranjera, uno de ellos es exploit.in , foro en ruso nativo y en inglés, es de pago .
#10
Usando NtOpenProcess para conseguir el handle del proceso NtTerminateProcess para acabarlo

Código (cpp) [Seleccionar]
#include <Windows.h>
#include <winternl.h>
#include <stdio.h>


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

typedef struct _CLIENT_ID
{
     PVOID UniqueProcess;
     PVOID UniqueThread;
} CLIENT_ID, *PCLIENT_ID;

EXTERN_C NTSTATUS NTAPI NtOpenProcess(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PCLIENT_ID);
EXTERN_C NTSTATUS NTAPI NtTerminateProcess(HANDLE, NTSTATUS);

void main() {
OBJECT_ATTRIBUTES oa;
HANDLE hProc;
ULONG pid;
CLIENT_ID cid;


printf("\n introduce pid-> ");
scanf("%ld", &pid);
cid.UniqueProcess = (HANDLE)pid;
cid.UniqueThread = 0;
InitializeObjectAttributes(&oa, NULL, 0, NULL, NULL);
if(NT_SUCCESS(NtOpenProcess(&hProc, PROCESS_TERMINATE, &oa, &cid))) {
NTSTATUS status = NtTerminateProcess(hProc, 1);
if(NT_SUCCESS(status)) {
MessageBoxW(0, TEXT("proceso terminado"), TEXT("test"), MB_ICONINFORMATION);
}
}
NtClose(hProc);




}