elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 [8] 9 10
71  Programación / ASM / Heap en: 1 Julio 2012, 03:07 am
Bueno pues en una conversacion con un amigo salio la conversacion de la pila y el heap y me surgio la siguiente duda que no pudimos solucionar entre los dos...

La pila la puedes manejar desde instrucciones en ASM y puedes gestionar esa memoria, que tiene un limite como quieras, pero el heap donde esta?  no creo que eso se reserve con los datos del formato PE ya que puedes utilizar esta memoria dinamicamente con el tamaño que deses... pensando pensando me llego una ligera idea de que el heap lo maneja el SO, para gestionar bien la memoria RAM o que se yo... alguien sabe responder dicha duda?


saludos.
72  Programación / ASM / Crear gráficos en: 1 Mayo 2012, 12:47 pm
Como se pueden crear gráficos a partir de la consola? es una duda que tengo desde hace bastante   :xD

saludos.
73  Foros Generales / Sugerencias y dudas sobre el Foro / Sección Analisis y Diseño de Malware en: 15 Diciembre 2011, 13:29 pm
Ultimamente se esta desmadrando y solo hay preguntas de tipo "lammer", no estaria de menos que se pusieran unas reglas y que se empezaran a eliminar post mas que absurdos y que no siguen la politica del foro ni la ética, ademas creo que en algun momento estuvieron prohibidos en ese subforo.

saludos.
74  Seguridad Informática / Análisis y Diseño de Malware / Intento de agregar sección a ejecutable en: 16 Septiembre 2011, 23:22 pm
Ya estoi aqui de nuevo, esta vez e intentado agregar una nueva sección a un ejecutable, sin exito  :xD

este es el código que tengo:

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7. IMAGE_DOS_HEADER dh;
  8. IMAGE_NT_HEADERS nth;
  9.  
  10. IMAGE_SECTION_HEADER * sección;
  11. IMAGE_SECTION_HEADER nSeccion;
  12.    // char * stub_dos -> Datos del STUB_DOS
  13.    // char * dSecciones -> Datos de las secciones
  14.  
  15. FILE * archivo = fopen("c:\\windows\\system32\\calc.exe","r+b");
  16.    if (archivo == NULL)
  17.    {
  18.        printf("Error al leer el archivo\n");
  19.        system("PAUSE");
  20.  
  21.        return 1;
  22.    }
  23.  
  24. fread(&dh,sizeof(dh),1,archivo); // Rellenamos IMAGE_DOS_HEADER
  25.  
  26.    char * stub_dos = (char*)malloc(dh.e_lfanew-0x40);
  27.  
  28.    fread(stub_dos,1,dh.e_lfanew-0x40,archivo); // Leemos el Stub DOS
  29.    fread(&nth,sizeof(nth),1,archivo); // leemos nt headers
  30.  
  31.    sección = (IMAGE_SECTION_HEADER*)malloc(sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections);
  32.  
  33.    fread(sección,sizeof(IMAGE_SECTION_HEADER),nth.FileHeader.NumberOfSections,archivo);
  34.  
  35.    char * dSecciones = (char*)malloc(nth.OptionalHeader.SizeOfImage);
  36.    fread(dSecciones,nth.OptionalHeader.SizeOfImage,1,archivo); //leo todos los datos de las secciones.
  37.  
  38.    fclose(archivo); // terminamos de leer
  39.  
  40.    ZeroMemory(&nSeccion,sizeof(IMAGE_SECTION_HEADER));
  41.  
  42.    int A = sección[nth.FileHeader.NumberOfSections-1].VirtualAddress;
  43.    int B = sección[nth.FileHeader.NumberOfSections-1].Misc.VirtualSize;
  44.    int C = nth.OptionalHeader.SectionAlignment;
  45.  
  46.    strcpy((char*)nSeccion.Name,".fary"); // nombre de la nueva sección: .fary
  47.    nSeccion.VirtualAddress = ((A+B)/C)*C+C;// direccion Virtual
  48.    nSeccion.SizeOfRawData = 0x64; // tamaño de la sección: 100
  49.    nSeccion.PointerToRawData = sección[nth.FileHeader.NumberOfSections-1].PointerToRawData + 0x64;  // direccion fisica
  50.    nSeccion.Characteristics = 0x10000020;
  51.    nSeccion.Misc.VirtualSize = 0x64;
  52.    //nSeccion.VirtulSize
  53.  
  54.    nth.FileHeader.NumberOfSections += 1; // sumamos la nueva sección
  55.    nth.OptionalHeader.SizeOfImage += 0x64;
  56.  
  57.    FILE * nuevo = fopen("NuevaCalc.exe","wb+");
  58.  
  59.    fwrite(&dh,sizeof(dh),1,nuevo);
  60.    fwrite(stub_dos,dh.e_lfanew-0x40,1,nuevo);
  61.    fwrite(&nth,sizeof(nth),1,nuevo);
  62.    fwrite(sección,sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections,1,nuevo);
  63.    fwrite(&nSeccion,sizeof(IMAGE_SECTION_HEADER),1,nuevo);
  64.    fwrite(dSecciones,nth.OptionalHeader.SizeOfImage,1,nuevo);
  65.  
  66.    char * DatosSeccion = (char*)malloc(0x64);
  67.    ZeroMemory(DatosSeccion,0x64);
  68.  
  69.    fwrite(DatosSeccion,0x64,1,nuevo);
  70.  
  71.    fclose(nuevo);
  72. system("PAUSE");
  73. return 0;
  74. }

