Autor
|
Tema: SRCs de Hacker_Zero (Leído 7,229 veces)
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Bueno, lo primero no sé si esto debe ir aquí o en análisis y diseño de malware, sino no va a aquí que alguien lo mueva . ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\Inyección de Código en Memoria //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ By Hacker_Zero //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ http://www.eduhack.es //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ Format PE GUI 4.0 entry start include 'win32a.inc' Proceso db 'explorer.exe',0 nUser32 db 'USER32.DLL',0 nMessageBox db 'MessageBoxA',0 hProceso dd ? DirFuncion dd ? TamañoDatos dd ? pInfo PROCESS_INFORMATION sInfo STARTUPINFO start: ;Cargamos la USER32.DLL invoke LoadLibrary,nUser32 ;Obtenemos la dirección de MessageBoxA invoke GetProcAddress,eax,nMessageBox mov [mMessageBoxA],eax ;Obtenemos la dirección de ExitProcess push [ExitProcess] pop [mExitProcess] ;Creamos el Proceso invoke CreateProcessA,0,Proceso,0,0,0,CREATE_SUSPENDED,0,0,sInfo,pInfo ;Guardamos el Handle push [pInfo.hProcess] pop [hProceso] ;Obtenemos el tamaño e la función a inyectar mov ebx,FIN sub ebx,FuncionInyectada mov [TamañoDatos],ebx ;Reservamos espacio en memoria para la función a inyectar invoke VirtualAllocEx,[hProceso],0,[TamañoDatos],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE mov [DirFuncion],eax ;Escribimos en memoria los datos invoke WriteProcessMemory,[hProceso],[DirFuncion],FuncionInyectada,[TamañoDatos],0 ;Creamos el hilo en el proceso invoke CreateRemoteThread,[hProceso],0,0,[DirFuncion],0,0,0 ;Salimos invoke ExitProcess,0 ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\///\ Función Que se Inyecta ///\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// proc FuncionInyectada ;Obtenemos la dirección de memoria donde nos estamos ejecutando pushad call delta delta: pop ebp sub ebp,delta push ebp ebp pop ebx ecx ;Obtenemos la dirección donde se cargó el Mensaje y el Título add ebx,Mensaje add ecx,Titulo ;Llamamos a MessageboxA push 0 push ebx push ecx push 0 call [ebp+mMessageBoxA] ;Llamamos a ExitProcess push 0 call [ebp+mExitProcess] Titulo db 'Code Inyectado!',0 Mensaje db 'xD',0 ;Las direcciones en memoria de las apis mMessageBoxA dd ? mExitProcess dd ? endp FIN: ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\/// Fin Función Que se Inyecta //\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// data import library KERNEL32,'KERNEL32.DLL' import KERNEL32,\ CreateProcessA,'CreateProcessA',\ CreateRemoteThread,'CreateRemoteThread',\ WriteProcessMemory,'WriteProcessMemory',\ VirtualAllocEx,'VirtualAllocEx',\ ExitProcess,'ExitProcess',\ LoadLibrary,'LoadLibraryA',\ GetProcAddress,'GetProcAddress' end data
Está comentado e intenté escribirlo de forma clara para que sea fácil de comprender. Saludos
|
|
« Última modificación: 18 Abril 2009, 11:55 am por Hacker_Zero »
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Bueno, pues hice esto para explorar lo que ofrece la AVICAP32.DLL y me sorprendió mucho, igual me animo a hacer un reproductor de música y/o vídeo . Bueno el programa tiene algunos fallos como que aveces se freezea al empezar a grabar (igual creando un nuevo hilo se soluciona o igual estoy haciendo algo mal ) y que probando con mi webcam un vídeo de 40 segundos me ocupó 350mb de disco . Ésto creo que es porque no tiene soporte para compresión, igual con otras webcams no pasa, no sé. EDITO: Pulsar ESC para detener la grabación! Os dejo el source: ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ Ejemplo Controlador de WebCam //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ By Hacker_Zero //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ http://www.eduhack.es //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ Format PE GUI 4.0 entry start include 'C:\fasm\include\win32ax.inc' include 'C:\fasm\include\api\comdlg32.inc' include 'C:\fasm\include\api\kernel32.inc' include 'C:\fasm\include\api\user32.inc' ;Constantes para los botones ID_COMENZAR = 101 ID_PARAR = 102 ID_FOTO = 103 ID_GUARDAR = 104 ID_GRABAR = 105 ID_COMPRESION = 107 ID_VIDEO = 108 ;Constantes para controlar el driver WM_CAP_DRIVER_CONNECT = 1034 WM_CAP_DRIVER_DISCONNECT = 1035 WM_CAP_FILE_SAVEAS = 1047 WM_CAP_FILE_SAVEDIB = 1049 WM_CAP_DLG_VIDEOCOMPRESSION = 1070 WM_CAP_SET_PREVIEW = 1074 WM_CAP_SET_PREVIEWRATE = 1076 WM_CAP_SET_SCALE = 1077 WM_CAP_GRAB_FRAME = 1084 WM_CAP_SEQUENCE = 1086 WM_CAP_DLG_VIDEOFORMAT = 1065 section '.data' data readable writeable nArchivo rb 256 hWebcam dd ? Filtro db 'Bitmap (*.bmp)',0,'*.bmp',0 Filtro2 db 'AVI (*.avi)',0,'*.avi',0 CD OPENFILENAME ? section '.code' code readable executable start: xor ebx,ebx ;ebx=0 invoke GetModuleHandle,ebx invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,ebx invoke ExitProcess,ebx ;Ciclo de eventos de la ventana proc DialogProc hwnddlg,msg,wparam,lparam push ebx esi edi cmp [msg],WM_CLOSE je wmclose cmp [msg],WM_COMMAND je wmcommand cmp [msg],WM_INITDIALOG je wminitdialog xor eax,eax jmp finish wminitdialog: invoke capCreateCaptureWindowA,ebx,WS_VISIBLE or WS_CHILD,10,10,350,270,[hwnddlg],ebx mov [hWebcam],eax jmp processed wmcommand: cmp [wparam],BN_CLICKED shl 16 + ID_COMENZAR je Comenzar_Click cmp [wparam],BN_CLICKED shl 16 + ID_PARAR je Parar_Click cmp [wparam],BN_CLICKED shl 16 + ID_FOTO je Foto_Click cmp [wparam],BN_CLICKED shl 16 + ID_GUARDAR je Guardar_Click cmp [wparam],BN_CLICKED shl 16 + ID_GRABAR je Grabar_Click cmp [wparam],BN_CLICKED shl 16 + ID_COMPRESION je Compresion_Click cmp [wparam],BN_CLICKED shl 16 + ID_VIDEO je Video_Click jmp finish wmclose: invoke SendMessage,[hWebcam],WM_CAP_DRIVER_DISCONNECT,ebx,ebx invoke DestroyWindow,[hWebcam] invoke EndDialog,[hwnddlg],ebx processed: mov eax,1 finish: pop edi esi ebx ret endp ;Empezamos a capturar proc Comenzar_Click invoke SendMessage,[hWebcam],WM_CAP_DRIVER_CONNECT,ebx,ebx ;Conectamos el driver invoke SendMessage,[hWebcam],WM_CAP_SET_SCALE,TRUE,ebx ;Escalamos la imagen al tamaño de la ventana invoke SendMessage, [hWebcam], WM_CAP_SET_PREVIEWRATE,100,ebx ;Fotos por segundo que se muestran invoke SendMessage,[hWebcam],WM_CAP_SET_PREVIEW,TRUE,ebx ;Habilitamos el preview en la ventana ;(que se vea video en la ventana) jmp finish endp ;Paramos de capturar proc Parar_Click invoke SendMessage,[hWebcam],WM_CAP_DRIVER_DISCONNECT,ebx,ebx ;Desconectamos el driver jmp finish endp ;Guardar imagen en archivo proc Guardar_Click mov [CD.lStructSize],76 mov [CD.lpstrFilter],Filtro mov [CD.lpstrFile],nArchivo mov [CD.nMaxFile],256 invoke GetSaveFileName,CD ;Mostramos el Common Dialog invoke lstrcat,nArchivo,'.bmp' ;Añadimos la extensión al archivo invoke SendMessage,[hWebcam],WM_CAP_FILE_SAVEDIB,ebx,nArchivo ;Guardamos la imagen en el archivo.bmp jmp finish endp ;Hacemos una foto proc Foto_Click invoke SendMessage,[hWebcam],WM_CAP_GRAB_FRAME,ebx,ebx ;Hacemos la foto jmp finish endp ;Empezamos a grabar (pulsar ESC para detener) proc Grabar_Click mov [CD.lStructSize],76 mov [CD.lpstrFilter],Filtro2 mov [CD.lpstrFile],nArchivo mov [CD.nMaxFile],256 invoke GetSaveFileName,CD ;Mostramos el Common Dialog invoke lstrcat,nArchivo,'.avi' ;Añadimos la extensión al archivo invoke SendMessage,[hWebcam],WM_CAP_SEQUENCE,ebx,ebx ;Empezamos a grabar la secuencia invoke SendMessage,[hWebcam],WM_CAP_FILE_SAVEAS,ebx,nArchivo ;Guardamos la secuencia en el archivo al terminar jmp finish endp proc Video_Click invoke SendMessage,[hWebcam],WM_CAP_DLG_VIDEOFORMAT,ebx,ebx ;Mostramos la ventana de configuración de ;vídeo (varía según el dispositivo) jmp finish endp proc Compresion_Click invoke SendMessage,[hWebcam],WM_CAP_DLG_VIDEOCOMPRESSION,ebx,ebx ;Mostramos la ventana de configuración de ;compresión (varía según el dispositivo) jmp finish endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ comdlg32,'COMDLG32.DLL',\ avicap32,'AVICAP32.DLL' import avicap32,capCreateCaptureWindowA,'capCreateCaptureWindowA' section '.rsrc' resource data readable directory RT_DIALOG,dialogs resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,Principal dialog Principal,'WebCam Capturer',330,100,250,220,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME dialogitem 'BUTTON','Comenzar',ID_COMENZAR,20,180,45,14,WS_VISIBLE dialogitem 'BUTTON','Parar',ID_PARAR,70,180,45,15,WS_VISIBLE dialogitem 'BUTTON','Foto',ID_FOTO,120,180,45,15,WS_VISIBLE dialogitem 'BUTTON','Guardar',ID_GUARDAR,170,180,45,15,WS_VISIBLE dialogitem 'BUTTON','Grabar',ID_GRABAR,20,200,45,15,WS_VISIBLE dialogitem 'BUTTON','Compresión',ID_COMPRESION,120,200,45,15,WS_VISIBLE dialogitem 'BUTTON','Video',ID_VIDEO,170,200,45,15,WS_VISIBLE enddialog
Os dejo una captura para los que no quieren compilar ¬¬' : Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Muy buen code Cuando lo vi en CM me encanto Saludos PD: Porque haces PUSH/POP envez de MOV?
|
|
« Última modificación: 18 Abril 2009, 13:07 pm por Karcrack »
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Porque no se puede hacer un mov entre dos variables, o lo haces con push y pop o usas un registro como hueco temporal y así lo haces con mov. Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Porque no se puede hacer un mov entre dos variables, o lo haces con push y pop o usas un registro como hueco temporal y así lo haces con mov. Saludos Cierto Por cierto, he estado testeando tu code y no inyecta, crea un proceso nuevo, habria que hacerlo asi para inyectar: ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\Inyección de Código en Memoria //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ By Hacker_Zero //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\ http://www.eduhack.es //\\\///\\\///\\\///\\\ ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\ Format PE GUI 4.0 entry start include 'win32a.inc' ;Proceso db 'explorer.exe',0 Proceso dd 1172d ;PID del proceso a inyectar nUser32 db 'USER32.DLL',0 nMessageBox db 'MessageBoxA',0 hProceso dd ? DirFuncion dd ? TamañoDatos dd ? pInfo PROCESS_INFORMATION sInfo STARTUPINFO start: ;Cargamos la USER32.DLL invoke LoadLibrary,nUser32 ;Obtenemos la dirección de MessageBoxA invoke GetProcAddress,eax,nMessageBox mov [mMessageBoxA],eax ;Obtenemos la dirección de ExitProcess push [ExitProcess] pop [mExitProcess] ;Creamos el Proceso ;invoke CreateProcessA,0,Proceso,0,0,0,CREATE_SUSPENDED,0,0,sInfo,pInfo invoke OpenProcess, PROCESS_CREATE_THREAD + PROCESS_VM_OPERATION + PROCESS_VM_WRITE, FALSE, [Proceso] ;Guardamos el Handle ;push [pInfo.hProcess] ;pop [hProceso] mov [hProceso], eax ;Obtenemos el tamaño e la función a inyectar mov ebx,FIN sub ebx,FuncionInyectada mov [TamañoDatos],ebx ;Reservamos espacio en memoria para la función a inyectar invoke VirtualAllocEx,[hProceso],0,[TamañoDatos],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE mov [DirFuncion],eax ;Escribimos en memoria los datos invoke WriteProcessMemory,[hProceso],[DirFuncion],FuncionInyectada,[TamañoDatos],0 ;Creamos el hilo en el proceso invoke CreateRemoteThread,[hProceso],0,0,[DirFuncion],0,0,0 ;Salimos invoke ExitProcess,0 ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\///\ Función Que se Inyecta ///\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// proc FuncionInyectada ;Obtenemos la dirección de memoria donde nos estamos ejecutando pushad call delta delta: pop ebp sub ebp,delta push ebp ebp pop ebx ecx ;Obtenemos la dirección donde se cargó el Mensaje y el Título add ebx,Mensaje add ecx,Titulo ;Llamamos a MessageboxA push 0 push ebx push ecx push 0 call [ebp+mMessageBoxA] ;Llamamos a ExitProcess ;push 0 ;call [ebp+mExitProcess] Titulo db 'Code Inyectado!',0 Mensaje db 'xD',0 ;Las direcciones en memoria de las apis mMessageBoxA dd ? mExitProcess dd ? endp FIN: ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\/// Fin Función Que se Inyecta //\\\///\\\///\\\/// ;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\/// data import library KERNEL32,'KERNEL32.DLL' import KERNEL32,\ OpenProcess,'OpenProcess',\;CreateProcessA,'CreateProcessA',\ CreateRemoteThread,'CreateRemoteThread',\ WriteProcessMemory,'WriteProcessMemory',\ VirtualAllocEx,'VirtualAllocEx',\ ExitProcess,'ExitProcess',\ LoadLibrary,'LoadLibraryA',\ GetProcAddress,'GetProcAddress' end data
Haciendo esto no seria recomendable usar ExitProcess... sino te cargas el Explorer
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Si, osea es un código de inyección en memoria, no de inyección en proceso, crea una nueva instancia del exe e inyecta el código, para inyectar el proceso sería lo mismo casi pero con OpenProcess, como bien dijiste jeje.
Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
interesante codigo, ya podre hacer un chat con WebCam. Gracias man. saludos
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Jaja, perfecto luego pones el código eh? . Lo que yo no conseguí fue comprimir la salida en vídeo, no se si es que mi cam no vale, aunque seguro hay otras formas, tampoco busqué mucho la verdad. Me alegro de que te haya servido. Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
de momento es muy básico, recién empiezo con la programación con redes. Pero si quieres lo posteo.
Saludos
|
|
|
En línea
|
|
|
|
c4st0r
Desconectado
Mensajes: 33
|
Muy bueno el code se agradece, para hacer las fotos mas livianas puede usar la compresion BMP RLE8 las fotos pesan casi como JPG
|
|
|
En línea
|
|
|
|
|
|