Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Riki_89D en 3 Enero 2010, 18:37 pm



Título: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 3 Enero 2010, 18:37 pm
Hola que tal???


estoi investigando sobre las funciones CreateFile y WriteFile,necesito saver 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


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] 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


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D 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 :(


Título: Re: Funcion WriteFile (ASM)
Publicado por: YST en 3 Enero 2010, 19:25 pm
Lo ves con un editor hexadecimal sacas la posicion y escribes en esa :P


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D 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


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] 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


Título: Re: Funcion WriteFile (ASM)
Publicado por: YST 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


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D 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



Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D 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 :(



Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] 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


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 4 Enero 2010, 13:46 pm
Hola gracias pro contestar,algfinal el code queda asin:
Código:
.386
.model flat,stdcall
.stack 100h
option casemap:none
include Tot.inc

.data

Fil db 'men.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,ebx,addr lpBuffer,eax,addr dwBytes,0
mov eax,lpBuffer
mov dword ptr ds:[eax+2048h],"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

no me da eeror al ensamblarlo peor cuando lo ejecuto me sale un eeror de windows de esos que dice Windows detecto un problema i debe cerrarse,por lo que no me modifica aun el ejecutable men.exe ppffff esto parece imposible,no pensava k fuera tan dificil,alomeujor no uso bien el editor Hexa para ver el offset donde esta la cadena que quiero modificar,uso el WinHex,con el abro el ejecutable men.exe,busco la cadena que quiero modificar i al lado me sale el  offset: 0002048

que puedo hacer???

gracias de antemano


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 4 Enero 2010, 15:57 pm
Hola gracias pro contestar,algfinal el code queda asin:
Código:
.386
.model flat,stdcall
.stack 100h
option casemap:none
include Tot.inc

.data

Fil db 'men.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,ebx,addr lpBuffer,eax,addr dwBytes,0
mov eax,lpBuffer
mov dword ptr ds:[eax+2048h],"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

no me da eeror al ensamblarlo peor cuando lo ejecuto me sale un eeror de windows de esos que dice Windows detecto un problema i debe cerrarse,por lo que no me modifica aun el ejecutable men.exe ppffff esto parece imposible,no pensava k fuera tan dificil,alomeujor no uso bien el editor Hexa para ver el offset donde esta la cadena que quiero modificar,uso el WinHex,con el abro el ejecutable men.exe,busco la cadena que quiero modificar i al lado me sale el  offset: 0002048

que puedo hacer???

gracias de antemano


Tienes varios errores:

1) La variable lpBuffer es muy pequeña

lpBuffer dd ?

si quieres usar la variable buffer de tan solo 4bytes deberias en ella almacenar un puntero a una direccion de memoria reservada para datos creada con GlobalAlloc, pasando como parametro el tamaño que obtienes con GetFileSize. asi no deberia de dar problemas.

2) Tratas de escribir el una direccion de memoria que seguramente no tienes permisos.

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

Como te dije lpBuffer solo tiene 4 bytes... cuando dices que quieres escribir "Bye" en la direccion que esta a 2048h bytes de distancia no sabes en que direccion estas tratando de escribir. no se si me doy a entender. si la variable lpBuffer tuviera como minimo ese desplazamiento que propones mas 4 bytes seria posible, de lo contrario no.


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 4 Enero 2010, 18:28 pm
Hola R.N.A,gracias por tu respuesta

y si que te explikas bn,soy yo k no me enterono entendi mucho lo que dijiste,ya me save mal i todo preguntaros tanto pero es que me urge lograr eso,podrias poner el codigo tal i como seria para que funcionara???


es k yo no entendi mucho lo que debo hacer segun tu :S:S:S:S

me arias un grandisimo favor!!