Genera bien el nuevo archivo pero no pone bien los datos de la sección y ni que decir de ejecutarse (peta) XD. Así es como salen los datos de mi sección desde el lordPE:




haber si aguien sabe que ago mal...

saludos.
75  Seguridad Informática / Análisis y Diseño de Malware / [AYUDA] formato PE obtener dirección fisica de secciones y mas cosas en: 2 Septiembre 2011, 13:38 pm
Buenas, bueno al fin he decidido meterme de lleno a aprender el formato PE y tenia pensado agrandar  la sección de código par aintroducir un pequeño opcode con un msgbox y tal una chorradilla pero para ensayar no me parece mal  >:D.
El problema viene cuando no puedo detectar el ISH bien de todas las secciones, solo lo detecta bien de la primera, el código que he creado es este:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int main()
  6. {
  7. IMAGE_DOS_HEADER idh;
  8. IMAGE_FILE_HEADER ifh;
  9. IMAGE_OPTIONAL_HEADER ioh;
  10. IMAGE_SECTION_HEADER ish;
  11.  
  12. char ruta[] = "C:\\MS-DOC.exe";
  13.  
  14. FILE * archivo = fopen(ruta,"r+b");
  15. if (archivo == NULL)
  16. { // si no podemos abrri el archivo.
  17. printf("Error al abrir el archivo\n");
  18. system("PAUSE");
  19.  
  20. return 1;
  21. }
  22.  
  23. fread(&idh,0x40,1,archivo); // rellenamos IMAGE_DOS_HEADER
  24. if (idh.e_magic != IMAGE_DOS_SIGNATURE)
  25. { // comprovamos el e_magic para saber si es un EXE
  26. printf("No es un archivo EXE\n");
  27. system("PAUSE");
  28.  
  29. return 1;
  30. }
  31.  
  32. fseek(archivo,idh.e_lfanew + 4,SEEK_SET);
  33. fread(&ifh,0x14,1,archivo); // rellenamos IMAGE_FILE_HEADER
  34. fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh), SEEK_SET);
  35. fread(&ioh,ifh.SizeOfOptionalHeader,1,archivo); // Leemos IMAGE_OPTIONAL_HEADER
  36.  
  37. int suma = 0;
  38.  
  39. for (int i=0;i<ifh.NumberOfSections;i++)
  40. {
  41. fseek(archivo, idh.e_lfanew + 4 + sizeof(ifh) + ifh.SizeOfOptionalHeader + (sizeof(ish)*(ifh.NumberOfSections-1)) + suma ,SEEK_SET);
  42. fread(&ish, sizeof(ish),1,archivo); // rellenamos IMAGE_SECTION_HEADER
  43.  
  44. printf("%x\n",(&ish)[i].Misc.PhysicalAddress);
  45.  
  46. suma += 0x28; // sumo 0x28 que es lo que ocupa ish para pasar a los datos de la siguiente sección.
  47. }
  48.  
  49. fclose(archivo);
  50.  
  51. system("PAUSE");
  52.  
  53. return 0;
  54. }

