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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Funcion WriteFile (ASM)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Funcion WriteFile (ASM)  (Leído 16,106 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Funcion WriteFile (ASM)
« en: 3 Enero 2010, 18:37 pm »

Hola que tal???


estoi investigando sobre las funciones CreateFile y WriteFile,necesito saber como puedo escribir (mejor dicho substituir) la variable de un exe desde otro exe con Write File?? el valor de esa variable,no encontre nad por ai solo enseñan como funciona esa funcion pero no como para modificar la variable de un exe (un exe que seria echo pro mi en MASM tmb)



salu2


En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Funcion WriteFile (ASM)
« Respuesta #1 en: 3 Enero 2010, 19:06 pm »

 :rolleyes:. Que tipo de variable? Una cadena de caracteres? Supongo que será una que se guarde en el archivo en disco. Debes estudiarte bien el Formato PE para hacer esas cosas, si es para una cosa puntual puedes simplemente hardcodear la direccion y lo sobreescribes, primero llamas a CreateFile, luego a ReadFile, y cuando tengas el archivo en memoria te desplazas a donde está la variable que quieres cambiar, la cambias y luego guardas los cambios con WriteFile.

No entiendo del todo que es lo que quieres hacer  :P.

Saludos


En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Funcion WriteFile (ASM)
« Respuesta #2 en: 3 Enero 2010, 19:11 pm »

Perdona por no explicarme,

imaginate yo tengo esta "variable" definida:


Mensaje db 'Hola',0


pues desde otro exe quiero modificar ese mmm Bit xd o llamamosle variable,me podrias enseñar un pequeño ejemplo de como jhacerlo es que me vuelvo loco buscando i no encontre nada :(
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Funcion WriteFile (ASM)
« Respuesta #3 en: 3 Enero 2010, 19:25 pm »

Lo ves con un editor hexadecimal sacas la posicion y escribes en esa :P
En línea



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


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Funcion WriteFile (ASM)
« Respuesta #4 en: 3 Enero 2010, 19:27 pm »

Hola YESET


Quieres decir que con un editor Hexa puedo ver la posicion de memoria en donde esta la AVriable?? eso kieres decir?? i despues escribo en esa posicion cno Write File te refeires a eso???


perdonad mi ignoracnia
En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Funcion WriteFile (ASM)
« Respuesta #5 en: 3 Enero 2010, 19:28 pm »

A ver, lo primero sería abrir el ejecutable con un editor hexadecimal, como dice YST y ver donde empieza la cadena "Hola", una vez tengas la dirección, pongamos que por ejemplo es 0x220 sería algo como:

Código
  1. lpBuffer dd ?
  2. dwBytes dd ?
  3.  
  4. invoke CreateFileA,"C:\ElFichero.exe",GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
  5. push eax
  6. invoke GetFileSize,eax,0
  7. pop ebx ;ebx=Handle Archivo
  8. push ebx
  9. push eax
  10. invoke GlobalAlloc,GPTR,eax
  11. mov [lpBuffer],eax
  12. pop ecx
  13. pop ebx
  14. push ebx
  15. push ecx
  16. invoke ReadFile,ebx,[lpBuffer],ecx,addr dwBytes,0
  17. mov eax,[lpBuffer]
  18. mov dword ptr ds:[eax+0x220],"Bye" ;Si fueran más de 4 bytes tendrías que usar mCopyMemory, pero siempre sin superar el tamaño de la cadena original
  19. pop ecx ;ecx=Tamaño archivo
  20. pop ebx ;ebx=Handle Archivo
  21. push ebx
  22. ;Tal vez necesites llamar a SetFilePointer antes de escribir
  23. invoke WriteFile,ebx,[lpBuffer],ecx,addr dwBytes,0
  24. pop ebx
  25. invoke CloseHandle,ebx

Saludos
« Última modificación: 6 Enero 2010, 13:49 pm por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Funcion WriteFile (ASM)
« Respuesta #6 en: 3 Enero 2010, 19:29 pm »

Puedes ver la posicion en disco .

Sabes si quiera para que es la api WriteFile y si lo sabes explicalo a ver si tu concepto es correcto :P
En línea



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


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Funcion WriteFile (ASM)
« Respuesta #7 en: 3 Enero 2010, 19:47 pm »

Hola gracias pro el code tengo estto:
Código:
.386
.model flat,stdcall
.stack 100h
option casemap:none
include Tot.inc

.data

Fil db 'C:\A.exe',0

.data?

lpBuffer dd ?
dwBytes dd ?


.code
start:
 
invoke CreateFileA,offset Fil,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
push eax
invoke GetFileSize,eax,0
pop ebx ;ebx=Handle Archivo
push ebx
push eax
invoke ReadFile,ebx,addr lpBuffer,eax,addr dwBytes,0
mov eax,lpBuffer
mov dword ptr ds:[eax+0x220],"Bye"
pop ecx ;ecx=Tamaño archivo
pop ebx ;ebx=Handle Archivo
push ebx
invoke WriteFile,ebx,addr lpBuffer,ecx,addr dwBytes,0
pop ebx
invoke CloseHandle,ebx

invoke ExitProcess,0

end start

Eveidentemente con la direccion de memoria correspondiente i no esa,me sale un unico error,en la linea 28 en donde "mov dword ptr ds:[eax+0x220],"Bye" "

me dice esto:  missing operator in expression

En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Funcion WriteFile (ASM)
« Respuesta #8 en: 3 Enero 2010, 20:45 pm »

Finalmente resolvi el error pero no se modifica el otor archivoo :S:S



este es el code ahroaa
Código:
.386
.model flat,stdcall
.stack 100h
option casemap:none
include Tot.inc

.data

Fil db 'A.exe',0

.data?

lpBuffer dd ?
dwBytes dd ?


.code
start:
 
invoke CreateFile,offset Fil,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
push eax
invoke GetFileSize,eax,0
pop ebx ;ebx=Handle Archivo
push ebx
push eax
invoke ReadFile,eax,addr lpBuffer,eax,addr dwBytes,0
mov eax,lpBuffer
mov dword ptr ds:[eax+800h],"Bye"
pop ecx ;ecx=Tamaño archivo
pop ebx ;ebx=Handle Archivo
push ebx
invoke WriteFile,ebx,addr lpBuffer,ecx,addr dwBytes,0
pop ebx
invoke CloseHandle,ebx

invoke ExitProcess,0

end start

solo cambia la parte esta:


mov dword ptr ds:[eax+800h],"Bye"


si lo pongo asin no me da eeror pero el archivo A.exe no es modificado :(

En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: Funcion WriteFile (ASM)
« Respuesta #9 en: 3 Enero 2010, 23:12 pm »

Yo uso FASM, por lo que no hablo a ciencia cierta, pero creo que:
Código
  1. invoke CreateFile,offset Fil,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
  2.  

Esa lína está mal, Fil ya es un puntero, no es necesario el 'offset':
Código
  1. invoke CreateFile,Fil,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
  2.  

Me equivoqué, está bien tal como o pusiste, parece que FASM y MASM tratan a los punteros de formas opuestas sintácticamente  :xD.


Edito:

Además en el segundo code pusiste:
Código
  1. invoke ReadFile,eax,addr lpBuffer,eax,addr dwBytes,0
  2.  

en vez de:
Código
  1. invoke ReadFile,ebx,addr lpBuffer,eax,addr dwBytes,0
  2.  


Edito2: Corregí algunos errores que tenía mi code  :P.

Saludos
« Última modificación: 4 Enero 2010, 00:11 am por Hacker_Zero » En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines