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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  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 34,141 veces)
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [SRC] Listar funciones de una libreria
« Respuesta #10 en: 3 Abril 2009, 08:45 am »

Volvi a mejorar un poco el source :
Código
  1. format pe console
  2. espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .data
  5. RutaLib   rb MAX_PATH
  6. RutaINC   rb MAX_PATH
  7. .code
  8. start:
  9. invoke printf,"Ingrese la ruta de la libreria:"
  10. invoke printf,espacio
  11. invoke scanf,"%s",RutaLib
  12. invoke printf,"Ingrese la ruta de la donde se generara el include:"
  13. invoke printf,espacio
  14. invoke scanf,"%s",RutaINC
  15. stdcall CrearImport,RutaLib,RutaINC
  16. invoke ExitProcess,0
  17. proc CrearImport,NombreLIB,NombreImport
  18. locals
  19. DirPEHeader dd ?
  20. PunteroPEHeader dd ?
  21. RVAofExportDirectory   dd ?
  22. NumberOfNames dd ?
  23. AddressOfNames dd ?
  24. Funcion dd ?
  25. HFile dd ?
  26. Nosirve dd ?
  27. Largo dd ?
  28. LibHandle dd ?
  29. endl
  30. push ebx  edx  edi  ecx
  31.    invoke LoadLibrary, [NombreLIB]
  32.    mov [LibHandle],eax
  33. cmp eax,NULL
  34. je .Error
  35. push dword[eax + 03Ch]
  36. pop  [DirPEHeader]
  37. push [DirPEHeader]
  38. pop [PunteroPEHeader]
  39. add  [PunteroPEHeader],eax
  40. mov ebx,[PunteroPEHeader]
  41. cmp word[ebx],"PE"
  42. jne .Error
  43. push dword[ebx+078h]
  44. pop [RVAofExportDirectory]
  45. mov ebx, [RVAofExportDirectory]
  46. add ebx,eax
  47. push dword[ebx+018h]
  48. pop [NumberOfNames]
  49. mov edx,[NumberOfNames]
  50. push dword[ebx+20h]
  51. pop [AddressOfNames]
  52. mov ebx,[NumberOfNames]
  53. mov        edi, [AddressOfNames]
  54.    add        edi,[LibHandle]
  55.  
  56.  
  57.  
  58.               invoke CreateFileA, [NombreImport], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
  59.                mov [HFile], eax
  60.                invoke lstrlen,"import "
  61.            invoke WriteFile, [HFile], "import ",eax,addr Nosirve, NULL
  62.                 invoke lstrlen,[NombreLIB]
  63.                 sub eax,4
  64.                invoke WriteFile, [HFile], [NombreLIB],eax,addr Nosirve, NULL
  65.                invoke WriteFile,[HFile] , ",\",2,addr Nosirve, NULL
  66.                             invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  67.  
  68. .bucle:
  69. dec ebx
  70. mov        eax, [edi + ebx * 4]
  71. add eax,[LibHandle]
  72. mov [Funcion],eax
  73.        invoke lstrlen, [Funcion]
  74.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  75.                invoke WriteFile, [HFile],",",1,addr Nosirve, NULL
  76.  
  77.                              invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  78.                                      invoke lstrlen, [Funcion]
  79.                invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL
  80.                .if ebx = 0
  81.                      invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL
  82.                .else
  83.                  invoke WriteFile, [HFile],"',\",3,addr Nosirve, NULL
  84.              invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL
  85.              .endif
  86.  cmp ebx,0
  87.  jne .bucle
  88.  
  89.            invoke CloseHandle, [HFile]
  90.            invoke system,"cls"
  91.            invoke printf,"Extraida las funciones de: "
  92.            invoke printf,RutaLib
  93.            invoke printf,espacio
  94.            invoke printf,espacio
  95.            invoke printf,"El include ah sido generado en : "
  96.             invoke printf,RutaINC
  97.                      invoke printf,espacio
  98.            invoke printf,espacio
  99.            invoke printf,"Con "
  100.               invoke printf,"%d",[NumberOfNames]
  101.               invoke printf," funciones extraidas."
  102.                invoke printf,espacio
  103.                  invoke system,"pause"
  104. pop  ecx edi edx ebx
  105. ret
  106. .Error:
  107.      invoke system,"cls"
  108.            invoke printf,"Ocurrio un error durante la extracciòn."
  109.                        invoke printf,espacio
  110.               invoke system,"pause"
  111. ret
  112. endp
  113. .end start    
  114.  

PD: Mi win32ax.inc tiene algunas mejoras y le eh agragado todas las .inc de mi post anterior para que si quieren compilar el codigo hagan eso ya que tal cual con la win32ax.inc que viene por defecto en FASM no va a compilar.


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



Yo le enseñe a Kayser a usar objetos en ASM
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.884


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [SRC] Zerar
« Respuesta #11 en: 3 Abril 2009, 09:27 am »

Perdon, movs es para strcpy, en este caso queremos stos:

Código
  1. ZeroMemory:
  2. xor al, al ;valor a escribir (0)
  3. mov ecx, dword ptr [esp+8] ;cantidad de veces
  4. mov edi, dword ptr [esp+4] ;buffer
  5. rep stosb
  6. ret

El codigo de Arcangel_0x7C5 es mas rapido que el tuyo por trabajar con DWORDs y no con BYTEs. Puede que sea mas rapido que este tambien (depende de la cantidad de BYTEs a escribir) ... pero una combinacion de rep stosd y mov (para los bytes que sobren del ultimo DWORD que no sea completo) es lo que usa la RTL de VC++ normalmente.


« Última modificación: 3 Abril 2009, 09:37 am por Eternal Idol » 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
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [SRC] Zerar
« Respuesta #12 en: 3 Abril 2009, 15:01 pm »

Cita de: Eternal Idol en 03 Abril 2009, 09:27
Perdon, movs es para strcpy, en este caso queremos stos:

Código

ZeroMemory:
   xor al, al   ;valor a escribir (0)
   mov ecx, dword ptr [esp+8] ;cantidad de veces
   mov edi, dword ptr [esp+4] ;buffer
   rep stosb
ret


El codigo de Arcangel_0x7C5 es mas rapido que el tuyo por trabajar con DWORDs y no con BYTEs. Puede que sea mas rapido que este tambien (depende de la cantidad de BYTEs a escribir) ... pero una combinacion de rep stosd y mov (para los bytes que sobren del ultimo DWORD que no sea completo) es lo que usa la RTL de VC++ normalmente.

Claro , ahora leyendo el source de arkangel me doy cuenta que trabaja con dword's y por lo tanto es mas rapido ( obviamente si yo trabajo byte por byte y el de arkangel de a 4 ) , en todo caso en un relleno de 3 bytes por ejemplo el mio seria mas rapido , no ? ya que hace menos comprobaciones ; mas tarde cuando vuelva mejoro el source para que sea lo mas rapido posible ;)
« Última modificación: 31 Mayo 2009, 03:51 am por YST » En línea



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


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [SRC] Listar funciones de una libreria
« Respuesta #13 en: 3 Abril 2009, 15:40 pm »

Muchas gracias ;D

Estaba cansado de tener que hacer los Imports a mano cuando no estaban declaradas algunas APIs ;-)
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [SRC] Listar funciones de una libreria
« Respuesta #14 en: 3 Abril 2009, 16:29 pm »

Cita de: Karcrack en 03 Abril 2009, 15:40
Muchas gracias ;D

Estaba cansado de tener que hacer los Imports a mano cuando no estaban declaradas algunas APIs ;-)
Claro , da un poco de flojera estar declarando todo manualmente cada vez , dando un consejo , no remplacen su kernel32.inc ni ninguna que venga por defecto aunque muchas estan incompletas , ya que este generador de includes no discrimina cuando hay un api como "CreateProcessA" y "CreateProcessW" entonces si lo remplasan tendrian que llamar a la api como CreateProcessA en vez de llamarla como CreateProcess , haber si mas tarde logro hacer que discrimine esto ;)
« Última modificación: 31 Mayo 2009, 03:52 am 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 #15 en: 3 Abril 2009, 17:10 pm »

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  ;).

y tan bien es mas rápido por no usar loop, en en los 486 se a vuelto mas lento que su equivalente con varias instrucciones. y que yo sepa ya no se lleva el 386. En el archivo de ayuda del masm sale los tiempos de cada instrucción en cada familia procesadores

PD:yo no mido nunca los tiempos
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [SRC] Zerar
« Respuesta #16 en: 3 Abril 2009, 19:47 pm »

No tenia idea eso de el loop , que interesante , gracias por informarme  ;) .
« Última modificación: 31 Mayo 2009, 03:53 am 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]GetAddressFunction
« Respuesta #17 en: 4 Abril 2009, 00:12 am »



Una forma de obtener el handle de la kernel32 ( fuente: hackhound.org ):

Código
  1.  
  2.    mov   eax, [fs:30h]
  3.    mov   eax, [eax + 0ch]
  4.    mov   esi, [eax + 1ch]
  5.    lodsd
  6.    mov  eax, [eax + 08h]

una cosa, Que es lo que hay en [fs:30h]?

Yo para sacar la base de kernel32 usaba la direccion de retorno que deja CreateProcess al pasar el control a tu programa con "call". Luego era solo cuestion de buscar "MZ" pero invertida. y ya la tienes.

A y no entiendo el porque de tanto "push" y "pop"
No es mas facil hacer mov a un registro

Saludos.

PD:Si te interesa el virin te invito a que hagas clic en el enlace de mi firma
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.884


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [SRC]GetAddressFunction
« Respuesta #18 en: 4 Abril 2009, 00:16 am »

una cosa, Que es lo que hay en [fs:30h]?

La direccion de memoria donde esta el PEB.
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
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [SRC]GetAddressFunction
« Respuesta #19 en: 4 Abril 2009, 00:28 am »

Cita de: Arcangel_0x7C5 en 04 Abril 2009, 00:12
A y no entiendo el porque de tanto "push" y "pop"
No es mas facil hacer mov a un registro
La razón principal es que quise que se explicara un poco el code mediante las variables  y no se puede hacer un "mov  [AddressOfNames].dword[ebx+20h] " esa es la razón , aunque facilmente se pueden eliminar todas las variables.


Citar
PD:Si te interesa el virin te invito a que hagas clic en el enlace de mi firma

Muchas gracias , voy a ver esa comunidad.
« Última modificación: 31 Mayo 2009, 03:54 am 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:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines