Abril Negro 2008: Taller de ASM

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

0 Miembros y 4 Visitantes están viendo este tema.

SheKeL_C$

#20
NO HE DIXO NADA

byebye

Citarpero como sería para llamar a una API sin el include?

mirate los ejemplos que trae fasm, permite definir tu mismo las funciones que usaras de varias formas.

byebye

Citar
A) Usar solamente el include de kernel32 ( en caso de fasm ( no lo uso pero masm o nasm si ) ).

B) Sacar el kernelbase ( en plan shellcode ).


hay mas, si vas a ir de listo lo minimo es que te informes.

Citar
Y ahora llega un punto importante ( esto no lo ley en ningun sitio lo saque depurando un programa en C simplemente vi que registro cambiaba y es ecx )

lo cual quiere decir que en vez de eax responde en ecx.

o tu estas muy mal o cambia de depurador. la respuesta a una funcion se da en eax y GetProcAddress no es que sea otra cosa.

PD: [fs:edx] ( use el registro fs en mi codigo como pista pero nadie lo pillo ).

si, esque usar el PEB es nuevo ahora. (no tiene años ya).

Citar
PD2: Respuesta a E0N no es que no seas pro es que es una ***** de codigo y tutorial , es un tuto de ensamblador muy basico no de desarrollo de virus. Lo de esp es para estabilizar la pila como te atreves a preguntar que para que es siendo el autor del tutorial? :S xDDDDDDDDD

deslumbranos con tus artes viricas que nos vamos a reir un rato.

ROZOR eres un patan y un petardo de tio, igual que todos los codigos que pones en el foro que amontonas instrucciones y no sabes ni para que funcionan.

Citar
push
push
push
popa
call [funcion]
popa
ret
no me funciona esto ¿alguien sabe pq?.

CitarLo de esp es para estabilizar la pila como te atreves a preguntar que para que es siendo el autor del tutorial?

yo quiero que lo contestes tu, maestro de las artes ocultas.

PD: E0N no sera pro, pero tampoco va de pro. si hace una introduccion al lenguaje ensamblador esta en su derecho y mas ¿tu que ofreces? (aparte de las risas que nos pegamos a tu costa) solo intentas tirar a tierra el trabajo de los demas.

Flamareoon2000

sigue con este estupendo manual EON mucho te lo vamos a agradecer mucho , ya lo estoy leyendo y practicando  :D muchas gracias!!!

Distorsion

Ha palabras necias oidos sordos. Habre tu propio post no desvirtualices a los demas, ademas esta claro que la casa se empieza por los cimientos. Weno aqui una duda, se puede 'apañar' para que el segmento de datos ocupe lo justo y tambien estaria bien eliminar los DB 0 del final que ocupan mas que el codigo propio. Supongo que habra que modificar el PE indicando al compilador lo que queremos.
Gracias por el manual tengo mi asm un poco oxidado jeje y solo habia programado en 16 bits.
Un saludo.

byebye

lo de el tamaño extra se debe a los redondeos que se hacen. en el tutorial de ferchu se explica.

~~

@Distorsion

Si, mira, por poner un ejemplo compila esto con el fasm:

Código (asm) [Seleccionar]

format PE GUI 4.0
include 'H:\archivos de programa\fasm\include\win32a.inc'


        invoke  MessageBox,0,cuerpo, titulo,MB_OK
        invoke  ExitProcess,0

        cuerpo db 'Hola mundo', 0
        titulo db ':P', 0

data import

library kernel32,'KERNEL32.DLL',\
         user32,'USER32.DLL'

  import kernel32,\
        ExitProcess,'ExitProcess'
  import user32,\
        MessageBox,'MessageBoxA'

end data   


Veras que solo se crea una sección en el ejecutable, la flat, q es la crea fasm por defecto cuando se estructura de esta manera el código ;)

Ahora haz esto: borras todos los bytes con un editor hexadecimal a partir del 0x2BC
y cambias el RawSize de la sección por 0xBC. Con esto te kedará un archivo de 700 bytes ;)


Posiblemente se pueda reducir un poco mas el tamaño del ejecutable, pero de esta manera ya tienes la sección de "codigo" bien ajustadita




Respecto a lo de Rozor, ya lo hemos hablado por privado y me a pedido disculpas, parece q por fin ha entrad en razon, asi q si algun mod puede borrar todos los post q no estén relaccionados con el taller pues mejor.

Salu2

elmeister

E0N, tengo una duda, estaba trasteando con los ejemplos que trae el FASM, y modifiqué el BEER.ASM quedando así

Código (asm) [Seleccionar]

; Beer - example of tiny (one section) Win32 program

format PE GUI 4.0

include 'H:/Archivos de Programa/FASM/include/win32a.inc'

; no section defined - fasm will automatically create .flat section for both
; code and data, and set entry point at the beginning of this section

invoke MessageBoxA,0,_message,_caption,MB_ICONQUESTION+MB_YESNO
cmp eax,IDYES
jne exit

invoke mciSendString,_cmd_open,0,0,0
invoke mciSendString,_cmd_eject,0,0,0
invoke mciSendString,_cmd_close,0,0,0
invoke MessageBoxA,0,_aburrimiento, _aburres,MB_ICONQUESTION+MB_OK

exit:
invoke ExitProcess,0

_message db 'Te veo aburrido, quieres echar unas canastas?',0
_caption db 'Estás aburrido',0

_cmd_open db 'open cdaudio',0
_cmd_eject db 'set cdaudio door open',0
_cmd_close db 'close cdaudio',0

_aburrimiento db 'Hala! Haz un Triple!',0
_aburres db 'NBA',0

; import data in the same section

data import

library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
winmm,'WINMM.DLL'

import kernel32,\
ExitProcess,'ExitProcess'

import user32,\
MessageBoxA,'MessageBoxA'

import winmm,\
mciSendString,'mciSendStringA'

end data


Añadí un mensaje despues de que se abriese la bandeja del CD, mi duda es, como puedo cambiar el icono?, lo he compilado y funciona perfecto, pero no puedo cambiarlo (el código lo adjunta para mostrar como quedó y nada más, aunque solo he añadido y traducido, no he cambiado más)

~~

Fijate en los parametros del MessageBoxA. Si miras en la MSDN la descripcion de este api veras que para modificar el icono hay que cambiar el último parametro.
http://msdn2.microsoft.com/en-us/library/ms645505(VS.85).aspx

Por poner un ejemplo:
include 'H:/Archivos de Programa/FASM/include/win32ax.inc'

.code
start:
        invoke MessageBox, 0, 'Error', 0, MB_ICONERROR
        invoke MessageBox, 0, 'Pregunta', '', MB_ICONQUESTION
        invoke MessageBox, 0, 'Warning', '', MB_ICONWARNING
        invoke MessageBox, 0, 'Información', '', MB_ICONINFORMATION

        invoke ExitProcess, 0
.end start 


En la MSDN encontrarás prácticamente todo lo que necesites respecto a apis
Salu2 E0N

elmeister

no me refiero a eso, aunque tambien me viene bien, gracias, me refiero al icono del ejecutable