Nose que andará mal por ahi si me peuden hechar una mano sería de gran ayuda >:(

un saludo.
76  Seguridad Informática / Análisis y Diseño de Malware / Error intentando hookear FindNextFileA en: 4 Agosto 2011, 13:03 pm
pues eso, estoi intentando hookear la api FindNextFileA con una dll que estoi creando en FASM pero no hay manera, el programa me explota cuando arga la dll y intento usar la api, el problema creo que esta en que no vuelve a llamar correctamente al api que modifique y por eso explota :S

Este es el código:

Código
  1. format PE GUI 4.0 DLL
  2. entry DllEntryPoint
  3.  
  4. include 'd:\Fasm\INCLUDE\win32ax.inc'
  5.  
  6. section '.code' code readable executable
  7.  
  8. proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
  9.        cmp [fdwReason],1
  10.        je mensage
  11.        jne salir
  12.  
  13.        mensage:
  14.  
  15.        invoke LoadLibrary,"Kernel32.dll"
  16.        invoke GetProcAddress,eax,"FindNextFileA"
  17.        mov ebx,eax ; Dirección de la api en ebx
  18.  
  19.        mov [PunteroOri],ebx
  20.  
  21.        lea edx,dword[ebp-4]
  22.        invoke VirtualProtectEx,-1,ebx,7,PAGE_EXECUTE_READWRITE,edx
  23.  
  24.  
  25.        mov ecx,ApiOriginal
  26.  
  27.        lea edx,dword[ebp-4]
  28.        invoke VirtualProtectEx,-1,ecx,7,PAGE_EXECUTE_READWRITE,edx
  29.  
  30.        mov al,byte[ebx] ; movemos el primer byte
  31.        mov byte[ecx],al
  32.  
  33.        mov byte[ebx],0x68  ; push
  34.        inc ebx
  35.        inc ecx
  36.  
  37.        mov eax,dword[ebx]   ; movemos 4 bytes
  38.        mov dword[ecx],eax
  39.  
  40.        mov dword[ebx],Funcion ; dreccion funcion
  41.        add ebx,4
  42.        add ecx,4
  43.  
  44.        mov al,byte[ebx] ; ultimo byte
  45.        mov byte[ecx],al
  46.  
  47.        mov byte[ebx],0xC3   ;ret
  48.        inc ebx
  49.  
  50.        salir:
  51.        ret
  52. endp
  53.  
  54. Funcion:
  55.  
  56.             ApiOriginal:
  57.             nop
  58.             nop
  59.             nop
  60.             nop
  61.             nop
  62.             nop
  63.  
  64.             mov eax,[PunteroOri]
  65.             add eax,6
  66.             jmp eax
  67.  
  68.             ret
  69.  
  70.  
  71. ; VOID ShowErrorMessage(HWND hWnd,DWORD dwError);
  72.  
  73. proc ShowErrorMessage hWnd,dwError
  74.  local lpBuffer:DWORD
  75.        lea     eax,[lpBuffer]
  76.        invoke  FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
  77.        invoke  MessageBoxA,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
  78.        invoke  LocalFree,[lpBuffer]
  79.        ret
  80. endp
  81.  
  82. ; VOID ShowLastError(HWND hWnd);
  83.  
  84. proc ShowLastError hWnd
  85.        invoke  GetLastError
  86.        stdcall ShowErrorMessage,[hWnd],eax
  87.        ret
  88. endp
  89.  
  90.  
  91.  
  92. section '.data' data readable writeable
  93.        PunteroOri dd ?
  94.  
  95. section '.idata' import data readable writeable
  96.  
  97.  library kernel,'KERNEL32.DLL',\
  98.          user,'USER32.DLL'
  99.  
  100.  import kernel,\
  101.         GetLastError,'GetLastError',\
  102.         SetLastError,'SetLastError',\
  103.         FormatMessage,'FormatMessageA',\
  104.         LocalFree,'LocalFree',\
  105.         LoadLibrary,'LoadLibraryA',\
  106.         GetProcAddress,'GetProcAddress',\
  107.         VirtualProtectEx,'VirtualProtectEx',\
  108.         ExitProcess,'ExitProcess'
  109.  
  110.  import user,\
  111.         MessageBoxA,'MessageBoxA'
  112.  
  113. section '.edata' export data readable
  114.  
  115.  export 'ERRORMSG.DLL',\
  116.         ShowErrorMessage,'ShowErrorMessage',\
  117.         ShowLastError,'ShowLastError'
  118.  
  119. section '.reloc' fixups data discardable
  120.  


Tambien me gustaría que me explicasen como puedo debugear estas cosas ya que no lo tengo muy claro  :-\

saludos.
77  Programación / ASM / Funciones en FASM en: 10 Julio 2011, 13:25 pm
Os dejo algunas funciones en FASM que e ido haciendo desde que empece con asm.

Función que compara dos cadenas:

Código
  1.    proc Comparar,cadena1,cadena2
  2.            ;Si son iguales  EAX = 1
  3.            ;Si son diferentes EAX = 0
  4.            mov esi,[cadena1]
  5.            mov ecx,[cadena2]
  6.            dec ecx
  7.            bucle:
  8.                inc ecx
  9.                lodsb
  10.                cmp byte[ecx],al
  11.                jne diferentes
  12.                cmp al,0
  13.                je comprovar
  14.                jmp bucle
  15.            comprovar:
  16.                cmp byte[ecx],0
  17.                je iguales
  18.                jne diferentes
  19.            diferentes:
  20.                mov eax,0
  21.                ret
  22.            iguales:
  23.                mov eax,1
  24.                ret
  25.         endp

Ejemplo de su uso:

Código
  1.    include 'win32ax.inc'
  2.  
  3.    .data
  4.        palabra db 'Drinky94',0
  5.        palabra2 db 'Drinky94',0
  6.  
  7.    .code
  8.    start:
  9.        stdcall Comparar,palabra,palabra2
  10.        .if eax = 0
  11.            invoke MessageBoxA,0,'Son Diferentes',0,0
  12.        .else
  13.            invoke MessageBoxA,0,'Son Iguales',0,0
  14.        .endif
  15.        ret
  16.  
  17.        proc Comparar,cadena1,cadena2
  18.            ;Si son iguales  EAX = 1
  19.            ;Si son diferentes EAX = 0
  20.            mov esi,[cadena1]
  21.            mov ecx,[cadena2]
  22.            dec ecx
  23.            bucle:
  24.                inc ecx
  25.                lodsb
  26.                cmp byte[ecx],al
  27.                jne diferentes
  28.                cmp al,0
  29.                je comprovar
  30.                jmp bucle
  31.            comprovar:
  32.                cmp byte[ecx],0
  33.                je iguales
  34.                jne diferentes
  35.            diferentes:
  36.                mov eax,0
  37.                ret
  38.            iguales:
  39.                mov eax,1
  40.                ret
  41.         endp
  42.    .end start



Función que mide la longitud de una cadena:

Código
  1.    proc Len,Cadena
  2.            ;ECX = Longitud de la cadena.
  3.            mov eax,[Cadena]
  4.            mov ecx,-1
  5.            bucle:
  6.                inc ecx
  7.                cmp byte[eax+ecx],0
  8.                jne bucle
  9.            ret
  10.    endp

Ejemplo de su uso:

Código
  1.    include 'win32ax.inc'
  2.  
  3.    .data
  4.        palabra db 'Drinky94',0
  5.        longitud dd ?
  6.    .code
  7.    start:
  8.        stdcall Len,palabra
  9.        mov [longitud],ecx
  10.        invoke GlobalAlloc,GPTR,1024
  11.        push eax
  12.        invoke wsprintfA,eax,"%d",[longitud]
  13.        pop eax
  14.        invoke MessageBox,0,eax,0,MB_OK
  15.        leave
  16.        ret
  17.  
  18.        proc Len,Cadena
  19.            ;ECX = Longitud de la cadena
  20.            mov eax,[Cadena]
  21.            mov ecx,-1
  22.            bucle:
  23.                inc ecx
  24.                cmp byte[eax+ecx],0
  25.                jne bucle
  26.            ret
  27.        endp
  28.    .end start



Función que puede servir de remplazo a GlobalAlloc:

Código
  1.    proc DGlobalAlloc,cantidad
  2.            sub esp,[cantidad]
  3.            mov eax,esp
  4.            ret
  5.    endp

Ejemplo de su uso:

Código
  1.    include 'win32ax.inc'
  2.  
  3.    .data
  4.        palabra db 'Drinky94',0
  5.        longitud dd ?
  6.    .code
  7.    start:
  8.  
  9.        stdcall Len,palabra
  10.        mov [longitud],ecx
  11.        stdcall DGlobalAlloc,1024
  12.        push eax
  13.        invoke wsprintfA,eax,"%d",[longitud]
  14.        pop eax
  15.        invoke MessageBox,0,eax,0,MB_OK
  16.        leave
  17.        ret
  18.  
  19.        proc Len,Cadena
  20.            mov eax,[Cadena]
  21.            mov ecx,-1
  22.            bucle:
  23.                inc ecx
  24.                cmp byte[eax+ecx],0
  25.                jne bucle
  26.            ret
  27.        endp
  28.  
  29.        proc DGlobalAlloc,cantidad
  30.            sub esp,[cantidad]
  31.            mov eax,esp
  32.            ret
  33.        endp
  34.    .end start



Código para saber si nos están debuggeando (usa el PEB):

Código
  1.    format PE GUI 4.0
  2.    entry start
  3.  
  4.    include 'win32ax.inc'
  5.  
  6.        SiDbg db 'Hay Debugger',0
  7.        NoDbg db 'No hay Debugger',0
  8.  
  9.    start:
  10.            mov eax,dword[fs:18h]
  11.            mov eax,dword[eax+30h]
  12.            mov bl,byte[eax+2]  ; si bl = 1 Nos estan debujeando.
  13.  
  14.            .if bl = 1
  15.                invoke MessageBoxA,0,SiDbg,0,0
  16.            .else
  17.                invoke MessageBoxA,0,NoDbg,0,0
  18.            .endif
  19.            ret
  20.  
  21.    data import
  22.            library user32,'user32.dll'
  23.  
  24.            import user32,MessageBoxA,'MessageBoxA'
  25.  
  26.    end data            



Simple cifrado Xor:

Código
  1.    proc Cifrar,Cadena
  2.                xor ecx,ecx
  3.                mov eax,[Cadena]
  4.                .bucle:
  5.                    .if byte[eax+ecx] = 0
  6.                        jmp .salir
  7.                    .endif
  8.                    xor byte[eax+ecx],7
  9.                    inc ecx
  10.                    jmp .bucle
  11.                .salir:
  12.                ret
  13.             endp

Ejemplo de su uso:

Código
  1.    include 'win32ax.inc'
  2.  
  3.    .data
  4.            hola db 'hola',0
  5.  
  6.    .code
  7.    start:
  8.             stdcall Cifrar,hola
  9.             invoke MessageBoxA,0,eax,0,0
  10.             ret
  11.  
  12.             proc Cifrar,Cadena
  13.                xor ecx,ecx
  14.                mov eax,[Cadena]
  15.                .bucle:
  16.                    .if byte[eax+ecx] = 0
  17.                        jmp .salir
  18.                    .endif
  19.                    xor byte[eax+ecx],7
  20.                    inc ecx
  21.                    jmp .bucle
  22.                .salir:
  23.                ret
  24.             endp
  25.    .end start    



Función que pasa un número entero a cadena:

Código
  1. proc NumToString,Numero
  2.                ;Función creada por Drinky94. Agradecimientos a Jep.
  3.                locals
  4.                        divisor dw ?
  5.                        ; buffer rb 20  Agregar esta variable en la sección data
  6.                        ; El numero 20 es la longitud que tendra la cadena
  7.                        ;si nuestro numero tiene 4 cifras tendremos que poner 4
  8.                        ; CadenaFinal rb 20  ; lo mismo que con la variable buffer.
  9.                endl
  10.  
  11.                mov [divisor],10
  12.                xor eax,eax
  13.                xor ebx,ebx
  14.                mov eax,[Numero]
  15.                bucle:
  16.                        xor edx,edx
  17.                        div [divisor]
  18.                        add dl,0x30
  19.                        mov byte[buffer+ebx],dl
  20.                        inc ebx
  21.                        cmp eax,0
  22.                            jne bucle
  23.                inc ebx
  24.                mov byte[buffer+ebx],0x0
  25.                mov eax,buffer
  26.                mov ecx,-1
  27.                buclelen:
  28.                        inc ecx
  29.                        cmp byte[eax+ecx],0
  30.                            jne buclelen
  31.                xor ebx,ebx
  32.                dec ecx
  33.                reverse:
  34.                        xor edx,edx
  35.                        mov dl,byte[eax+ecx]
  36.                        mov byte[CadenaFinal+ebx],dl
  37.                        inc ebx
  38.                        sub ecx,1
  39.                        cmp ecx,-1
  40.                            jne reverse
  41.                mov eax,CadenaFinal
  42.                ret
  43.        endp  

Ejemplo de su uso:

Código
  1. include 'win32ax.inc'
  2.  
  3. .data
  4.        buffer rb 4
  5.        CadenaFinal rb 4
  6. .code
  7. start:
  8.        stdcall NumToString,1994
  9.        invoke MessageBoxA,0,eax,0,0
  10.        ret
  11.  
  12.        proc NumToString,Numero
  13.                ;Función creada por Drinky94. Agradecimientos a Jep.
  14.                locals
  15.                        divisor dw ?
  16.                        ; buffer rb 20  Agregar esta variable en la sección data
  17.                        ; El numero 20 es la longitud que tendra la cadena
  18.                        ;si nuestro numero tiene 4 cifras tendremos que poner 4
  19.                        ; CadenaFinal rb 20  ; lo mismo que con la variable buffer.
  20.                endl
  21.  
  22.                mov [divisor],10
  23.                xor eax,eax
  24.                xor ebx,ebx
  25.                mov eax,[Numero]
  26.                bucle:
  27.                        xor edx,edx
  28.                        div [divisor]
  29.                        add dl,0x30
  30.                        mov byte[buffer+ebx],dl
  31.                        inc ebx
  32.                        cmp eax,0
  33.                            jne bucle
  34.                inc ebx
  35.                mov byte[buffer+ebx],0x0
  36.                mov eax,buffer
  37.                mov ecx,-1
  38.                buclelen:
  39.                        inc ecx
  40.                        cmp byte[eax+ecx],0
  41.                            jne buclelen
  42.                xor ebx,ebx
  43.                dec ecx
  44.                reverse:
  45.                        xor edx,edx
  46.                        mov dl,byte[eax+ecx]
  47.                        mov byte[CadenaFinal+ebx],dl
  48.                        inc ebx
  49.                        sub ecx,1
  50.                        cmp ecx,-1
  51.                            jne reverse
  52.                mov eax,CadenaFinal
  53.                ret
  54.        endp
  55. .end start      


Cuando valla haciendo mas las voi posteando :P

saludos.
78  Seguridad Informática / Análisis y Diseño de Malware / Ayuda api hoking :P en: 3 Mayo 2011, 20:41 pm
Bueno estoi intentando hookear una API desde una DLL creada en Fasm pero no lo consigo y nose que estoi haciendo mal, este es el código de la dll:

Código
  1. format PE GUI 4.0 DLL
  2. entry DllEntryPoint
  3.  
  4. include 'win32ax.inc'
  5.  
  6. section '.code' code readable executable
  7.  
  8. proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
  9.        locals
  10.            proteccion dd ?
  11.        endl
  12.  
  13.        invoke LoadLibrary,'user32.dll'
  14.        invoke GetProcAddress,eax,"MessageBoxA"
  15.        mov ebx,eax; ebx  = direccion MessageBoxA
  16.  
  17.        invoke VirtualProtect,-1,ebx,5,PAGE_EXECUTE_READWRITE,edx
  18.  
  19.        mov ebx,0xE9
  20.        inc ebx
  21.        mov dword[ebx],hook
  22.        add ebx,4
  23.        ret
  24. endp
  25.  
  26. proc hook,uno,dos,tres,cuatro
  27.    invoke MessageBox,0,0,0,0
  28.    mov eax,0
  29.    ret
  30. endp
  31. ; VOID ShowErrorMessage(HWND hWnd,DWORD dwError);
  32.  
  33. proc ShowErrorMessage hWnd,dwError
  34.  local lpBuffer:DWORD
  35.        lea     eax,[lpBuffer]
  36.        invoke  FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
  37.        invoke  MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
  38.        invoke  LocalFree,[lpBuffer]
  39.        ret
  40. endp
  41.  
  42. ; VOID ShowLastError(HWND hWnd);
  43.  
  44. proc ShowLastError hWnd
  45.        invoke  GetLastError
  46.        stdcall ShowErrorMessage,[hWnd],eax
  47.        ret
  48. endp
  49. section '.data' data readable writeable
  50.        mensajito db ?
  51.  
  52.  
  53. section '.idata' import data readable writeable
  54.  
  55.  library kernel,'KERNEL32.DLL',\
  56.          user,'USER32.DLL'
  57.  
  58.  import kernel,\
  59.         GetLastError,'GetLastError',\
  60.         SetLastError,'SetLastError',\
  61.         FormatMessage,'FormatMessageA',\
  62.         LocalFree,'LocalFree',\
  63.         LoadLibrary,'LoadLibraryA',\
  64.         GetProcAddress,'GetProcAddress',\
  65.         VirtualProtect,'VirtualProtectEx'
  66.  
  67.  import user,\
  68.         MessageBox,'MessageBoxA'
  69.  
  70. section '.edata' export data readable
  71.  
  72.  export 'ERRORMSG.DLL',\
  73.         ShowErrorMessage,'ShowErrorMessage',\
  74.         ShowLastError,'ShowLastError'
  75.  
  76. section '.reloc' fixups data discardable  


Esperando repuesta...

salu2!
79  Seguridad Informática / Análisis y Diseño de Malware / Shell Remota en C en: 27 Marzo 2011, 14:48 pm
Buenas, estoi intentando hacer una Shell Remota en C  ya que nunca hice una en este lenguaje y me pica la curiosidad  :xD el caso es que no me sale...

El código que tengo es este:

Código
  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. int main()
  6. {
  7.    PHANDLE leer;
  8.    PHANDLE escribir;
  9.  
  10.    SECURITY_ATTRIBUTES sa;
  11.    STARTUPINFO si;
  12.    PROCESS_INFORMATION pi;
  13.  
  14.    DWORD bytes;
  15.  
  16.    CreatePipe(leer,escribir,&sa,0);
  17.  
  18.    si.cb = 68;
  19.    si.dwFlags = 257;
  20.  
  21.    si.hStdError = escribir;
  22.    si.hStdOutput = escribir;
  23.  
  24.    CreateProcessA(0,"cmd.exe /c ping 127.0.0.1", &sa, &sa, 1, NORMAL_PRIORITY_CLASS, 0, 0, &si, &pi);
  25.    Sleep(100);
  26.    CloseHandle(escribir);
  27.  
  28.    char buffer[1024];
  29.    char total[1024];
  30.  
  31.    int ret = ReadFile(leer,buffer,250,&bytes,0);
  32.  
  33.    lstrcat(total,buffer);
  34.  
  35.    while(ret != 0)
  36.    {
  37.        ret = ReadFile(leer,buffer,250,&bytes,0);
  38.        lstrcat(total,buffer);      
  39.    }
  40.  
  41.    MessageBoxA(0,total,0,0);
  42.    system("PAUSE");
  43.  
  44.    return 0;
  45. }
  46.  

Alguien sabe que hago mal?

salu2!
80  Seguridad Informática / Análisis y Diseño de Malware / Una vez que te inyectas...?? en: 7 Febrero 2011, 20:41 pm
Buenas, bueno antes de nada, decir que nose si esto deberia ir aqui, pero como siempre se trata aqui el tema de inyecciones y tal...

Mi duda es la siguiente:

Una vez que te inyectas con una dll en un proceso. Es posible saber las funciones que tiene ese proceso cargadas??? de ser así como lo podria saber??


PD: espero que me hallan entendido   :P


salu2!
Páginas: 1 2 3 4 5 6 7 [8] 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines