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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  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 39,431 veces)
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [SRC] Listar funciones de una libreria
« Respuesta #30 en: 5 Abril 2009, 19:56 pm »

Claro , los parametros como mucho se les podria sacar peso y cantidad de parametros.


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



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


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
SRCs de YST.
« Respuesta #31 en: 6 Abril 2009, 02:46 am »

Hola , viendo una funcion desarrollada por un user de este foro , decidi hacer la mia propia ya que encontre que esta funcion se podia mejorar bastante , bueno se las dejo , el parametro que hay que pasarle es el "MZ" de  el archivo , lo pueden cargar con LoadLibrary si se quiere  ;).

Código
  1. proc EOFExtraDataExtract,FHandle
  2. push esi  ebx
  3. mov eax,[FHandle]
  4. mov esi,dword[eax+03ch] ;Offset to start of PE header
  5. add esi,eax
  6. movzx ebx, word[esi+06h] ;Number Of Sections
  7. dec ebx
  8. mov eax,28h
  9. mul ebx
  10. add esi,0xf8 ;START OF SECTION TABLE
  11. add esi,eax
  12. mov eax,dword[esi+10h] ;SizeOfRawData
  13. add eax,dword[esi+14h]  ;pointerToRawData
  14. pop ebx esi
  15. ret
  16. endp


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



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


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
SRCs de YST.
« Respuesta #32 en: 6 Abril 2009, 03:44 am »

