Abril Negro 2008: Taller de ASM

Iniciado por ~~, 13 Abril 2008, 16:52 PM

0 Miembros y 1 Visitante están viendo este tema.

~~

Veo q has hecho progresos ^^ Si quieres dejar el código un poco más legible te recomiendo el uso de invoke para poder llamar a las apis como se haria en un lenguaje de alto nivel. Por ejemplo esto:
Código (asm) [Seleccionar]
push 0
push 0
push archivo
push web
push 0
call [Descargar]


Te quedaría así:
Código (asm) [Seleccionar]
invoke Descargar, 0, web, archivo, 0, 0
Mucho más legible :P
Salu2

krackwar

Cita de: E0N en  2 Mayo 2008, 00:54 AM
Veo q has hecho progresos ^^ Si quieres dejar el código un poco más legible te recomiendo el uso de invoke para poder llamar a las apis como se haria en un lenguaje de alto nivel. Por ejemplo esto:
Código (asm) [Seleccionar]
push 0
push 0
push archivo
push web
push 0
call [Descargar]


Te quedaría así:
Código (asm) [Seleccionar]
invoke Descargar, 0, web, archivo, 0, 0
Mucho más legible :P
Salu2
gracias por el consejo , pero lo hice asi por que no me quedaba bien claro lo de los push entonces para probar los hice de esta forma.
s4lu2!
Mi blog
Bienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.
El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.

krackwar

algo que me interesaria mucho saber es como se trabajo con archivos ,osea como en vb6 pongo:open "archivo " for bynary as #1 i asi puedo leer el archivo i luego ago un split para obtener informacion , osea lo que me interesa es como hacer un edit server pero que este en asm el "server"
Mi blog
Bienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.
El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.

~~

Pues usando el api como todo en asm :P Eso lo explicaré mas adelante, q no me das tiempo!!

Puedes usar CreateFile para abrir el archivo deseado y a partir de aki tienes dos opciones:
1 - Usar ReadFile y WriteFile para escribir y leer el archivo
2 - Mapear el archivo con CreateFileMapping y MapViewOfFile

Para obtener el tamaño del archivo usa GetFileSize y no se te olvide usar CloseHandle y UnmapViewOfFile.

Salu3 E0N

PD - Mirate el código de mi Small Joiner, que te será útil para lo que quieres hacer

krackwar

#74
Cita de: E0N en  2 Mayo 2008, 13:03 PM
Pues usando el api como todo en asm :P Eso lo explicaré mas adelante, q no me das tiempo!!

Puedes usar CreateFile para abrir el archivo deseado y a partir de aki tienes dos opciones:
1 - Usar ReadFile y WriteFile para escribir y leer el archivo
2 - Mapear el archivo con CreateFileMapping y MapViewOfFile

Para obtener el tamaño del archivo usa GetFileSize y no se te olvide usar CloseHandle y UnmapViewOfFile.

Salu3 E0N

PD - Mirate el código de mi Small Joiner, que te será útil para lo que quieres hacer
GRaqcias por la respuesta lo e leido y creo que debo aprender un poquito mas antes de irme a ese nivel(Me tiene mal acostumbrado el vb),Bueno tambien e traducido codes i les dejo una musiquita con el Beep del pc que hizo lympex en vb6 i yo lo pase a asm:
Código (asm) [Seleccionar]
include 'C:\Documents and Settings\krackwar\Escritorio\fasmw16726\INCLUDE\WIN32a.inc'
format PE GUI ; Tipo de ejecutable
push 95
push 300
call [Beep]
push 50
call[dormir]
push 95
push 300
call [Beep]
push 100
call[dormir]
push 95
push 300
call [Beep]
push 250
push 400
call [Beep]
push 100
call[dormir]
push 250
push 400
call [Beep]
push 100
call[dormir]
push 250
push 400
call [Beep]
push 100
call[dormir]

push 100
call[dormir]
push 600
push 600
call [Beep]
push 160
push 500
call[Beep]
push 160
push 400
call[Beep]
push 100
call[dormir]
push 160
push 400
call [Beep]
push 50
call[dormir]
push 160
push 400
call [Beep]
push 200
push 500
call [Beep]
push 50
call[dormir]
push 160
push 400
call[Beep]
push 225
push 375
call [Beep]
push 100
call [dormir]
push 700
push 540
call [Beep]
push 100
call[dormir]
push 275
push 450
call [Beep]
push 75
push 375
call [Beep]
push 50
call [dormir]
push 650
push 400
call [Beep]
push 0
call [terminar]
data import

  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL'


  import kernel,\
   dormir , 'Sleep',\
         terminar,'ExitProcess',\
         Beep , 'Beep'

end data                                     
Mi blog
Bienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.
El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.

elmeister

krackwar, ese code está muy bien, se lo he enseñado a mi primo que esta haciendo segundo de ingenieria informática y se ha empezado a reir solo con verlo, despues casi acaba por tierra al enseñarselo ya compilado

elmeister

Tengo un pequeño problema, estoy haciendo el tipico programa de broma tocahuevos, lo he compilado y va todo bien, al cerrar el mensaje vuelve a salir una y otra vez, y solo se puede cerrar con control alt suprimir, ahora lo que quiero hacer es que lleve un contador, diciendo cuantas veces ha cerrado ya la ventana (por recochineo más que nada), te dejo el código, y cuando puedas me dices como podria hacerlo, lo he hecho mas o menos como pensaba que sería

Código (asm) [Seleccionar]

include 'H:\archivos de programa\fasm\include\win32ax.inc'

.code

start:
mov eax,1
invoke MessageBoxA,0,'Quieres que te toque los huevos?','Quieres?',MB_YESNO
jmp putada ; si no pongo el JMP no pasa a la siguiente sección, por lo que no sale la ventanita y empieza a usar sobre el 90% de mi CPU

putada:
invoke MessageBoxA,0,eax'veces','te he tocado los huevos',0
add eax,1
jmp putada


.end start

~~

Eso así obiamente no te va a funcionar nunca, tienes que usar el api wsprintf para concatenar texto con números. Ojito a esto:

CitarNote  Unlike other Windows functions, wsprintf uses the C calling convention (_cdecl), rather than the Pascal calling convention. As a result, it is the responsibility of the calling process to pop arguments off the stack, and arguments are pushed on the stack from right to left. In C-language modules, the C compiler performs this task.

Vamos, que tienes que cuadrar la pila tu, por que el api no lo hace por ti. El programa sería así:

Código (asm) [Seleccionar]
include 'H:\archivos de programa\fasm\include\win32ax.inc'

.data
      veces db ' veces',0
      texto dd 0

.code

start:

        invoke   MessageBoxA,0,'Quieres que te toque los huevos?','Quieres?',0

        mov ebx, 1 ; No uses eax como contdor porque cambia tras llamar a un api :P
        putada:
                invoke LocalAlloc, LPTR, 100
                mov [texto], eax

                push veces
                push ebx
                invoke wsprintf, [texto], '%d%s'
                add esp, 16

                invoke MessageBox, 0, [texto], 'te he tocado los huevos', 0
                invoke LocalFree, [texto]

                add ebx,1
        jmp putada

.end start


Hechale un ojo con el debugger para ver como el api no restaura la pila y por que hay que poner ese add esp,16 ;)

Salu2

krackwar

e estado viendo codes de troyanos en asm i todos estan compilados con masm i e visto el code de eon de un manual que esta en C i no e logrado saber como se conecta¿alguien me podria dar un code de un troyano en fasm? o ¿orientarme como hacerlo?
Mi blog
Bienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.
El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.

~~

Que estén ensamblados en masm, nasm, fasm o lo que sea te da lo mismo, si lo unico q tienes q ver son las apis que usan para crear el socket y de mas. Mira:
http://mipagina.cantv.net/numetorl869/asmsockguide_es.html

Ahí viene explicaditas todas las apis necesarias, para mas detalle, MSDN  >:D