salu2 amigo!


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 4 Enero 2010, 18:34 pm
Código
  1. .386
  2. .model flat,stdcall
  3. .stack 100h
  4. option casemap:none
  5. include Tot.inc
  6.  
  7. .data
  8.  
  9. Fil db 'men.exe',0
  10.  
  11. .data?
  12.  
  13. lpBuffer dd ?
  14. dwBytes dd ?
  15.  
  16.  
  17. .code
  18. start:
  19.  
  20. invoke CreateFile,offset Fil,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
  21. push eax
  22. invoke GetFileSize,eax,0
  23. pop ebx ;ebx=Handle Archivo
  24. push ebx
  25. push eax
  26. mov edx, eax
  27. invoke GlobalAlloc,GPTR,eax
  28. invoke ReadFile,ebx,eax,edx,addr dwBytes,0
  29. mov dword ptr ds:[eax+2048h],"Bye"
  30. pop ecx ;ecx=Tamaño archivo
  31. pop ebx ;ebx=Handle Archivo
  32. push ebx
  33. invoke WriteFile,ebx,eax,ecx,addr dwBytes,0
  34. pop ebx
  35. invoke CloseHandle,ebx
  36.  
  37. invoke ExitProcess,0
  38.  
  39. end start

Ese codigo deberia de funcionar...


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 4 Enero 2010, 18:40 pm
Ensamblar me lo ensambla i obtengo el EXE,peor me sale el maldito error: pro.exe ha detectado un problema y debe cerrarse,por que pasa eso?

puede ser eso que decias de los permisos??

como puedo solucionar eso si es el caso??



gracias por el code ;) ere sun crack!


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 4 Enero 2010, 18:55 pm
Ensamblar me lo ensambla i obtengo el EXE,peor me sale el maldito error: pro.exe ha detectado un problema y debe cerrarse,por que pasa eso?

puede ser eso que decias de los permisos??

como puedo solucionar eso si es el caso??



gracias por el code ;) ere sun crack!

Verifica el tamaño del archivo... creo que el problema aun reside en que estas excediendo el lugar donde puedes escribir.

Si  tienes un Debugger ejecuta el programa instruccion por instruccion y dinos en que lugar falla


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 4 Enero 2010, 19:02 pm
El tamaño del programa que modifica el otro exe es de 2,50 kb (2.560 bytes)
i el del ejeutable que sesupone sera modificado es del mimso tamaño :S


i lo del debugger lo probare aver,puede ser eso del tamaño???


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] en 4 Enero 2010, 20:08 pm
Código
  1. .386
  2. .model flat,stdcall
  3. .stack 100h
  4. option casemap:none
  5. include Tot.inc
  6.  
  7. .data
  8.  
  9. Fil db 'men.exe',0
  10.  
  11. .data?
  12.  
  13. lpBuffer dd ?
  14. dwBytes dd ?
  15.  
  16.  
  17. .code
  18. start:
  19.  
  20. invoke CreateFile,offset Fil,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0
  21. push eax
  22. invoke GetFileSize,eax,0
  23. pop ebx ;ebx=Handle Archivo
  24. push ebx
  25. push eax
  26. mov edx, eax
  27. invoke GlobalAlloc,GPTR,eax
  28. invoke ReadFile,ebx,eax,edx,addr dwBytes,0
  29. mov dword ptr ds:[eax+2048h],"Bye"
  30. pop ecx ;ecx=Tamaño archivo
  31. pop ebx ;ebx=Handle Archivo
  32. push ebx
  33. invoke WriteFile,ebx,eax,ecx,addr dwBytes,0
  34. pop ebx
  35. invoke CloseHandle,ebx
  36.  
  37. invoke ExitProcess,0
  38.  
  39. end start

Ese codigo deberia de funcionar...

Tiene un error ese código:
Código
  1. invoke GlobalAlloc,GPTR,eax
  2. invoke ReadFile,ebx,eax,edx,addr dwBytes,0
  3. mov dword ptr ds:[eax+2048h],"Bye"
  4.  

Al llamar a ReadFile, el valor de eax se sobreescribe con el retorno de esa API. Prueba así:

Código
  1. invoke GlobalAlloc,GPTR,eax
  2. push eax
  3. invoke ReadFile,ebx,eax,edx,addr dwBytes,0
  4. pop eax
  5. mov dword ptr ds:[eax+2048h],"Bye"
  6.  

Saludos



Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 4 Enero 2010, 20:42 pm
Hola hacker_Zero acao de probar tu code i ensambla bien pero cuanod ejectuo aun me aparece el Hijo**** del error,el de que se encontro un eeror i debe cerrarse :(

me estoi cacho desanimado :(



es impobile!!!!

:(

poniendo el siguiente code:
Código:
.386
.model flat,stdcall
.stack 100h
option casemap:none
include Tot.inc
 
.data
 
Fil db 'C:\masm32\men.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
mov edx, eax
invoke GlobalAlloc,GPTR,eax
push eax
invoke ReadFile,ebx,eax,edx,addr dwBytes,0
pop eax
mov dword ptr ds:[eax+800h],"Bye"
pop ecx ;ecx=Tamaño archivo
pop ebx ;ebx=Handle Archivo
push ebx
invoke WriteFile,ebx,eax,ecx,addr dwBytes,0
pop ebx
invoke CloseHandle,ebx
 
invoke ExitProcess,0
 
end start

aveces me da error aveces no,i una vez me a modificado el otro exe,pero cuando e ejecutado el otro exe se abria unaventana ms-dos i me decia porgrama demasiado extenso para colocarlo en meoria :S


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 4 Enero 2010, 21:05 pm
quita la parte que dice  .stack 100h y prueba a  ver... pasaste el debugger?


Título: Re: Funcion WriteFile (ASM)
Publicado por: YST en 4 Enero 2010, 21:09 pm
Mejor que nada por que no debuggear como dice RNA ?

Te digo por experiencia si no quieres demorarte 3 años en encontrar cada error tienes que debuggear :P


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 4 Enero 2010, 21:18 pm
Pues nada quitando el Stack no funciono comop puedo debuggeear,el MASM32 lleva algo para hacerlo??

nunca lo hice,salu2


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 4 Enero 2010, 21:19 pm
OllyDbg... existen muchos manuales en la zona de ingenieria inversa.


Título: Re: Funcion WriteFile (ASM)
Publicado por: bizco en 4 Enero 2010, 22:49 pm
GlobalAlloc te modifica edx. no estaria de mas que verificaras que el resultado de las funciones son los esperados y no tendrias estos problemas.

yo usaria createfile,createfilemapping,mapviewoffile y con rep mov* copias lo que necesites directamente.


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 5 Enero 2010, 17:22 pm
Bueno encontre un codigo en donde decian que al utilizar CreateFIleMapping
MapViewOfFile,

si no boi mal serviria para poner en memoria el ejecutable en question (memoria compartida) i entonces lo podria modificar i escribir con WriteFile,si me equivoco corriganme porfavor,


este es el code que sesupone pone al ejecutable que quiero modificar en memoria:
Código
  1. .386
  2. .model flat,stdcall
  3. .stack 200h
  4.  
  5. option casemap:none
  6. include Tot.inc
  7.  
  8. .data
  9.  
  10. Fil db 'C:\masm32\men.exe',0
  11.  
  12. .data?
  13. tam db 32 dup(?)
  14.  
  15.  
  16. .code
  17. start:
  18.  
  19. invoke CreateFile,offset Fil,GENERIC_WRITE+GENERIC_READ,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0
  20. push eax
  21. invoke GetFileSize,eax,0
  22. push eax
  23. pop eax; Tam
  24. pop ebx; Handle
  25. invoke CreateFileMapping,ebx,0,PAGE_READWRITE,0,eax,0
  26. mov ecx,eax   ;ecx = mapp
  27.  
  28. invoke MapViewOfFile,ecx,FILE_MAP_ALL_ACCESS,0,0,0
  29. mov edx,eax
  30.  
  31. invoke ExitProcess,0
  32.  
  33. end start
  34.  

nose si estara bien

despues de eso como escribo en el????

quitar el archivo de la memoria ya lo se hacer solo necesito escribir en el,si saveis de alguna solucion mas no sera mal muchas gracias expertos


Título: Re: Funcion WriteFile (ASM)
Publicado por: bizco en 5 Enero 2010, 23:27 pm
mov [edx+offset],datos o rep o de la forma que mas te guste.


Título: Re: Funcion WriteFile (ASM)
Publicado por: YST en 5 Enero 2010, 23:45 pm
Código
  1. push eax
  2. pop eax

Para que haces eso?


y para evitar ese
Código
  1. push eax
  2. ...
  3. pop ebx

Vale un mov ebx,eax


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 6 Enero 2010, 01:10 am
Y aun no puedes modificar el archivo con WriteFile o con MapViewOfFile?


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 13:35 pm
POR FINNNNNNNNNNNNNNNNNNNNNNNNNNN!!!


Finalmente me modifica el exe i no me da errores todo perfecto!! :D:D:DD:


les dejo el code pro que os lo mereceis que soys unos cracks de verdad!! sabia k podia confian en bosotros en todos los que me abeis ayudado mucha sgracias de verdad!!
Código
  1. .386
  2. .model flat,stdcall
  3. .stack 200h
  4.  
  5. option casemap:none
  6. include Tot.inc
  7.  
  8. .data
  9.  
  10. Fil db 'C:\masm32\men.exe',0
  11.  
  12.  
  13. .data?
  14. tam db 32 dup(?)
  15.  
  16.  
  17. .code
  18. start:
  19.  
  20. invoke CreateFile,offset Fil,GENERIC_WRITE+GENERIC_READ,FILE_SHARE_READ+FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0
  21. push eax
  22. invoke GetFileSize,eax,0
  23. push eax
  24. pop eax; Tam
  25. add eax,eax
  26. pop ebx; Handle
  27. invoke CreateFileMapping,ebx,0,PAGE_READWRITE,0,eax,0
  28. mov ecx,eax   ;ecx = mapp
  29.  
  30. invoke MapViewOfFile,ecx,FILE_MAP_ALL_ACCESS,0,0,0
  31. mov edx,eax
  32.  
  33. mov dword ptr ds:[edx+800h],'jej'
  34.  
  35. invoke ExitProcess,0
  36.  
  37. end start
  38.  


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] en 6 Enero 2010, 13:47 pm
Si lo mapeas en memoria, al cambiar los datos en memoria ya se guardan automáticamente en disco.

Con WriteFile, había editado mi post corrgiendo mi code, creo que debería de funcionar  :P.

Saludos


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 13:53 pm
Hacker_Zero acabo de probar i si me modifica peor me surgio una cosa,el exe a modificar mostraba Riki  (por un messagebox) kuando lo modifico i por ejemplo pongo Sandra me muestra Sandra pero al reves xd por k pasa eso?? osea me muestra ardnaS


i otra cosa en esta linea:

mov dword ptr ds:[edx+800h],'Sandra'

no me dejsa escribi mucho no puedo poner por ejemplo que escriba Hola mundo!! me dice que es muy largo creo :S:S

por que pasa eso??


salu2


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] en 6 Enero 2010, 14:11 pm
Jajajaja, eso es porque windows utiliza little-endian para guardar los archivos en disco, deberás guardarlos al revés, creo que YST hizo un strreverse  :xD. La otra opción más profesional es mapear el archivo en memoria como lo estabas haciendo, de esa forma deberia de guardarse correctamente.

Para lo de guardar datos largos, es que un dword son 4 bytes, no puedes hacer un mov de más de 4 bytes, deberás hacer un bucle e ir moviendo de 4 en 4 o usar RtlMoveMemory.

Saludos


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 14:15 pm
OK no kuesta tanto escribir al reves xdxd i lo de rtlMoveMemory como lo utlilizo??? por que en vez de dword no puedo pponer otra cosa??


salu2


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] en 6 Enero 2010, 14:28 pm
RtlMoveMemory la puedes importar de la kernel32.dll (forward) o de la ntdll.dll. Es sencillo su uso (http://msdn.microsoft.com/en-us/library/ms803004.aspx). Tambien creo recordar que en éste subforo había un hilo sobre emulaciones de ésta API, incluso YST la usa en sus códigos frecuentemente  :P.

Saludos


Título: Re: Funcion WriteFile (ASM)
Publicado por: bizco en 6 Enero 2010, 14:56 pm
rep movsb y copias todo lo que necesites, ya te lo dije antes.


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 6 Enero 2010, 15:17 pm
rep movsb y copias todo lo que necesites, ya te lo dije antes.

:¬¬ Ya el mueve, ahora esta la idiotez del Big-Endian, Little-Endian que no se a quien se le ocurrio hacerla


Título: Re: Funcion WriteFile (ASM)
Publicado por: bizco en 6 Enero 2010, 15:41 pm

Texto db "Texto que escribe",0

Código:
push edi
push esi
lea esi,Texto 
mov edi,eax   
mov ecx,12h
rep movsb
pop esi
pop edi

copiado sin problema alguno.


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 18:30 pm
Okey gracias,peor me lleve una sorpresa xd k ya me esperaba en el pc donde hago la modificacion me ve todo muy bien pero kaundo cambio de makina parece k no puedo modificar el exe,creo que cambia de direccion de memoria segun el pc :S


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 6 Enero 2010, 18:34 pm
Okey gracias,peor me lleve una sorpresa xd k ya me esperaba en el pc donde hago la modificacion me ve todo muy bien pero kaundo cambio de makina parece k no puedo modificar el exe,creo que cambia de direccion de memoria segun el pc :S


:¬¬ eso no deberia de suceder a menos que estes llamando las apis de manera HArdCodeadas


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 18:35 pm
Tienes razon,acabo de ver el offset del exe que modifico en otra pc distinta a la que me fucnciona i es el mismo no cambia :S:S


no entiendo :S

EI: juntando mensajes, Riki_89D no sos nuevo en el foro, usa el boton de modificar por favor.

a klaro ya sse por k pas ano es pro las API es por donde esta el exe a modificar que no me acorde de pnoer la ruta en mi ordenador xdxd


salu2


Título: Re: Funcion WriteFile (ASM)
Publicado por: [L]ord [R]NA en 6 Enero 2010, 18:46 pm
a klaro ya sse por k pas ano es pro las API es por donde esta el exe a modificar que no me acorde de pnoer la ruta en mi ordenador xdxd


salu2

Entoncs ya este post se puede catalogar como Solucionado


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 18:56 pm
Si solucionado gracias


Bueno una ultima cosa xd e porbadlo lo de:
Código:
push edi
push esi
lea esi,Texto 
mov edi,eax   
mov ecx,12h
rep movsb
pop esi
pop edi

Quiza lo ponga mal :S:S


done va ese code?


Título: Re: Funcion WriteFile (ASM)
Publicado por: bizco en 6 Enero 2010, 19:08 pm
ese code es para escribir, repasate el tema de los registros.


Título: Re: Funcion WriteFile (ASM)
Publicado por: Riki_89D en 6 Enero 2010, 19:13 pm
aa bueni si que me escribe pero una vez me a escrito el ejecutable no funciona i se abre una ventana MS-DOS


yo le quito este:
Código:
mov dword ptr ds:[edx+800h],'loP '

ya queno em deja copioar mas de 4b,i le pongo el tuyo pero nada :S





Título: Re: Funcion WriteFile (ASM)
Publicado por: bizco en 6 Enero 2010, 19:19 pm
el mio es un simple ejemplo. siendo ESI el registro origen, EDI el registro destino y ECX el contador..... no creo que tardes mas de 30 segundos en adaptarlo a tus necesidades.

add edi,offset ; edi apunta a ejecutable base + offset
lea esi,Texto  ; lo que necesites escribir
mov ecx,12h  ; logitud de los datos que se copian
rep movsb     ; copiar los datos.


Título: Re: Funcion WriteFile (ASM)
Publicado por: [Zero] en 6 Enero 2010, 19:41 pm
Fíjate de no copiar una cadena de longitud mayor a la original...

Saludos


Título: Re: Funcion WriteFile (ASM)
Publicado por: YST en 6 Enero 2010, 20:43 pm
El foro es para solucionar dudas basandose en que la persona tiene conocimientos basicos.

Te bloqueo el tema ya que antes de preguntar podrias leer algun libro de ASM , manuales ,codigos,etc.. ;)

Links que te dejo :

http://foro.elhacker.net/asm/entry_point-t256455.0.html
http://foro.elhacker.net/asm/programacion_en_lenguaje_ensamblador-t255444.0.html
http://www.google.cl/
http://msdn.microsoft.com/es-cl/default.aspx

Saludos