Hola , basado en el visor PE de novirusthanks.org hice un modesto visor PE
Código
  1. format pe console
  2. Espacio equ 13,10,0
  3. include 'win32ax.inc'
  4. .data
  5. Logo db '===================================',13,10
  6.     db '= Humilde visor PE by YST         =',13,10
  7.     db '===================================',13,10,0
  8. RutaArch  rb MAX_PATH
  9. HA dd ?
  10. bEscritos dd ?
  11. Log dd ?
  12. CrearLOG rb 10
  13. .code
  14. start:
  15. invoke printf,Logo
  16. invoke printf,Espacio
  17. invoke printf,"Ponga la ruta a escanear: "
  18. invoke printf,Espacio
  19. invoke scanf,"%s",RutaArch
  20.  
  21. invoke printf,Espacio
  22. invoke printf,Espacio
  23.  
  24. invoke LoadLibrary,RutaArch
  25. stdcall Visualisar,eax
  26. invoke ExitProcess,0
  27. proc Visualisar,FHandle
  28. push edi esi  ebx
  29. .if [FHandle] = NULL
  30. jmp .error
  31. .endif
  32.  
  33.  
  34. mov eax,[FHandle]
  35. cmp word[eax],"MZ"
  36. jne .error
  37.  
  38. mov eax,[FHandle]
  39. mov esi,dword[eax+03ch] ;Offset to start of PE header
  40. invoke printf,"%s","start of PE header: "
  41.  
  42. invoke printf,"0x%x",esi
  43. invoke printf,"%s",Espacio
  44. add esi,[FHandle]
  45. movzx ebx, word[esi+06h] ;Number Of Sections
  46. invoke printf,"%s","TimeDateStamp: "
  47. invoke printf,"0x%x",dword[esi+8h]
  48. invoke printf,"%s",Espacio
  49.  
  50. invoke printf,"%s","SizeOfCode: "
  51. invoke printf,"0x%x",dword[esi+1ch]
  52. invoke printf,"%s",Espacio
  53. invoke printf,"%s","Address Of Entry Point: "
  54. invoke printf,"0x%x",dword[esi+28h]
  55. invoke printf,"%s",Espacio
  56. invoke printf,"%s","ImageBase: "
  57. invoke printf,"0x%x",dword[esi+34h]
  58. invoke printf,"%s",Espacio
  59.  
  60. invoke printf,"%s","SizeOfImage: "
  61. invoke printf,"0x%x",dword[esi+50h]
  62. invoke printf,"%s",Espacio
  63.  invoke printf,"%s","SizeOfHeaders : "
  64. invoke printf,"0x%x",dword[esi+54h]
  65. invoke printf,"%s",Espacio
  66.   invoke printf,"%s","CheckSum : "
  67. invoke printf,"0x%x",dword[esi+58h]
  68. invoke printf,"%s",Espacio
  69. invoke printf,"%s","Subsystem: "
  70. .if dword[esi+5Ch] = 2h
  71. invoke printf,"%s","Windows GUI"
  72. .else
  73.  invoke printf,"%s","Windows CUI"
  74.  .endif
  75.    invoke printf,"%s",Espacio
  76.  
  77.     invoke printf,"%s","Posicion de el EOF: "
  78.  stdcall EOFExtraDataExtract,[FHandle]
  79. invoke printf,"0x%x",eax
  80.   invoke printf,"%s",Espacio
  81. invoke printf,"%s",Espacio
  82.   invoke printf,"         SECTION'S         "
  83. invoke printf,"%s",Espacio
  84.   invoke printf,"%s",Espacio
  85.      invoke printf,"%s","Numero de secciones: "
  86.      invoke printf,"0x%x",ebx
  87.      invoke printf,"%s",Espacio
  88.   invoke printf,"%s",Espacio
  89. .bucle:
  90. dec ebx
  91. mov eax,28h
  92. mul ebx
  93. add eax,0xf8
  94. add eax,esi
  95. mov edi,eax
  96. invoke printf,"Name: "
  97. invoke printf,"%s",edi
  98. invoke printf,"%s",Espacio
  99. invoke printf,"virtual address: "
  100. invoke printf,"0x%x",dword[edi+0ch]
  101. invoke printf,"%s",Espacio
  102. invoke printf,"VirtualSize : "
  103. invoke printf,"0x%x",dword[edi+08h]
  104. invoke printf,"%s",Espacio
  105. invoke printf,"SizeOfRawData: "
  106. invoke printf,"0x%x",dword[edi+10h]
  107. invoke printf,"%s",Espacio
  108. invoke printf,"pointerToRawData : "
  109. invoke printf,"0x%x",dword[edi+14h]
  110. invoke printf,"%s",Espacio
  111. invoke printf,"Characteristics : "
  112. invoke printf,"0x%x",dword[edi+24h]
  113. invoke printf,"%s",Espacio
  114. invoke printf,"%s",Espacio
  115. invoke printf,"%s",Espacio
  116.  
  117. cmp ebx,0
  118. jne .bucle
  119.  
  120. mov eax,[FHandle]
  121. add eax,dword[eax+3ch]
  122. .if dword[eax+78h]  = 0
  123. .else
  124.   invoke printf,"         EXPORT         "
  125. invoke printf,"%s",Espacio
  126.   invoke printf,"%s",Espacio
  127. stdcall ListarFunciones,[FHandle]
  128. .endif
  129. ;ListarImport
  130. invoke printf,"     Import's "
  131. invoke printf,Espacio
  132. invoke printf,Espacio
  133. mov eax,[FHandle]
  134. add eax,dword[eax+3ch]
  135. .if dword[eax+80h]  = 0
  136. invoke printf,"No incluye librerias ( .dll ) ."
  137. .else
  138. stdcall ListarImport ,[FHandle]
  139. .endif
  140. pop ebx esi   edi
  141. ret
  142. .error:
  143. invoke printf,"Ingrese un archivo valido."
  144. pop ebx esi   edi
  145. ret
  146. endp
  147. proc EOFExtraDataExtract,FHandle
  148. push esi  ebx
  149. mov eax,[FHandle]
  150. mov esi,dword[eax+03ch] ;Offset to start of PE header
  151. add esi,eax
  152. movzx ebx, word[esi+06h] ;Number Of Sections
  153. dec ebx
  154. mov eax,28h
  155. mul ebx
  156. add esi,0xf8 ;START OF SECTION TABLE
  157. add esi,eax
  158. mov eax,dword[esi+10h] ;SizeOfRawData
  159. add eax,dword[esi+14h]  ;pointerToRawData
  160. pop ebx esi
  161. ret
  162. endp
  163. proc ListarFunciones,LibHandle
  164. locals
  165. DirPEHeader dd ?
  166. PunteroPEHeader dd ?
  167. RVAofExportDirectory   dd ?
  168. NumberOfNames dd ?
  169. AddressOfNames dd ?
  170. endl
  171. push ebx  edx  edi  ecx
  172. mov eax,[LibHandle]
  173. cmp eax,NULL
  174. je .Error
  175. push dword[eax + 03Ch]
  176. pop  [DirPEHeader]
  177. push [DirPEHeader]
  178. pop [PunteroPEHeader]
  179. add  [PunteroPEHeader],eax
  180. mov ebx,[PunteroPEHeader]
  181. cmp word[ebx],"PE"
  182. jne .Error
  183. push dword[ebx+078h]
  184. pop [RVAofExportDirectory]
  185. mov ebx, [RVAofExportDirectory]
  186. add ebx,eax
  187. push dword[ebx+018h]
  188. pop [NumberOfNames]
  189. mov edx,[NumberOfNames]
  190. push dword[ebx+20h]
  191. pop [AddressOfNames]
  192. mov ebx,[NumberOfNames]
  193. invoke printf,"%s" ,"Cantidad de funciones exportadas: "
  194. invoke printf,"%d",[NumberOfNames]
  195.  invoke printf,Espacio
  196.    invoke printf,Espacio
  197.        invoke printf,"Funciones exportadas: "
  198.            invoke printf,Espacio
  199. mov        edi, [AddressOfNames]
  200.    add        edi,[LibHandle]
  201. .bucle:
  202. dec ebx
  203. mov        eax, [edi + ebx * 4]
  204. add eax,[LibHandle]
  205. invoke printf,"-%s",eax
  206.  invoke printf,Espacio
  207.  cmp ebx,0
  208.  jne .bucle
  209. pop  ecx edi edx ebx
  210. ret
  211. .Error:
  212. ret
  213. endp
  214. proc ListarImport,FHandle
  215. push eax ebx edi
  216. mov ebx,[FHandle]
  217. add ebx,dword[ebx+03ch]
  218. mov ebx,dword[ebx+80h]
  219. add ebx,[FHandle]
  220. xor edi,edi
  221. .bucle:
  222. mov eax,dword[ebx+0ch]
  223. add eax,[FHandle]
  224. .if eax = [FHandle]
  225. invoke printf,"Cantidad de librerias importadas: %d",edi
  226. invoke printf,Espacio
  227. ret
  228. .else
  229. inc edi
  230. invoke printf,"%s",eax
  231. invoke printf,Espacio
  232. .endif
  233. add ebx,14h
  234. jmp .bucle
  235. pop edi ebx eax
  236. ret
  237. endp
  238.  
  239. .end start
