Autor
|
Tema: SRCs de YST. (Leído 40,100 veces)
|
YST
Desconectado
Mensajes: 965
I'm you
|
Volvi a mejorar un poco el source : format pe console espacio equ 13,10,0 include 'win32ax.inc' .data RutaLib rb MAX_PATH RutaINC rb MAX_PATH .code start: invoke printf,"Ingrese la ruta de la libreria:" invoke printf,espacio invoke scanf,"%s",RutaLib invoke printf,"Ingrese la ruta de la donde se generara el include:" invoke printf,espacio invoke scanf,"%s",RutaINC stdcall CrearImport,RutaLib,RutaINC invoke ExitProcess,0 proc CrearImport,NombreLIB,NombreImport locals DirPEHeader dd ? PunteroPEHeader dd ? RVAofExportDirectory dd ? NumberOfNames dd ? AddressOfNames dd ? Funcion dd ? HFile dd ? Nosirve dd ? Largo dd ? LibHandle dd ? endl push ebx edx edi ecx invoke LoadLibrary, [NombreLIB] mov [LibHandle],eax 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] mov edi, [AddressOfNames] add edi,[LibHandle] invoke CreateFileA, [NombreImport], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 mov [HFile], eax invoke lstrlen,"import " invoke WriteFile, [HFile], "import ",eax,addr Nosirve, NULL invoke lstrlen,[NombreLIB] sub eax,4 invoke WriteFile, [HFile], [NombreLIB],eax,addr Nosirve, NULL invoke WriteFile,[HFile] , ",\",2,addr Nosirve, NULL invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL .bucle: dec ebx mov eax, [edi + ebx * 4] add eax,[LibHandle] mov [Funcion],eax invoke lstrlen, [Funcion] invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL invoke WriteFile, [HFile],",",1,addr Nosirve, NULL invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL invoke lstrlen, [Funcion] invoke WriteFile, [HFile], [Funcion],eax,addr Nosirve, NULL .if ebx = 0 invoke WriteFile, [HFile],"'",1,addr Nosirve, NULL .else invoke WriteFile, [HFile],"',\",3,addr Nosirve, NULL invoke WriteFile, [HFile], espacio,2,addr Nosirve, NULL .endif cmp ebx,0 jne .bucle invoke CloseHandle, [HFile] invoke system,"cls" invoke printf,"Extraida las funciones de: " invoke printf,RutaLib invoke printf,espacio invoke printf,espacio invoke printf,"El include ah sido generado en : " invoke printf,RutaINC invoke printf,espacio invoke printf,espacio invoke printf,"Con " invoke printf,"%d",[NumberOfNames] invoke printf," funciones extraidas." invoke printf,espacio invoke system,"pause" pop ecx edi edx ebx ret .Error: invoke system,"cls" invoke printf,"Ocurrio un error durante la extracciòn." invoke printf,espacio invoke system,"pause" ret endp .end start
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
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
Perdon, movs es para strcpy, en este caso queremos stos: 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.
|
|
« Ú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
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Muchas gracias Estaba cansado de tener que hacer los Imports a mano cuando no estaban declaradas algunas APIs
|
|
|
En línea
|
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
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
|
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
Una forma de obtener el handle de la kernel32 ( fuente: hackhound.org ): mov eax, [fs:30h] mov eax, [eax + 0ch] mov esi, [eax + 1ch] lodsd 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
Kernel coder
Moderador
Desconectado
Mensajes: 5.937
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 965
I'm you
|
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. 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
|
|
|
|
|