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


 


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  SRCs de YST.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 6 7 8 9 Ir Abajo Respuesta Imprimir
Autor Tema: SRCs de YST.  (Leído 26,966 veces)
YST


Desconectado Desconectado

Mensajes: 966


I'm you


Ver Perfil WWW
SRCs de YST.
« en: 2 Abril 2009, 09:07 »

Hola , muchas veces yo eh necesitado poner una cantidad de bytes en 0 , para esto hice una función que haga esto por mi , espero que les sirva.

Código
  1. proc Zerar,Puntero,Cantidad
  2.  
  3.    push ecx
  4.    push ebx
  5.  
  6.              mov ecx,[Cantidad]
  7.                 mov ebx,[Puntero]
  8.                .bucle:
  9.  
  10.                mov byte[ebx+ecx],0
  11.                loop .bucle
  12.                mov byte[ebx],0
  13.                pop ebx
  14.                pop ecx
  15.                ret
  16. endp


« Última modificación: 31 Mayo 2009, 03:46 por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [SRC] Zerar
« Respuesta #1 en: 2 Abril 2009, 12:49 »

buen code, pero el loop es muy lento

mejor así:

Código
  1.  
  2. ZeroMem proc PMen:dword, SizeMen
  3. push ebx
  4. push ecx
  5. push eax
  6.  
  7.  
  8. mov ecx,[SizeMen]
  9. mov ebx,4
  10. mov eax,ecx
  11. div ebx ;Comprueva si es multiplo de 4
  12. cmp edx,0
  13. je Mul4
  14. sub ecx,edx
  15. lea edx,[ecx+edx]
  16.                                mov ebx,[PMen]
  17.                                xor eax,eax
  18.  
  19. NoZero:
  20. dec edx
  21. mov byte ptr[ebx+edx],eax
  22.  
  23. cmp edx,ecx
  24. jne NoZero
  25. Mul4:
  26. xor eax,eax
  27. mov ebx,[PMen]
  28.  
  29. siguiente:
  30. sub ecx,4
  31. mov [ebx+ecx],eax ;Pone a cero hasta que ecx sea zero
  32. jecxz zero
  33. jmp siguiente
  34. zero:
  35.  
  36. pop eax
  37. pop ecx
  38. pop ebx
  39.  
  40. ret
  41.  
  42. ZeroMem endp
  43.  
  44.  

saludos


« Última modificación: 2 Abril 2009, 14:37 por Arcangel_0x7C5 » En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: [SRC] Zerar
« Respuesta #2 en: 2 Abril 2009, 13:28 »

Arcangel_0x7C5: ¿Y si SizeMen no es multiplo de 4? Digamos que es 5 ...

Igual supongo que ambos podrian usar rep movs ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [SRC] Zerar
« Respuesta #3 en: 2 Abril 2009, 13:39 »

pos lo canbias un poco, yo es que todo lo que necesito poner a cero es multiplo de 4. Porque no uso los 64bist, y para las cadenas ya le pongo yo el 0 final
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: [SRC] Zerar
« Respuesta #4 en: 2 Abril 2009, 14:06 »

Entonces no es mejor asi, el codigo original no produce una excepcion al pasarle un tamaño de 5.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: [SRC] Zerar
« Respuesta #5 en: 2 Abril 2009, 14:32 »

alegrado, ya no produce una excepción
En línea

YST


Desconectado Desconectado

Mensajes: 966


I'm you


Ver Perfil WWW
SRCs de YST.
« Respuesta #6 en: 3 Abril 2009, 04:22 »

