Autor
|
Tema: SRCs de YST. (Leído 39,824 veces)
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
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 . proc EOFExtraDataExtract,FHandle push esi ebx mov eax,[FHandle] mov esi,dword[eax+03ch] ;Offset to start of PE header add esi,eax movzx ebx, word[esi+06h] ;Number Of Sections dec ebx mov eax,28h mul ebx add esi,0xf8 ;START OF SECTION TABLE add esi,eax mov eax,dword[esi+10h] ;SizeOfRawData add eax,dword[esi+14h] ;pointerToRawData pop ebx esi ret 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
Mensajes: 965
I'm you
|
Hola , basado en el visor PE de novirusthanks.org hice un modesto visor PE format pe console Espacio equ 13,10,0 include 'win32ax.inc' .data Logo db '===================================',13,10 db '= Humilde visor PE by YST =',13,10 db '===================================',13,10,0 RutaArch rb MAX_PATH HA dd ? bEscritos dd ? Log dd ? CrearLOG rb 10 .code start: invoke printf,Logo invoke printf,Espacio invoke printf,"Ponga la ruta a escanear: " invoke printf,Espacio invoke scanf,"%s",RutaArch invoke printf,Espacio invoke printf,Espacio invoke LoadLibrary,RutaArch stdcall Visualisar,eax invoke ExitProcess,0 proc Visualisar,FHandle push edi esi ebx .if [FHandle] = NULL jmp .error .endif mov eax,[FHandle] cmp word[eax],"MZ" jne .error mov eax,[FHandle] mov esi,dword[eax+03ch] ;Offset to start of PE header invoke printf,"%s","start of PE header: " invoke printf,"0x%x",esi invoke printf,"%s",Espacio add esi,[FHandle] movzx ebx, word[esi+06h] ;Number Of Sections invoke printf,"%s","TimeDateStamp: " invoke printf,"0x%x",dword[esi+8h] invoke printf,"%s",Espacio invoke printf,"%s","SizeOfCode: " invoke printf,"0x%x",dword[esi+1ch] invoke printf,"%s",Espacio invoke printf,"%s","Address Of Entry Point: " invoke printf,"0x%x",dword[esi+28h] invoke printf,"%s",Espacio invoke printf,"%s","ImageBase: " invoke printf,"0x%x",dword[esi+34h] invoke printf,"%s",Espacio invoke printf,"%s","SizeOfImage: " invoke printf,"0x%x",dword[esi+50h] invoke printf,"%s",Espacio invoke printf,"%s","SizeOfHeaders : " invoke printf,"0x%x",dword[esi+54h] invoke printf,"%s",Espacio invoke printf,"%s","CheckSum : " invoke printf,"0x%x",dword[esi+58h] invoke printf,"%s",Espacio invoke printf,"%s","Subsystem: " .if dword[esi+5Ch] = 2h invoke printf,"%s","Windows GUI" .else invoke printf,"%s","Windows CUI" .endif invoke printf,"%s",Espacio invoke printf,"%s","Posicion de el EOF: " stdcall EOFExtraDataExtract,[FHandle] invoke printf,"0x%x",eax invoke printf,"%s",Espacio invoke printf,"%s",Espacio invoke printf," SECTION'S " invoke printf,"%s",Espacio invoke printf,"%s",Espacio invoke printf,"%s","Numero de secciones: " invoke printf,"0x%x",ebx invoke printf,"%s",Espacio invoke printf,"%s",Espacio .bucle: dec ebx mov eax,28h mul ebx add eax,0xf8 add eax,esi mov edi,eax invoke printf,"Name: " invoke printf,"%s",edi invoke printf,"%s",Espacio invoke printf,"virtual address: " invoke printf,"0x%x",dword[edi+0ch] invoke printf,"%s",Espacio invoke printf,"VirtualSize : " invoke printf,"0x%x",dword[edi+08h] invoke printf,"%s",Espacio invoke printf,"SizeOfRawData: " invoke printf,"0x%x",dword[edi+10h] invoke printf,"%s",Espacio invoke printf,"pointerToRawData : " invoke printf,"0x%x",dword[edi+14h] invoke printf,"%s",Espacio invoke printf,"Characteristics : " invoke printf,"0x%x",dword[edi+24h] invoke printf,"%s",Espacio invoke printf,"%s",Espacio invoke printf,"%s",Espacio cmp ebx,0 jne .bucle mov eax,[FHandle] add eax,dword[eax+3ch] .if dword[eax+78h] = 0 .else invoke printf," EXPORT " invoke printf,"%s",Espacio invoke printf,"%s",Espacio stdcall ListarFunciones,[FHandle] .endif ;ListarImport invoke printf," Import's " invoke printf,Espacio invoke printf,Espacio mov eax,[FHandle] add eax,dword[eax+3ch] .if dword[eax+80h] = 0 invoke printf,"No incluye librerias ( .dll ) ." .else stdcall ListarImport ,[FHandle] .endif pop ebx esi edi ret .error: invoke printf,"Ingrese un archivo valido." pop ebx esi edi ret endp proc EOFExtraDataExtract,FHandle push esi ebx mov eax,[FHandle] mov esi,dword[eax+03ch] ;Offset to start of PE header add esi,eax movzx ebx, word[esi+06h] ;Number Of Sections dec ebx mov eax,28h mul ebx add esi,0xf8 ;START OF SECTION TABLE add esi,eax mov eax,dword[esi+10h] ;SizeOfRawData add eax,dword[esi+14h] ;pointerToRawData pop ebx esi ret endp proc ListarFunciones,LibHandle locals DirPEHeader dd ? PunteroPEHeader dd ? RVAofExportDirectory dd ? NumberOfNames dd ? AddressOfNames dd ? endl push ebx edx edi ecx mov eax,[LibHandle] cmp eax,NULL je .Error push dword[eax + 03Ch] pop [DirPEHeader] push [DirPEHeader] pop [PunteroPEHeader] add [PunteroPEHeader],eax mov ebx,[PunteroPEHeader] cmp word[ebx],"PE" jne .Error push dword[ebx+078h] pop [RVAofExportDirectory] mov ebx, [RVAofExportDirectory] add ebx,eax push dword[ebx+018h] pop [NumberOfNames] mov edx,[NumberOfNames] push dword[ebx+20h] pop [AddressOfNames] mov ebx,[NumberOfNames] invoke printf,"%s" ,"Cantidad de funciones exportadas: " invoke printf,"%d",[NumberOfNames] invoke printf,Espacio invoke printf,Espacio invoke printf,"Funciones exportadas: " invoke printf,Espacio mov edi, [AddressOfNames] add edi,[LibHandle] .bucle: dec ebx mov eax, [edi + ebx * 4] add eax,[LibHandle] invoke printf,"-%s",eax invoke printf,Espacio cmp ebx,0 jne .bucle pop ecx edi edx ebx ret .Error: ret endp proc ListarImport,FHandle push eax ebx edi mov ebx,[FHandle] add ebx,dword[ebx+03ch] mov ebx,dword[ebx+80h] add ebx,[FHandle] xor edi,edi .bucle: mov eax,dword[ebx+0ch] add eax,[FHandle] .if eax = [FHandle] invoke printf,"Cantidad de librerias importadas: %d",edi invoke printf,Espacio ret .else inc edi invoke printf,"%s",eax invoke printf,Espacio .endif add ebx,14h jmp .bucle pop edi ebx eax ret endp .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
Mensajes: 965
I'm you
|
Ordenando el codigo de a poco. format pe console include 'win32ax.inc' .data Espacio equ 13,10,0 ;Para pasar a una nueva linea. RutaArchivo rb MAX_PATH ;Variable para guardar la ruta de el archivo PunteroPEheader dd ? ; Puntero de el Pe header Logo db ' ===================================',13,10 ; LOGO PRINCIPAL db ' = PE visor by YST =',13,10 db ' ===================================',13,10,0 LogoGeneral db ' ===================================',13,10 ; LOGO GENERAL db ' = General =',13,10 db ' ===================================',13,10,0 LogoSecciones db ' ===================================',13,10 db ' = Secciones =',13,10 ;LOGO DE INFO DE LAS SECCIONES db ' ===================================',13,10,0 LogoExport db ' ===================================',13,10 db ' = Export data =',13,10 ;LOGO DE INFO DE el Export data db ' ===================================',13,10,0 FHandle dd ? ; MZ de el archivo .code start: invoke system,"color 3" ;Ponemos el color de texto invoke printf,Logo ;Imprimimos el logo invoke printf,Espacio ;Ponemos dos nuevas lineas. invoke printf,Espacio invoke printf,"Inserte la ruta de el archivo a examinar:" ; Preguntamos el archivo invoke printf,Espacio invoke scanf,"%s",RutaArchivo ;Obtenemos la ruta de el archivo invoke LoadLibrary,RutaArchivo ;Cargamos el archivo .if eax = 0 ; Si hay error invoke printf,"Hubo un error al cargar el archivo." ;Mostramos el error . invoke ExitProcess,0 ; Nos salimos. .else ; De lo contrario .if word[eax] = "MZ" ; Si los primeros 2 bytes son igual a MZ mov [FHandle],eax ; Guardamos el MZ en FHandle .else ; De lo contrario invoke printf,"Ingrese un archivo valido." ;Mostramos el error . invoke ExitProcess,0 ; Nos salimos. .endif ; Terminamos los if .endif add eax,dword[eax+03ch] ; Guardamos en eax la direccion de el PE header .if word[eax] = "PE" ; Si los primeros 2 bytes son igual a PE mov [PunteroPEheader],eax ; Guardamos el puntero de el PE header en PunteroPEheader .else ; De lo contrario invoke printf,"No se a detectado PE header." ;Mostramos el error . invoke ExitProcess,0 ; Nos salimos. .endif ; Terminamos los if .endif invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,LogoGeneral ;Imprimimos el logo de la informacion general. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. mov ebx,[FHandle] mov ebx,dword[ebx+03ch] invoke printf,"La posicion de el PE header es : 0x%x" ,ebx ;Mostramos la direccion de el PE header invoke printf,Espacio ; Pasamos a la siguiente linea. add ebx,[FHandle]; Le sumamos a la posicion de el PE header el MZ para pasar a el puntero de el PE header invoke printf,"TimeDateStamp: 0x%x " ,dword[ebx+08h] ; Imprimimo el TimeDateStamp invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"SizeOfCode: 0x%x " ,dword[ebx+1ch] ; Imprimimo el SizeOfCode invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"AddressOfEntrPoint: 0x%x " ,dword[ebx+28h] ; Imprimimo el AddressOfEntrPoint invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"ImageBase: 0x%x " ,dword[ebx+34h] ; Imprimimo el ImageBase invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"SizeOfImage: 0x%x " ,dword[ebx+50h] ; Imprimimo el SizeOfImage invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"SizeOfHeaders: 0x%x " ,dword[ebx+54h] ; Imprimimo el SizeOfHeaders invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"CheckSum: 0x%x " ,dword[ebx+58h] ; Imprimimo el CheckSum invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"Subsystem: " ;Imprimimos el Subsystem .if dword[ebx+5Ch] = 2h ;SI es GUI invoke printf,"Windows GUI" ; Imprimimos Windows GUI .else ; De lo contrario es CUI (Consola) invoke printf,"Windows CUI" ; Imprimimos Windows CUI .endif ;Terminamos el if invoke printf,Espacio ; Pasamos a la siguiente linea. stdcall EOFExtraDataExtract,[FHandle] invoke printf,"Posicion de el EOF: 0x%x",eax ;Imprimimos la posicion de el EOF invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,LogoSecciones ;Imprimimos el logo de la informacion de las secciones. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. mov esi,[PunteroPEheader] ;Movemos el puntero de el PE Header a esi. movzx ebx,word[esi+06h] ; Guardamos la cantidad de secciones en ebx. invoke printf,"Numero de secciones: %d",ebx ;Imprimimos la cantidad de secciones. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. .bucleImprimeSecciones: ; Bucle que imprime secciones dec ebx ;Les restamos uno a ebx mov eax,28h ;Hacemos que eax sea igual a $28 mul ebx ;Multiplicamos ebx add eax,0xf8 ;Le sumamos $F8 ( $F8 = START OF SECTION TABLE ) add eax,esi ;Le agregamos al resultado de la multiplicacion el puntero de el PE header mov edi,eax ;Guardamos eax en edi invoke printf,"Name: %s",edi ;Imprimimos el nombre de la sección. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"virtual address: 0x%x",dword[edi+0ch] ;Imprimimos el virtual address invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"VirtualSize: 0x%x",dword[edi+08h] ;Imprimimos el VirtualSize invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"SizeOfRawData: 0x%x",dword[edi+10h] ; Imprimimos el SizeOfRawData invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"pointerToRawData : 0x%x",dword[edi+14h] ;Imprimimos el pointerToRawData invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"Characteristics: 0x%x",dword[edi+24h] ;Imprimimos las Characteristics invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,Espacio ; Pasamos a la siguiente linea cmp ebx,0 jne .bucleImprimeSecciones ; Si no se an imprimido todas las secciones saltamos a lña etiqueta .bucleImprimeSecciones . invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,LogoExport ;Imprimimos el logo de la informacion de el export data. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. .if dword[esi+078h] = 0 ; Si no hay export data invoke printf,"No se exporta ninguna funcion." invoke printf,Espacio ; Pasamos a la siguiente linea. .else mov ebx,dword[esi+078h] add ebx,[FHandle] invoke printf,"Cantidad de funciones exportadas: %d",dword[ebx+18h] ;Imprimimo la cantidad de funciones exportadas. invoke printf,Espacio ; Pasamos a la siguiente linea. + mov edi,dword[ebx+20h] ;AddressOfNames add edi,[FHandle] mov ebx,dword[ebx+18h] ;Numero de exports invoke printf,"Funciones exportadas: " invoke printf,Espacio .bucleExportData: ;Bucle para imprimir la export data dec ebx mov eax, [edi + ebx * 4] add eax,[FHandle] invoke printf,"-%s",eax invoke printf,Espacio cmp ebx,0 jne .bucleExportData ;Si no se an imprimido todas seguimos .endif invoke system,"pause" invoke ExitProcess,0 proc EOFExtraDataExtract,FHandle ;Funcion para extraer el EOF push esi ebx mov eax,[FHandle] mov esi,dword[eax+03ch] ;Offset to start of PE header add esi,eax movzx ebx, word[esi+06h] ;Number Of Sections dec ebx mov eax,28h mul ebx add esi,0xf8 ;START OF SECTION TABLE add esi,eax mov eax,dword[esi+10h] ;SizeOfRawData add eax,dword[esi+14h] ;pointerToRawData pop ebx esi ret endp .end start 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
Mensajes: 965
I'm you
|
Se actualiza el visor pe , ahora listando el import data format pe console include 'win32ax.inc' .data Espacio equ 13,10,0 ;Para pasar a una nueva linea. RutaArchivo rb MAX_PATH ;Variable para guardar la ruta de el archivo PunteroPEheader dd ? ; Puntero de el Pe header Logo db ' ===================================',13,10 ; LOGO PRINCIPAL db ' = PE visor by YST =',13,10 db ' ===================================',13,10,0 LogoGeneral db ' ===================================',13,10 ; LOGO GENERAL db ' = General =',13,10 db ' ===================================',13,10,0 LogoSecciones db ' ===================================',13,10 db ' = Secciones =',13,10 ;LOGO DE INFO DE LAS SECCIONES db ' ===================================',13,10,0 LogoExport db ' ===================================',13,10 db ' = Export data =',13,10 ;LOGO DE INFO DE el Export data db ' ===================================',13,10,0 LogoImport db ' ===================================',13,10 db ' = Import data =',13,10 ;LOGO DE INFO DE el import data db ' ===================================',13,10,0 FHandle dd ? ; MZ de el archivo .code start: invoke system,"color 3" ;Ponemos el color de texto invoke printf,Logo ;Imprimimos el logo invoke printf,Espacio ;Ponemos dos nuevas lineas. invoke printf,Espacio invoke printf,"Inserte la ruta de el archivo a examinar:" ; Preguntamos el archivo invoke printf,Espacio invoke scanf,"%s",RutaArchivo ;Obtenemos la ruta de el archivo invoke LoadLibrary,RutaArchivo ;Cargamos el archivo .if eax = 0 ; Si hay error invoke printf,"Hubo un error al cargar el archivo:" ;Mostramos el error . invoke printf,RutaArchivo invoke ExitProcess,0 ; Nos salimos. .else ; De lo contrario .if word[eax] = "MZ" ; Si los primeros 2 bytes son igual a MZ mov [FHandle],eax ; Guardamos el MZ en FHandle .else ; De lo contrario invoke printf,"Ingrese un archivo valido." ;Mostramos el error . invoke ExitProcess,0 ; Nos salimos. .endif ; Terminamos los if .endif add eax,dword[eax+03ch] ; Guardamos en eax la direccion de el PE header .if word[eax] = "PE" ; Si los primeros 2 bytes son igual a PE mov [PunteroPEheader],eax ; Guardamos el puntero de el PE header en PunteroPEheader .else ; De lo contrario invoke printf,"No se a detectado PE header." ;Mostramos el error . invoke ExitProcess,0 ; Nos salimos. .endif ; Terminamos los if .endif invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,LogoGeneral ;Imprimimos el logo de la informacion general. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. mov ebx,[FHandle] mov ebx,dword[ebx+03ch] invoke printf,"La posicion de el PE header es : 0x%x" ,ebx ;Mostramos la direccion de el PE header invoke printf,Espacio ; Pasamos a la siguiente linea. add ebx,[FHandle]; Le sumamos a la posicion de el PE header el MZ para pasar a el puntero de el PE header invoke printf,"TimeDateStamp: 0x%x " ,dword[ebx+08h] ; Imprimimo el TimeDateStamp invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"SizeOfCode: 0x%x " ,dword[ebx+1ch] ; Imprimimo el SizeOfCode invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"AddressOfEntrPoint: 0x%x " ,dword[ebx+28h] ; Imprimimo el AddressOfEntrPoint invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"ImageBase: 0x%x " ,dword[ebx+34h] ; Imprimimo el ImageBase invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"SizeOfImage: 0x%x " ,dword[ebx+50h] ; Imprimimo el SizeOfImage invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"SizeOfHeaders: 0x%x " ,dword[ebx+54h] ; Imprimimo el SizeOfHeaders invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"CheckSum: 0x%x " ,dword[ebx+58h] ; Imprimimo el CheckSum invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"Subsystem: " ;Imprimimos el Subsystem .if dword[ebx+5Ch] = 2h ;SI es GUI invoke printf,"Windows GUI" ; Imprimimos Windows GUI .else ; De lo contrario es CUI (Consola) invoke printf,"Windows CUI" ; Imprimimos Windows CUI .endif ;Terminamos el if invoke printf,Espacio ; Pasamos a la siguiente linea. stdcall EOFExtraDataExtract,[FHandle] invoke printf,"Posicion de el EOF: 0x%x",eax ;Imprimimos la posicion de el EOF invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,LogoSecciones ;Imprimimos el logo de la informacion de las secciones. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. mov esi,[PunteroPEheader] ;Movemos el puntero de el PE Header a esi. movzx ebx,word[esi+06h] ; Guardamos la cantidad de secciones en ebx. invoke printf,"Numero de secciones: %d",ebx ;Imprimimos la cantidad de secciones. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. .bucleImprimeSecciones: ; Bucle que imprime secciones dec ebx ;Les restamos uno a ebx mov eax,28h ;Hacemos que eax sea igual a $28 mul ebx ;Multiplicamos ebx add eax,0xf8 ;Le sumamos $F8 ( $F8 = START OF SECTION TABLE ) add eax,esi ;Le agregamos al resultado de la multiplicacion el puntero de el PE header mov edi,eax ;Guardamos eax en edi invoke printf,"Name: %s",edi ;Imprimimos el nombre de la sección. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,"virtual address: 0x%x",dword[edi+0ch] ;Imprimimos el virtual address invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"VirtualSize: 0x%x",dword[edi+08h] ;Imprimimos el VirtualSize invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"SizeOfRawData: 0x%x",dword[edi+10h] ; Imprimimos el SizeOfRawData invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"pointerToRawData : 0x%x",dword[edi+14h] ;Imprimimos el pointerToRawData invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,"Characteristics: 0x%x",dword[edi+24h] ;Imprimimos las Characteristics invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,Espacio ; Pasamos a la siguiente linea invoke printf,Espacio ; Pasamos a la siguiente linea cmp ebx,0 jne .bucleImprimeSecciones ; Si no se an imprimido todas las secciones saltamos a lña etiqueta .bucleImprimeSecciones . invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,LogoExport ;Imprimimos el logo de la informacion de el export data. invoke printf,Espacio ; Pasamos a la siguiente linea. invoke printf,Espacio ; Pasamos a la siguiente linea. .if dword[esi+078h] = 0 ; Si no hay export data invoke printf,"[+]No se exporta ninguna funcion." invoke printf,Espacio ; Pasamos a la siguiente linea. .else mov ebx,dword[esi+078h] add ebx,[FHandle] invoke printf,"Cantidad de funciones exportadas: %d",dword[ebx+18h] ;Imprimimo la cantidad de funciones exportadas. invoke printf,Espacio ; Pasamos a la siguiente linea. + mov edi,dword[ebx+20h] ;AddressOfNames add edi,[FHandle] mov ebx,dword[ebx+18h] ;Numero de exports invoke printf,"Funciones exportadas: " invoke printf,Espacio .bucleExportData: ;Bucle para imprimir la export data dec ebx mov eax, [edi + ebx * 4] add eax,[FHandle] invoke printf,"[+]%s",eax invoke printf,Espacio cmp ebx,0 jne .bucleExportData ;Si no se an imprimido todas seguimos .endif invoke printf,LogoImport invoke printf,Espacio invoke printf,Espacio mov eax,[PunteroPEheader] .if dword[eax+80h] = NULL ;Si no importamos ninguna funcion. invoke printf,"[+]No importa ninguna funcion." .else;De lo contrario stdcall Sacaimport,[FHandle] .endif invoke system,"pause" invoke ExitProcess,0 proc EOFExtraDataExtract,FHandle ;Funcion para extraer el EOF push esi ebx mov eax,[FHandle] mov esi,dword[eax+03ch] ;Offset to start of PE header add esi,eax movzx ebx, word[esi+06h] ;Number Of Sections dec ebx mov eax,28h mul ebx add esi,0xf8 ;START OF SECTION TABLE add esi,eax mov eax,dword[esi+10h] ;SizeOfRawData add eax,dword[esi+14h] ;pointerToRawData pop ebx esi ret endp proc Sacaimport ,handle locals Export dd ? endl pushad mov eax,[handle] mov ebx,dword[eax+03ch] add ebx,eax mov ebx,dword[ebx+80h] add ebx,eax mov [Export],ebx .buclelib: mov ebx,[Export] mov edi,dword[ebx+0ch] cmp edi,0 je .salir add edi,[handle] invoke printf,"- Funciones de %s: ",edi invoke printf,"%s",Espacio xor esi,esi mov esi,dword[ebx] add esi,[handle] mov edi,esi xor ebx,ebx .bucleapi: xor esi,esi mov esi,dword[edi+ebx] cmp esi,0 je .otralib add esi,[handle] add esi,2h invoke printf," [*]%s",esi invoke printf,"%s",Espacio add ebx,04h jmp .bucleapi .otralib: add [Export] ,14h jmp .buclelib .salir: popad ret endp .end start 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
Mensajes: 789
[Beyond This Life]
|
Muy bueno, si señor, será muy util este code. Gracias por el aporte . salu2
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
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 .
|
|
« Ú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
|
|
|
|
|