« Última modificación: 31 Mayo 2009, 04:01 am por YST » En línea



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


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #33 en: 6 Abril 2009, 18:22 pm »

Actualizado ;D

Ahora estoy haciendo para que ponga las funciones importadas , si alguien tiene alguna idea que se le puede agregar la puede decir.
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #34 en: 6 Abril 2009, 18:53 pm »

Muy bueno lo que andas haciendo con este asm, sigue así  :)
En línea





Mi blog:
http://amerikanocls.blogspot.com
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #35 en: 6 Abril 2009, 19:56 pm »

Muy bueno lo que andas haciendo con este asm, sigue así  :)

Muchas gracias :D , en unos minutos pasare el code en limpio.
En línea



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


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #36 en: 6 Abril 2009, 23:07 pm »

Ordenando el codigo de a poco.

Código
  1. format pe console
  2. include 'win32ax.inc'
  3. .data
  4. Espacio equ 13,10,0   ;Para pasar a una nueva linea.
  5. RutaArchivo rb MAX_PATH   ;Variable para guardar la ruta de el archivo
  6. PunteroPEheader dd ? ; Puntero de el Pe header
  7. Logo db '                      ===================================',13,10          ; LOGO PRINCIPAL
  8.     db '                      =         PE visor by YST         =',13,10
  9.     db '                      ===================================',13,10,0
  10.  
  11. LogoGeneral db '                      ===================================',13,10          ; LOGO GENERAL
  12.            db '                      =           General               =',13,10
  13.            db '                      ===================================',13,10,0
  14.  
  15. LogoSecciones db '                      ===================================',13,10
  16.              db '                      =           Secciones             =',13,10     ;LOGO DE INFO DE LAS SECCIONES
  17.              db '                      ===================================',13,10,0
  18.  
  19. LogoExport    db '                      ===================================',13,10
  20.              db '                      =           Export data           =',13,10     ;LOGO DE INFO DE el Export data
  21.              db '                      ===================================',13,10,0
  22. FHandle dd ?  ; MZ de el archivo
  23. .code
  24. start:
  25. invoke system,"color 3" ;Ponemos el color de texto
  26. invoke printf,Logo      ;Imprimimos el logo
  27. invoke printf,Espacio   ;Ponemos dos nuevas lineas.
  28. invoke printf,Espacio
  29.  
  30. invoke printf,"Inserte la ruta de el archivo a examinar:"   ; Preguntamos el archivo
  31. invoke printf,Espacio
  32. invoke scanf,"%s",RutaArchivo  ;Obtenemos la ruta de el archivo
  33.  
  34. invoke LoadLibrary,RutaArchivo ;Cargamos el archivo
  35. .if eax = 0     ; Si hay error
  36. invoke printf,"Hubo un error al cargar el archivo." ;Mostramos el error .
  37. invoke ExitProcess,0 ; Nos salimos.
  38. .else ; De lo contrario
  39. .if  word[eax] = "MZ" ; Si los primeros 2 bytes son igual a MZ
  40. mov [FHandle],eax      ; Guardamos el MZ en FHandle
  41. .else  ; De lo contrario
  42. invoke printf,"Ingrese un archivo valido." ;Mostramos el error .
  43. invoke ExitProcess,0 ; Nos salimos.
  44. .endif ; Terminamos los if
  45. .endif
  46.  
  47. add eax,dword[eax+03ch] ; Guardamos en eax la direccion de el PE header
  48. .if  word[eax] = "PE" ; Si los primeros 2 bytes son igual a PE
  49. mov [PunteroPEheader],eax      ; Guardamos el puntero de el PE header en PunteroPEheader
  50. .else  ; De lo contrario
  51. invoke printf,"No se a detectado PE header." ;Mostramos el error .
  52. invoke ExitProcess,0 ; Nos salimos.
  53. .endif ; Terminamos los if
  54. .endif
  55.  
  56. invoke printf,Espacio ; Pasamos a la siguiente linea.
  57. invoke printf,Espacio ; Pasamos a la siguiente linea.
  58. invoke printf,LogoGeneral ;Imprimimos el logo de la informacion general.
  59. invoke printf,Espacio ; Pasamos a la siguiente linea.
  60. invoke printf,Espacio ; Pasamos a la siguiente linea.
  61.  
  62. mov ebx,[FHandle]
  63. mov ebx,dword[ebx+03ch]
  64. invoke printf,"La posicion de el PE header es : 0x%x" ,ebx    ;Mostramos la direccion de el PE header
  65. invoke printf,Espacio ; Pasamos a la siguiente linea.
  66.  
  67. add ebx,[FHandle]; Le sumamos a la posicion de el PE header el MZ para pasar a el puntero de el PE header
  68. invoke printf,"TimeDateStamp: 0x%x " ,dword[ebx+08h] ; Imprimimo el TimeDateStamp
  69. invoke printf,Espacio ; Pasamos a la siguiente linea.
  70.  
  71.  
  72.  
  73. invoke printf,"SizeOfCode: 0x%x " ,dword[ebx+1ch] ; Imprimimo el SizeOfCode
  74. invoke printf,Espacio ; Pasamos a la siguiente linea.
  75.  
  76.  
  77. invoke printf,"AddressOfEntrPoint: 0x%x " ,dword[ebx+28h] ; Imprimimo el AddressOfEntrPoint
  78. invoke printf,Espacio ; Pasamos a la siguiente linea.
  79.  
  80.  
  81. invoke printf,"ImageBase: 0x%x " ,dword[ebx+34h] ; Imprimimo el ImageBase
  82. invoke printf,Espacio ; Pasamos a la siguiente linea.
  83.  
  84.  
  85. invoke printf,"SizeOfImage: 0x%x " ,dword[ebx+50h] ; Imprimimo el SizeOfImage
  86. invoke printf,Espacio ; Pasamos a la siguiente linea.
  87.  
  88. invoke printf,"SizeOfHeaders: 0x%x " ,dword[ebx+54h] ; Imprimimo el SizeOfHeaders
  89. invoke printf,Espacio ; Pasamos a la siguiente linea.
  90.  
  91.  
  92. invoke printf,"CheckSum: 0x%x " ,dword[ebx+58h] ; Imprimimo el CheckSum
  93. invoke printf,Espacio ; Pasamos a la siguiente linea.
  94.  
  95. invoke printf,"Subsystem: "       ;Imprimimos el Subsystem
  96. .if dword[ebx+5Ch] = 2h  ;SI es GUI
  97. invoke printf,"Windows GUI"    ; Imprimimos   Windows GUI
  98. .else             ; De lo contrario es CUI (Consola)
  99. invoke printf,"Windows CUI"  ; Imprimimos   Windows CUI
  100. .endif        ;Terminamos el if
  101. invoke printf,Espacio ; Pasamos a la siguiente linea.
  102. stdcall EOFExtraDataExtract,[FHandle]
  103. invoke printf,"Posicion de el EOF: 0x%x",eax       ;Imprimimos la posicion de el EOF
  104. invoke printf,Espacio ; Pasamos a la siguiente linea.
  105.  
  106. invoke printf,Espacio ; Pasamos a la siguiente linea.
  107. invoke printf,Espacio ; Pasamos a la siguiente linea.
  108. invoke printf,LogoSecciones ;Imprimimos el logo de la informacion de las secciones.
  109. invoke printf,Espacio ; Pasamos a la siguiente linea.
  110. invoke printf,Espacio ; Pasamos a la siguiente linea.
  111.  
  112. mov esi,[PunteroPEheader]      ;Movemos el puntero de el PE Header a esi.
  113. movzx ebx,word[esi+06h]  ; Guardamos la cantidad de secciones en ebx.
  114.  
  115.  
  116.  
  117. invoke printf,"Numero de secciones: %d",ebx   ;Imprimimos la cantidad de secciones.
  118. invoke printf,Espacio ; Pasamos a la siguiente linea.
  119. invoke printf,Espacio ; Pasamos a la siguiente linea.
  120.  
  121. .bucleImprimeSecciones: ; Bucle que imprime secciones
  122. dec ebx    ;Les restamos uno a ebx
  123. mov eax,28h       ;Hacemos que eax sea igual a $28
  124. mul ebx           ;Multiplicamos ebx
  125. add eax,0xf8      ;Le sumamos $F8 ( $F8 = START OF SECTION TABLE )
  126. add eax,esi       ;Le agregamos al resultado de la multiplicacion el puntero de el PE header
  127. mov edi,eax       ;Guardamos eax en edi
  128. invoke printf,"Name: %s",edi  ;Imprimimos el nombre de la sección.
  129. invoke printf,Espacio ; Pasamos a la siguiente linea.
  130. invoke printf,"virtual address: 0x%x",dword[edi+0ch]  ;Imprimimos el virtual address
  131. invoke printf,Espacio  ; Pasamos a la siguiente linea
  132. invoke printf,"VirtualSize: 0x%x",dword[edi+08h]        ;Imprimimos el VirtualSize
  133. invoke printf,Espacio  ; Pasamos a la siguiente linea
  134. invoke printf,"SizeOfRawData: 0x%x",dword[edi+10h] ;  Imprimimos el SizeOfRawData
  135. invoke printf,Espacio  ; Pasamos a la siguiente linea
  136. invoke printf,"pointerToRawData : 0x%x",dword[edi+14h]   ;Imprimimos el pointerToRawData
  137. invoke printf,Espacio  ; Pasamos a la siguiente linea
  138. invoke printf,"Characteristics: 0x%x",dword[edi+24h] ;Imprimimos las Characteristics
  139. invoke printf,Espacio  ; Pasamos a la siguiente linea
  140. invoke printf,Espacio  ; Pasamos a la siguiente linea
  141. invoke printf,Espacio  ; Pasamos a la siguiente linea
  142.  
  143. cmp ebx,0
  144. jne .bucleImprimeSecciones   ; Si no se an imprimido todas las secciones saltamos a lña etiqueta .bucleImprimeSecciones .
  145.  
  146. invoke printf,Espacio ; Pasamos a la siguiente linea.
  147. invoke printf,Espacio ; Pasamos a la siguiente linea.
  148. invoke printf,LogoExport   ;Imprimimos el logo de la informacion de el export data.
  149. invoke printf,Espacio ; Pasamos a la siguiente linea.
  150. invoke printf,Espacio ; Pasamos a la siguiente linea.
  151.  
  152. .if dword[esi+078h] = 0    ; Si no hay export data
  153. invoke printf,"No se exporta ninguna funcion."
  154. invoke printf,Espacio ; Pasamos a la siguiente linea.
  155. .else
  156. mov ebx,dword[esi+078h]
  157. add ebx,[FHandle]
  158. invoke printf,"Cantidad de funciones exportadas: %d",dword[ebx+18h]    ;Imprimimo la cantidad de funciones exportadas.
  159. invoke printf,Espacio ; Pasamos a la siguiente linea.          +
  160. mov edi,dword[ebx+20h]   ;AddressOfNames
  161. add edi,[FHandle]
  162. mov ebx,dword[ebx+18h]   ;Numero de exports
  163. invoke printf,"Funciones exportadas: "
  164.  invoke printf,Espacio
  165. .bucleExportData:           ;Bucle para imprimir la export data
  166. dec ebx
  167. mov        eax, [edi + ebx * 4]
  168. add eax,[FHandle]
  169. invoke printf,"-%s",eax
  170.  invoke printf,Espacio
  171.  cmp ebx,0
  172.  jne .bucleExportData  ;Si no se an imprimido todas seguimos
  173. .endif
  174.  
  175. invoke system,"pause"
  176. invoke ExitProcess,0
  177.  
  178. proc EOFExtraDataExtract,FHandle ;Funcion para extraer el EOF
  179. push esi  ebx
  180. mov eax,[FHandle]
  181. mov esi,dword[eax+03ch] ;Offset to start of PE header
  182. add esi,eax
  183. movzx ebx, word[esi+06h] ;Number Of Sections
  184. dec ebx
  185. mov eax,28h
  186. mul ebx
  187. add esi,0xf8 ;START OF SECTION TABLE
  188. add esi,eax
  189. mov eax,dword[esi+10h] ;SizeOfRawData
  190. add eax,dword[esi+14h]  ;pointerToRawData
  191. pop ebx esi
  192. ret
  193. endp
  194.  
  195.  
  196. .end start
  197. section '.reloc' fixups data discardable
« Última modificación: 31 Mayo 2009, 04:04 am por YST » En línea



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


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #37 en: 22 Abril 2009, 07:01 am »

Se actualiza el visor pe , ahora listando el import data  ;)
Código
  1. format pe console
  2. include 'win32ax.inc'
  3. .data
  4. Espacio equ 13,10,0   ;Para pasar a una nueva linea.
  5. RutaArchivo rb MAX_PATH   ;Variable para guardar la ruta de el archivo
  6. PunteroPEheader dd ? ; Puntero de el Pe header
  7. Logo db '                      ===================================',13,10          ; LOGO PRINCIPAL
  8.     db '                      =         PE visor by YST         =',13,10
  9.     db '                      ===================================',13,10,0
  10.  
  11. LogoGeneral db '                      ===================================',13,10          ; LOGO GENERAL
  12.            db '                      =           General               =',13,10
  13.            db '                      ===================================',13,10,0
  14.  
  15. LogoSecciones db '                      ===================================',13,10
  16.              db '                      =           Secciones             =',13,10     ;LOGO DE INFO DE LAS SECCIONES
  17.              db '                      ===================================',13,10,0
  18.  
  19. LogoExport    db '                      ===================================',13,10
  20.              db '                      =           Export data           =',13,10     ;LOGO DE INFO DE el Export data
  21.              db '                      ===================================',13,10,0
  22. LogoImport    db '                      ===================================',13,10
  23.              db '                      =           Import data           =',13,10     ;LOGO DE INFO DE el import data
  24.              db '                      ===================================',13,10,0
  25. FHandle dd ?  ; MZ de el archivo
  26. .code
  27. start:
  28. invoke system,"color 3" ;Ponemos el color de texto
  29. invoke printf,Logo      ;Imprimimos el logo
  30. invoke printf,Espacio   ;Ponemos dos nuevas lineas.
  31. invoke printf,Espacio
  32.  
  33. invoke printf,"Inserte la ruta de el archivo a examinar:"   ; Preguntamos el archivo
  34. invoke printf,Espacio
  35. invoke scanf,"%s",RutaArchivo  ;Obtenemos la ruta de el archivo
  36.  
  37. invoke LoadLibrary,RutaArchivo ;Cargamos el archivo
  38. .if eax = 0     ; Si hay error
  39. invoke printf,"Hubo un error al cargar el archivo:" ;Mostramos el error .
  40. invoke printf,RutaArchivo
  41. invoke ExitProcess,0 ; Nos salimos.
  42. .else ; De lo contrario
  43. .if  word[eax] = "MZ" ; Si los primeros 2 bytes son igual a MZ
  44. mov [FHandle],eax      ; Guardamos el MZ en FHandle
  45. .else  ; De lo contrario
  46. invoke printf,"Ingrese un archivo valido." ;Mostramos el error .
  47. invoke ExitProcess,0 ; Nos salimos.
  48. .endif ; Terminamos los if
  49. .endif
  50.  
  51. add eax,dword[eax+03ch] ; Guardamos en eax la direccion de el PE header
  52. .if  word[eax] = "PE" ; Si los primeros 2 bytes son igual a PE
  53. mov [PunteroPEheader],eax      ; Guardamos el puntero de el PE header en PunteroPEheader
  54. .else  ; De lo contrario
  55. invoke printf,"No se a detectado PE header." ;Mostramos el error .
  56. invoke ExitProcess,0 ; Nos salimos.
  57. .endif ; Terminamos los if
  58. .endif
  59.  
  60. invoke printf,Espacio ; Pasamos a la siguiente linea.
  61. invoke printf,Espacio ; Pasamos a la siguiente linea.
  62. invoke printf,LogoGeneral ;Imprimimos el logo de la informacion general.
  63. invoke printf,Espacio ; Pasamos a la siguiente linea.
  64. invoke printf,Espacio ; Pasamos a la siguiente linea.
  65.  
  66. mov ebx,[FHandle]
  67. mov ebx,dword[ebx+03ch]
  68. invoke printf,"La posicion de el PE header es : 0x%x" ,ebx    ;Mostramos la direccion de el PE header
  69. invoke printf,Espacio ; Pasamos a la siguiente linea.
  70.  
  71. add ebx,[FHandle]; Le sumamos a la posicion de el PE header el MZ para pasar a el puntero de el PE header
  72. invoke printf,"TimeDateStamp: 0x%x " ,dword[ebx+08h] ; Imprimimo el TimeDateStamp
  73. invoke printf,Espacio ; Pasamos a la siguiente linea.
  74.  
  75.  
  76.  
  77. invoke printf,"SizeOfCode: 0x%x " ,dword[ebx+1ch] ; Imprimimo el SizeOfCode
  78. invoke printf,Espacio ; Pasamos a la siguiente linea.
  79.  
  80.  
  81. invoke printf,"AddressOfEntrPoint: 0x%x " ,dword[ebx+28h] ; Imprimimo el AddressOfEntrPoint
  82. invoke printf,Espacio ; Pasamos a la siguiente linea.
  83.  
  84.  
  85. invoke printf,"ImageBase: 0x%x " ,dword[ebx+34h] ; Imprimimo el ImageBase
  86. invoke printf,Espacio ; Pasamos a la siguiente linea.
  87.  
  88.  
  89. invoke printf,"SizeOfImage: 0x%x " ,dword[ebx+50h] ; Imprimimo el SizeOfImage
  90. invoke printf,Espacio ; Pasamos a la siguiente linea.
  91.  
  92. invoke printf,"SizeOfHeaders: 0x%x " ,dword[ebx+54h] ; Imprimimo el SizeOfHeaders
  93. invoke printf,Espacio ; Pasamos a la siguiente linea.
  94.  
  95.  
  96. invoke printf,"CheckSum: 0x%x " ,dword[ebx+58h] ; Imprimimo el CheckSum
  97. invoke printf,Espacio ; Pasamos a la siguiente linea.
  98.  
  99. invoke printf,"Subsystem: "       ;Imprimimos el Subsystem
  100. .if dword[ebx+5Ch] = 2h  ;SI es GUI
  101. invoke printf,"Windows GUI"    ; Imprimimos   Windows GUI
  102. .else             ; De lo contrario es CUI (Consola)
  103. invoke printf,"Windows CUI"  ; Imprimimos   Windows CUI
  104. .endif        ;Terminamos el if
  105. invoke printf,Espacio ; Pasamos a la siguiente linea.
  106. stdcall EOFExtraDataExtract,[FHandle]
  107. invoke printf,"Posicion de el EOF: 0x%x",eax       ;Imprimimos la posicion de el EOF
  108. invoke printf,Espacio ; Pasamos a la siguiente linea.
  109.  
  110. invoke printf,Espacio ; Pasamos a la siguiente linea.
  111. invoke printf,Espacio ; Pasamos a la siguiente linea.
  112. invoke printf,LogoSecciones ;Imprimimos el logo de la informacion de las secciones.
  113. invoke printf,Espacio ; Pasamos a la siguiente linea.
  114. invoke printf,Espacio ; Pasamos a la siguiente linea.
  115.  
  116. mov esi,[PunteroPEheader]      ;Movemos el puntero de el PE Header a esi.
  117. movzx ebx,word[esi+06h]  ; Guardamos la cantidad de secciones en ebx.
  118.  
  119.  
  120.  
  121. invoke printf,"Numero de secciones: %d",ebx   ;Imprimimos la cantidad de secciones.
  122. invoke printf,Espacio ; Pasamos a la siguiente linea.
  123. invoke printf,Espacio ; Pasamos a la siguiente linea.
  124.  
  125. .bucleImprimeSecciones: ; Bucle que imprime secciones
  126. dec ebx    ;Les restamos uno a ebx
  127. mov eax,28h       ;Hacemos que eax sea igual a $28
  128. mul ebx           ;Multiplicamos ebx
  129. add eax,0xf8      ;Le sumamos $F8 ( $F8 = START OF SECTION TABLE )
  130. add eax,esi       ;Le agregamos al resultado de la multiplicacion el puntero de el PE header
  131. mov edi,eax       ;Guardamos eax en edi
  132. invoke printf,"Name: %s",edi  ;Imprimimos el nombre de la sección.
  133. invoke printf,Espacio ; Pasamos a la siguiente linea.
  134. invoke printf,"virtual address: 0x%x",dword[edi+0ch]  ;Imprimimos el virtual address
  135. invoke printf,Espacio  ; Pasamos a la siguiente linea
  136. invoke printf,"VirtualSize: 0x%x",dword[edi+08h]        ;Imprimimos el VirtualSize
  137. invoke printf,Espacio  ; Pasamos a la siguiente linea
  138. invoke printf,"SizeOfRawData: 0x%x",dword[edi+10h] ;  Imprimimos el SizeOfRawData
  139. invoke printf,Espacio  ; Pasamos a la siguiente linea
  140. invoke printf,"pointerToRawData : 0x%x",dword[edi+14h]   ;Imprimimos el pointerToRawData
  141. invoke printf,Espacio  ; Pasamos a la siguiente linea
  142. invoke printf,"Characteristics: 0x%x",dword[edi+24h] ;Imprimimos las Characteristics
  143. invoke printf,Espacio  ; Pasamos a la siguiente linea
  144. invoke printf,Espacio  ; Pasamos a la siguiente linea
  145. invoke printf,Espacio  ; Pasamos a la siguiente linea
  146.  
  147. cmp ebx,0
  148. jne .bucleImprimeSecciones   ; Si no se an imprimido todas las secciones saltamos a lña etiqueta .bucleImprimeSecciones .
  149.  
  150. invoke printf,Espacio ; Pasamos a la siguiente linea.
  151. invoke printf,Espacio ; Pasamos a la siguiente linea.
  152. invoke printf,LogoExport   ;Imprimimos el logo de la informacion de el export data.
  153. invoke printf,Espacio ; Pasamos a la siguiente linea.
  154. invoke printf,Espacio ; Pasamos a la siguiente linea.
  155.  
  156. .if dword[esi+078h] = 0    ; Si no hay export data
  157. invoke printf,"[+]No se exporta ninguna funcion."
  158. invoke printf,Espacio ; Pasamos a la siguiente linea.
  159. .else
  160. mov ebx,dword[esi+078h]
  161. add ebx,[FHandle]
  162. invoke printf,"Cantidad de funciones exportadas: %d",dword[ebx+18h]    ;Imprimimo la cantidad de funciones exportadas.
  163. invoke printf,Espacio ; Pasamos a la siguiente linea.          +
  164. mov edi,dword[ebx+20h]   ;AddressOfNames
  165. add edi,[FHandle]
  166. mov ebx,dword[ebx+18h]   ;Numero de exports
  167. invoke printf,"Funciones exportadas: "
  168.  invoke printf,Espacio
  169. .bucleExportData:           ;Bucle para imprimir la export data
  170. dec ebx
  171. mov        eax, [edi + ebx * 4]
  172. add eax,[FHandle]
  173. invoke printf,"[+]%s",eax
  174.  invoke printf,Espacio
  175.  cmp ebx,0
  176.  jne .bucleExportData  ;Si no se an imprimido todas seguimos
  177. .endif
  178. invoke printf,LogoImport
  179. invoke printf,Espacio
  180. invoke printf,Espacio
  181.  mov eax,[PunteroPEheader]
  182. .if  dword[eax+80h] = NULL  ;Si no importamos ninguna funcion.
  183. invoke printf,"[+]No importa ninguna funcion."
  184. .else;De lo contrario
  185. stdcall Sacaimport,[FHandle]
  186. .endif
  187. invoke system,"pause"
  188. invoke ExitProcess,0
  189.  
  190. proc EOFExtraDataExtract,FHandle ;Funcion para extraer el EOF
  191. push esi  ebx
  192. mov eax,[FHandle]
  193. mov esi,dword[eax+03ch] ;Offset to start of PE header
  194. add esi,eax
  195. movzx ebx, word[esi+06h] ;Number Of Sections
  196. dec ebx
  197. mov eax,28h
  198. mul ebx
  199. add esi,0xf8 ;START OF SECTION TABLE
  200. add esi,eax
  201. mov eax,dword[esi+10h] ;SizeOfRawData
  202. add eax,dword[esi+14h]  ;pointerToRawData
  203. pop ebx esi
  204. ret
  205. endp
  206. proc Sacaimport ,handle
  207. locals
  208. Export dd ?
  209. endl
  210. pushad
  211. mov eax,[handle]
  212. mov ebx,dword[eax+03ch]
  213. add ebx,eax
  214. mov ebx,dword[ebx+80h]
  215. add ebx,eax
  216. mov [Export],ebx
  217. .buclelib:
  218. mov ebx,[Export]
  219. mov edi,dword[ebx+0ch]
  220. cmp edi,0
  221. je .salir
  222. add edi,[handle]
  223. invoke printf,"- Funciones de %s: ",edi
  224. invoke printf,"%s",Espacio
  225. xor esi,esi
  226. mov esi,dword[ebx]
  227. add esi,[handle]
  228. mov edi,esi
  229. xor ebx,ebx
  230. .bucleapi:
  231. xor esi,esi
  232. mov esi,dword[edi+ebx]
  233. cmp esi,0
  234. je .otralib
  235. add esi,[handle]
  236. add esi,2h
  237. invoke printf," [*]%s",esi
  238. invoke printf,"%s",Espacio
  239. add ebx,04h
  240. jmp .bucleapi
  241. .otralib:
  242. add  [Export] ,14h
  243. jmp .buclelib
  244. .salir:
  245. popad
  246. ret
  247. endp
  248.  
  249. .end start
  250. section '.reloc' fixups data discardable
« Última modificación: 31 Mayo 2009, 04:12 am por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #38 en: 22 Abril 2009, 08:07 am »

Muy bueno, si señor, será muy util este code. Gracias por el aporte  ;-).

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Pequeño visor PE
« Respuesta #39 en: 22 Abril 2009, 08:16 am »

Cita de: AmeRiK@nO en 22 Abril 2009, 08:07
Muy bueno, si señor, será muy util este code. Gracias por el aporte  ;-).

salu2
jeje gracias, lo que le quiero agregar ahora es que genere logs en html , yo creo que para unas semanas mas lo tengo generando logs en html :D .
« Última modificación: 31 Mayo 2009, 04:13 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