Hola , luego de un buen rato programando , viendo manuales de el formato PE ( si gustan luego los posteo ) , termine la función GetAddressFunction quer permite obtener la dirección de cualquier función de una libreria , mediante el handle de la libreria (devuelto por LoadLibrary por ejemplo ) y el nombre de la función , esta función es muy util para  shellcode , la función comparar tanto como la función len no son mias las pase para que se pudieran ensamblar con FASM ya que las originales son de MASM ( http://www.asmcommunity.net/board/index.php?topic=2626.0 ) , espero que les sea de utilidad.
Código
  1. proc GetAddressFunction,LibHandle,Api
  2. locals
  3. DirPEHeader dd ?
  4. PunteroPEHeader dd ?
  5. RVAofExportDirectory   dd ?
  6. NumberOfNames dd ?
  7. AddressOfNames dd ?
  8. AddressOfFunctions dd ?
  9. endl
  10. push ebx  edx  edi  ecx
  11. mov eax,[LibHandle]
  12. cmp eax,NULL
  13. je .Error
  14. push dword[eax + 03Ch]
  15. pop  [DirPEHeader]
  16. push [DirPEHeader]
  17. pop [PunteroPEHeader]
  18. add  [PunteroPEHeader],eax
  19. mov ebx,[PunteroPEHeader]
  20. cmp word[ebx],"PE"
  21. jne .Error
  22. push dword[ebx+078h]
  23. pop [RVAofExportDirectory]
  24. mov ebx, [RVAofExportDirectory]
  25. add ebx,eax
  26. push dword[ebx+018h]
  27. pop [NumberOfNames]
  28. mov edx,[NumberOfNames]
  29. push dword[ebx+20h]
  30. pop [AddressOfNames]
  31. mov ebx, [AddressOfNames]
  32. add ebx,eax
  33. mov ecx,[NumberOfNames]
  34. mov edi,0
  35.  
  36. push [LibHandle]
  37. pop [AddressOfFunctions]
  38. mov ebx,[RVAofExportDirectory]
  39. add  eax ,ebx
  40. push   dword[eax+1ch]
  41. pop [AddressOfFunctions]
  42. .encontrar:
  43.  mov eax, 0x4
  44.  mul edi
  45.  mov ebx,eax
  46.  add ebx,[AddressOfNames]
  47.  add  ebx,[LibHandle]
  48.  mov eax, [ebx]
  49.  add eax, [LibHandle]
  50. add edi,1
  51.  stdcall comparar, [Api], eax
  52.  cmp ecx,NULL
  53.  je .Error
  54.  cmp eax, 0
  55. jne .encontrar
  56. dec edi
  57. rol edi,2
  58. mov eax,edi
  59. add eax, [AddressOfFunctions]
  60. add eax,[LibHandle]
  61. mov eax, dword[eax]
  62. add eax,[LibHandle]
  63. pop  ecx edi edx ebx
  64. ret
  65. .Error:
  66. xor eax,eax   ; xor eax,eax = NULL
  67. ret
  68. ret
  69. endp
  70. proc comparar ,SRC,DST
  71. push edi ecx esi
  72. stdcall Len,[SRC]
  73. inc eax
  74. mov ecx,eax
  75. mov esi,[SRC]
  76. mov edi,[DST]
  77. repz cmpsb
  78. mov eax,1
  79. jnz Next
  80. dec eax
  81. Next:
  82. pop esi ecx edi
  83. ret
  84. endp
  85.  
  86. proc Len , SRC
  87. push ecx edi
  88. mov ecx,-1
  89. mov edi,[SRC]
  90. mov al,0
  91. repnz scasb
  92. mov eax,ecx
  93. not eax
  94. dec eax
  95. pop edi ecx
  96. ret
  97. endp
  98.  

Una forma de obtener el handle de la kernel32 ( fuente: hackhound.org ):
Código
  1.           mov   eax, [fs:30h]
  2.    mov   eax, [eax + 0ch]
  3.    mov   esi, [eax + 1ch]
  4.    lodsd
  5.    mov  eax, [eax + 08h]
« Última modificación: 31 Mayo 2009, 03:47 por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
YST


Desconectado Desconectado

Mensajes: 966


I'm you


Ver Perfil WWW
SRCs de YST.
« Respuesta #7 en: 3 Abril 2009, 05:04 »

Hola , basado en el source que hice para obtener la dirección de la función que uno desee de una libreria , hice un pequeño programa para listar todas las funciones de una libreria ( .dll ) , modificandolo un poco se podria hacer que este mismo programa cree .inc como el "kernel32.inc" que se encuentra en el fasm , que tiene todas (o casi todas ) las api's de la kernel32.dll , espero que les sirva de algo.
Código
  1. format pe console
  2. espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .code
  5. start:
  6. invoke LoadLibrary,"user32.dll"
  7. stdcall    ListarFunciones,eax
  8. invoke ExitProcess,0
  9. proc ListarFunciones,LibHandle
  10. locals
  11. DirPEHeader dd ?
  12. PunteroPEHeader dd ?
  13. RVAofExportDirectory   dd ?
  14. NumberOfNames dd ?
  15. AddressOfNames dd ?
  16. endl
  17. push ebx  edx  edi  ecx
  18. mov eax,[LibHandle]
  19. cmp eax,NULL
  20. je .Error
  21. push dword[eax + 03Ch]
  22. pop  [DirPEHeader]
  23. push [DirPEHeader]
  24. pop [PunteroPEHeader]
  25. add  [PunteroPEHeader],eax
  26. mov ebx,[PunteroPEHeader]
  27. cmp word[ebx],"PE"
  28. jne .Error
  29. push dword[ebx+078h]
  30. pop [RVAofExportDirectory]
  31. mov ebx, [RVAofExportDirectory]
  32. add ebx,eax
  33. push dword[ebx+018h]
  34. pop [NumberOfNames]
  35. mov edx,[NumberOfNames]
  36. push dword[ebx+20h]
  37. pop [AddressOfNames]
  38. mov ebx,[NumberOfNames]
  39. mov        edi, [AddressOfNames]
  40.    add        edi,[LibHandle]
  41. .bucle:
  42. dec ebx
  43. mov        eax, [edi + ebx * 4]
  44. add eax,[LibHandle]
  45. invoke printf,eax
  46.  invoke printf,espacio
  47.  cmp ebx,0
  48.  jne .bucle
  49. pop  ecx edi edx ebx
  50. ret
  51. .Error:
  52. ret
  53. endp
  54. .end start
« Última modificación: 31 Mayo 2009, 03:47 por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
YST


Desconectado Desconectado

Mensajes: 966


I'm you


Ver Perfil WWW
Re: [SRC] Zerar
« Respuesta #8 en: 3 Abril 2009, 05:18 »

Cita de: Eternal Idol en 02 Abril 2009, 13:28
Arcangel_0x7C5: ¿Y si SizeMen no es multiplo de 4? Digamos que es 5 ...

Igual supongo que ambos podrian usar rep movs ...
Hola , Eternal Idol , podrias poner un ejemplo , por que entiendo o creo entender el funcionamiento de movsx (mosvb,movsw,etc.. ) y segun tengo entendido la cantidad de 0 tendria que ser igual a la cantidad que se quiera rellenar con estos , tal vez me estoy confundiendo ya que para ser sincero nunca eh usado mosvx , me encantaria ver un source que rellene usando mosvx . Arcangel_0x7C5  ahora leere tu codigo , aunque a simple vista me parece mas rapido mi source , seria interesante que me dijieras como sacas lo que se demora cada instrucción , ya que desconozco como tomarles el tiempo  ;)
« Última modificación: 31 Mayo 2009, 03:48 por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
YST


Desconectado Desconectado

Mensajes: 966


I'm you


Ver Perfil WWW
Re: [SRC] Listar funciones de una libreria
« Respuesta #9 en: 3 Abril 2009, 06:55 »

Lo modifique y ahora crea imports para fasm a partir de cualquier libreria  ;D

Código
  1. format pe console
  2. espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .code
  5. start:
  6.  
  7. stdcall CrearImport,"user32.dll","user32.inc"
  8. invoke ExitProcess,0
  9. proc CrearImport,NombreLIB,NombreImport
  10. locals
  11. DirPEHeader dd ?
  12. PunteroPEHeader dd ?
  13. RVAofExportDirectory   dd ?
  14. NumberOfNames dd ?
  15. AddressOfNames dd ?
  16. Funcion dd ?
  17. HFile dd ?
  18. Nosirve dd ?
  19. Largo dd ?
  20. LibHandle dd ?
  21. endl
  22. push ebx  edx  edi  ecx
  23.    invoke LoadLibrary, [NombreLIB]
  24.    mov [LibHandle],eax
  25. cmp eax,NULL
  26. je .Error
  27. push dword[eax + 03Ch]
  28. pop  [DirPEHeader]
  29. push [DirPEHeader]
  30. pop [PunteroPEHeader]
  31. add  [PunteroPEHeader],eax
  32. mov ebx,[PunteroPEHeader]
  33. cmp word[ebx],"PE"
  34. jne .Error
  35. push dword[ebx+078h]
  36. pop [RVAofExportDirectory]
  37. mov ebx, [RVAofExportDirectory]
  38. add ebx,eax
  39. push dword[ebx+018h]
  40. pop [NumberOfNames]
  41. mov edx,[NumberOfNames]
  42. push dword[ebx+20h]
  43. pop [AddressOfNames]
  44. mov ebx,[NumberOfNames]
  45. mov        edi, [AddressOfNames]
  46.    add        edi,[LibHandle]
  47.  
  48.  
  49.  
  50.               invoke CreateFileA, [NombreImport], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
  51.                mov [HFile], eax
  52.                invoke lstrlen,"import "
  53.            invoke WriteFile, [HFile], "import ",eax,addr Nosirve, NULL
  54.                 invoke lstrlen,[NombreLIB]
  55.                 sub eax,4
  56.                invoke WriteFile, [HFile], [NombreLIB],eax,addr Nosirve, NULL
  57.                invoke WriteFile,[HFile] , ",\",2,addr Nosirve, NULL
  58.                             invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  59.  
  60. .bucle:
  61. dec ebx
  62. mov        eax, [edi + ebx * 4]
  63. add eax,[LibHandle]
  64. mov [Funcion],eax
  65.        invoke lstrlen, [Funcion]
  66.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  67.                invoke WriteFile, [HFile],",",1,addr Nosirve, NULL
  68.  
  69.                              invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  70.                                      invoke lstrlen, [Funcion]
  71.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  72.                .if ebx = 0
  73.                      invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  74.                .else
  75.                  invoke WriteFile, [HFile],"',\",3,addr Nosirve, NULL
  76.              invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  77.              .endif
  78.  cmp ebx,0
  79.  jne .bucle
  80.            invoke CloseHandle, [HFile]
  81. pop  ecx edi edx ebx
  82. ret
  83. .Error:
  84. ret
  85. endp
  86. .end start
« Última modificación: 31 Mayo 2009, 03:49 por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
Páginas: [1] 2 3 4 5 6 7 8 9 Ir Arriba Respuesta Imprimir 

Ir a:  
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines