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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 ... 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 [103] 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 ... 123
1021  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.
1022  Seguridad Informática / Análisis y Diseño de Malware / Re: Multi Engine Antivirus Scanner en: 8 Julio 2011, 00:47 am
http://virtuscann.com/

Servicio gratuito y no distribuye.

1023  Programación / Programación Visual Basic / Re: ayuda en parametro de funcion NtSetInformationProcess en: 7 Julio 2011, 12:49 pm
Tienes que pasarle el identificador del proceso.

salu2!
1024  Programación / Programación Visual Basic / Re: [SOURCE] Bloqueo de Pantalla en: 4 Julio 2011, 11:48 am
Ctrl + alt + surp
Ctrl + alt + esc
Win + E
Win + R
alt + tab
ctrl + shift + escape

ahora no se me ocurren mas :P

Ctrl + W?
1025  Programación / Programación C/C++ / Re: MessageBox, text in. en: 12 Mayo 2011, 13:10 pm
Aqui te dejo un link donde viene info de lo que buscas:

http://www.codeproject.com/KB/dialog/w32inputbox_1.aspx

salu2!
1026  Programación / ASM / Re: Ayuda con Webbrowser D: (Leer cadena de texto) en: 12 Mayo 2011, 13:05 pm
Esta es la sección de asm, no de vb.

salu2!
1027  Seguridad Informática / Análisis y Diseño de Malware / Re: Ayuda api hoking :P en: 5 Mayo 2011, 21:18 pm
si  :)

salu2!
1028  Seguridad Informática / Análisis y Diseño de Malware / Re: Ayuda api hoking :P en: 5 Mayo 2011, 15:33 pm
A mi me funciona perfectamente Zero, sigue perfectamente la ejecucion del programa...
1029  Seguridad Informática / Análisis y Diseño de Malware / Re: Ayuda api hoking :P en: 4 Mayo 2011, 20:55 pm
Muchas gracias una vez más  :-[  :-* jajaja


Este es el código funcional, lo comente para que mas gente lo comprenda tambien  :)

Código
  1. ;##########################################################
  2. ;##  Ejemplo API Hoking by Drinky94                      ##
  3. ;##  Agradecimientos a:                                  ##
  4. ;##      [Zero] por todo en lo que me ayuda              ##
  5. ;##       YST por su funcion ASCIITOUNICODE              ##
  6. ;##########################################################
  7.  
  8. format PE GUI 4.0 DLL
  9. entry DllEntryPoint
  10.  
  11. include 'win32ax.inc'
  12.  
  13. section '.code' code readable executable
  14.  
  15. proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
  16.        locals
  17.            proteccion dd ?
  18.        endl
  19.  
  20.        stdcall ASCIITOUNICODE,mensajito,buffer;pasamos la cadena que se mostrara en MessageBoxW a Unicode
  21.  
  22.        invoke LoadLibrary,'user32.dll' ;Cargamos User32
  23.        invoke GetProcAddress,eax,"MessageBoxA" ;obtenemos la direccion de la api
  24.        mov ebx,eax; ebx  = direccion MessageBoxA
  25.  
  26.        mov eax,hook  ;Calculamos la distancia entre el jmp y la funcion donde saltaremos
  27.        sub eax,ebx
  28.        sub eax,4
  29.  
  30.        mov ecx,eax
  31.  
  32.        push ebx
  33.        push ecx
  34.  
  35.        invoke VirtualProtect,ebx,5,PAGE_EXECUTE_READWRITE,addr proteccion     ;le damos a 5 bytes permiso de escritura
  36.  
  37.        pop ecx
  38.        pop ebx
  39.  
  40.        mov byte[ebx],0xE9  ;escribimos un jmp
  41.        inc ebx
  42.        mov dword[ebx],ecx ;escriimos la longitud del salto
  43.        add ebx,4
  44.        ret
  45. endp
  46.  
  47. proc hook,uno,dos,tres,cuatro  ;funcion que remplaza a MesasgeBoxA
  48.    invoke MessageBox,0,buffer,0,0 ;Si se llama a MessageBoxA, mostramos nuestro mensagito :PP
  49.    mov eax,0  ;devolvemos cero
  50.    jmp ebx  ;saltamos donde nos quedamos para continuar la ejecucion.
  51. endp
  52.  
  53. proc ASCIITOUNICODE,Cadena,Buffer
  54. ;Funcion By YST
  55.  
  56. push ecx ebx
  57. mov  eax,[Cadena]
  58. mov ebx,[Buffer]
  59. dec eax
  60. sub ebx,2
  61. .bucle:
  62. inc eax
  63. cmp byte[eax],0
  64. je .salir
  65. add ebx,2
  66. mov cl,byte[eax]
  67. mov byte[ebx],cl
  68. mov byte[ebx+1],0
  69. jmp .bucle
  70. .salir:
  71. pop ebx ecx
  72. ret
  73. endp
  74.  
  75. proc ShowErrorMessage hWnd,dwError
  76.  local lpBuffer:DWORD
  77.        lea     eax,[lpBuffer]
  78.        invoke  FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
  79.        invoke  MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
  80.        invoke  LocalFree,[lpBuffer]
  81.        ret
  82. endp
  83.  
  84. ; VOID ShowLastError(HWND hWnd);
  85.  
  86. proc ShowLastError hWnd
  87.        invoke  GetLastError
  88.        stdcall ShowErrorMessage,[hWnd],eax
  89.        ret
  90. endp
  91. section '.data' data readable writeable
  92.        mensajito db 'Msgbox Hookeado',0
  93.        buffer db ?
  94.  
  95.  
  96. section '.idata' import data readable writeable
  97.  
  98.  library kernel,'KERNEL32.DLL',\
  99.          user,'USER32.DLL'
  100.  
  101.  import kernel,\
  102.         GetLastError,'GetLastError',\
  103.         SetLastError,'SetLastError',\
  104.         FormatMessage,'FormatMessageA',\
  105.         LocalFree,'LocalFree',\
  106.         LoadLibrary,'LoadLibraryA',\
  107.         GetProcAddress,'GetProcAddress',\
  108.         VirtualProtect,'VirtualProtect'
  109.  
  110.  import user,\
  111.         MessageBox,'MessageBoxW'
  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.  
  121.  
  122.  
  123.  
  124.  

salu2!

1030  Programación / ASM / Re: ASM 32Bits (Consola?) en: 4 Mayo 2011, 20:34 pm
format PE Console

Lo unico que para entrada y salida de datos tendras que usar API, no puedes usar interrupciones.

salu2!
Páginas: 1 ... 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 [103] 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 ... 123
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines