Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúVAR CONT
VAR VMEMORY
VAR SIZE
VAR AUX
VAR RESP
PREG:
ASK "Introduzca su ID"
MOV RESP,$RESULT
LEN RESP
MOV SIZE,$RESULT
ALLOC 100
MOV VMEMORY,$RESULT
MOV VMEMORY2,VMEMORY
CMP VMEMORY,0
JE ERROR1
MOV [VMEMORY],RESP
OPERACION:
CMP CONT,SIZE
JE EXIT
MOV AUX,[VMEMORY],1
ADD AUX,5
MOV [VMEMORY],AUX,1
INC VMEMORY
INC CONT
JMP OPERACION
ERROR:
MSG "Debe ingresar un serial"
JMP PREG
ERROR1:
MSG "Error inesperado"
RET
EXIT:
MOV AUX,[VMEMORY2], SIZE
BUF AUX
STR AUX
EVAL "ID:{RESP} SERIAL:{AUX}"
MSG $RESULT
FREE VMEMORY2
RET
Cita de: $Edu$ en 19 Octubre 2011, 22:53 PM
Estos scripts que haces, es ASM no? y necesitaria un compilador para ejecutar codigo en ASM no? o se guarda con alguna extension?esto lo pregunto para yo saber, porque pienso que en realidad este script se pondra en algun lugar del Olly para luego ser interpretado por el no?
Cita de: Tinkipinki en 19 Octubre 2011, 20:56 PM
Hola Flamer:
Los tutoriales por pequeños que sean siempre son bienvenidos.
Saludos tambien a .:UND3R:., te encontrabamos a faltar.
saludos
/*
-=================================================================-
Script realizado por :UND3R
Script para : Logear saltos condicionales
Configuracion: Saltar todas las excepciones y no tener ningún BP
Fecha : 12/10/2011
-=[ Comentario del Script ]=-
Ideal para logear todo tipo de saltos condicionales para posteriormente
compararlo con otro log con el fin de localizar saltos mágicos
-=================================================================-
*/
VAR AUX_EXIT
VAR T_F_N_LOG
VAR CONT_LOG_N
VAR FILTRO
VAR VEIP
VAR RESP
VAR N_LOGTXT
VAR LOG_SALTO
VAR VMEMORY
VAR VMEMORY2
VAR VMEMORY3
VAR AUX_TS
VAR TIPO_SALTO
VAR AUX_TS2
VAR LOG_BUCLE1
VAR LOG_BUCLE2
VAR COMP
VAR VEIP2
VAR MAX
VAR MIN
VAR CONT_LOG_N2
VAR CANTI_LOG_SAVE
VAR COMPROBAR_SALTO
VAR SI_NO
VAR VAR_EIP
VAR CONT_JUMP
VAR LOG_TIPO_SALTO
VAR ANTIBUCLE2
VAR ANTIBUCLE1
VAR N_BUCLE1
VAR CONT
VAR INF_BUCLE2
VAR INF_BUCLE1
VAR INF_BUCLE
VAR VEIP_2
VAR FILTRAR_JMP_SHORT
ASK "Introduzca el nombre del archivo a crear EJ: LOG1.TXT"
MOV N_LOGTXT,$RESULT
EVAL "{N_LOGTXT}"
WRT $RESULT, "|N: |ADDRESS:|EIP: |SALTA: |BUCLE: |TIPO SALTO:|"
WRTA $RESULT, "|---------------------------------------------------|"
PREG_FILTRO:
MSGYN "¿Opciones avanzadas?"
CMP 1,$RESULT
JE AVANZADO
TRACE:
TICND "byte [EIP] > 6F && byte [EIP] < 80 || byte [EIP+1] > 7F && byte [EIP+1] < 90 && byte [EIP]==0F"
CMP RESP,eip
JE EXIT1
OPCODE eip
MOV LOG_SALTO,$RESULT_1
ALLOC 50
MOV VMEMORY,$RESULT
MOV [VMEMORY],LOG_SALTO
MOV VMEMORY2,VMEMORY
ADD VMEMORY2,2
BUCLE_TS:
CMP [VMEMORY2],20,1
JNE INC_VMEMORY2
MOV VMEMORY3,VMEMORY2
COMP_SHORT:
INC VMEMORY3
MOV AUX_TS,[VMEMORY3],5
CMP AUX_TS,"SHORT"
JE SALTO_TIPO1
SALTO_TIPO2:
SUB VMEMORY2,VMEMORY
MOV TIPO_SALTO,[VMEMORY],VMEMORY2
STR TIPO_SALTO
FREE VMEMORY
JMP TRACE0
SALTO_TIPO1:
ADD VMEMORY3,5
MOV AUX_TS2,[VMEMORY3],1
CMP AUX_TS2,2E
JE SALTO_TIPO2
SUB VMEMORY3,VMEMORY
MOV TIPO_SALTO,[VMEMORY],VMEMORY3
LOG TIPO_SALTO
FREE VMEMORY
CMP FILTRAR_JMP_SHORT,1
JE TRACE
JMP TRACE0
INC_VMEMORY2:
INC VMEMORY2
JMP BUCLE_TS
TRACE0:
CMP eip,VEIP
JE CONT_BUCLE
MOV LOG_BUCLE1,0
MOV LOG_BUCLE2,0
TRACE1:
OPCODE eip
MOV VEIP,eip
MOV VEIP2,VEIP
ADD VEIP2,$RESULT_2
STI
CMP FILTRO,1
JNZ TRACE2
CMP eip,MAX
JA TRACE2
CMP eip,MIN
JAE TRACE
TRACE2:
CMP LOG_BUCLE1,1
JNE TRACE3
MOV LOG_BUCLE2,"!"
TRACE3:
INC CONT_LOG_N
ITOA CONT_LOG_N, 10.
MOV CONT_LOG_N2,$RESULT
CMP T_F_N_LOG,1
JNE TRACE4
CMP CONT_LOG_N2,CANTI_LOG_SAVE
JE EXIT2
TRACE4:
CMP VEIP2,eip
JE NO
SI:
MOV COMPROBAR_SALTO,1
MOV SI_NO,"SI"
JMP LOG_COMPR_TXT
NO:
MOV COMPROBAR_SALTO,0
MOV SI_NO,"NO"
LOG_COMPR_TXT:
EVAL "|{CONT_LOG_N2}"
MOV CONT_LOG_N2,$RESULT
LOG_COMPR_TXT_:
LEN CONT_LOG_N2
CMP $RESULT,6
JNE INC_LOG_COMPR_TXT
ADD CONT_LOG_N2,"|"
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_LOG_N2
LOG_CMPR_TXT2:
EVAL "{VEIP}"
MOV VEIP_2,$RESULT
LOG_CMPR_TXT2_:
LEN VEIP_2
CMP $RESULT,8
JNE INC_LOG_CMPR_TXT2
ADD VEIP_2,"|"
EVAL "{N_LOGTXT}"
WRTA $RESULT,VEIP_2,""
LOG_CMPR_TXT3:
EVAL "{eip}"
MOV VAR_EIP,$RESULT
LOG_CMPR_TXT3_:
LEN VAR_EIP
CMP $RESULT,8
JNE INC_LOG_CMPR_TXT3
ADD VAR_EIP,"|"
EVAL "{N_LOGTXT}"
WRTA $RESULT,VAR_EIP,""
LOG_CMPR_TXT4:
EVAL "{SI_NO} |{LOG_BUCLE2} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
CMPR_LEN_TS:
LEN TIPO_SALTO
CMP $RESULT,B
JNE INC_LEN_TS
EVAL "{TIPO_SALTO}|"
MOV LOG_TIPO_SALTO,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,LOG_TIPO_SALTO,""
CMP AUX_EXIT,1
JE LOG_COMPR_TXT2
JMP TRACE
LOG_COMPR_TXT2:
JMP EXIT
STOP:
BPHWS RESP, "x"
JMP FILTRO
EXIT1:
BPHWC RESP
EXIT:
EVAL "{N_LOGTXT}"
WRTA $RESULT,"`---------------------------------------------------´"
ret
EXIT2:
MOV AUX_EXIT,1
JMP TRACE4
AVANZADO:
MSGYN "¿Detener en Nº cantidad de datos logeados?"
CMP 0,$RESULT
JE AVANZADO2
N_LOG_SAVE:
ASK "Introduzca número de datos a logear:"
MOV CANTI_LOG_SAVE,$RESULT
ITOA CANTI_LOG_SAVE
MOV CANTI_LOG_SAVE,$RESULT
MOV T_F_N_LOG,1
JMP FILTRO
AVANZADO2:
MSGYN "¿Detener log en address determinado?"
CMP 0,$RESULT
JE FILTRO
BP_ADDRESS:
ASK "Introduzca la dirección en donde desea detener el log"
MOV RESP,$RESULT
CMP RESP,0
JNE STOP
FILTRO:
MSGYN "¿Excluir en el log rango de address?"
CMP 0,$RESULT
JE FILTRO_JMP
FILTRO2:
MOV FILTRO,1
ASK "Introduzca el rango a excluir,desde:"
MOV MIN,$RESULT
ASK "hasta:"
MOV MAX,$RESULT
FILTRO_JMP:
MSGYN "¿Excluir saltos SHORT?"
CMP 0,$RESULT
JE ANTIBUCLE
MOV FILTRAR_JMP_SHORT,1
ANTIBUCLE:
MSGYN "¿Log inteligente (evita bucle's)?"
CMP 0,$RESULT
JE OLLYH
ANTIBUCLE2:
MOV ANTIBUCLE1,1
ASK "Nº de veces que debe repetirse un salto para ser considerado bucle"
MOV N_BUCLE1,$RESULT
OLLYH:
MSGYN "¿Ocultar OllyDBG mientras se ejecuta el script?"
CMP $RESULT,0
JE GOTRACE
DBH
GOTRACE:
JMP TRACE
CONT_BUCLE:
INC CONT
MOV LOG_BUCLE1,1
CMP CONT,N_BUCLE1
JE SALTAR_BUCLE
JMP TRACE1
SALTAR_BUCLE:
CMP COMPROBAR_SALTO,0
JE NO_SALTA_BUCLE
SI_SALTA_BUCLE:
MOV INF_BUCLE2,VEIP2
JMP BUCLE2
NO_SALTA_BUCLE:
MOV INF_BUCLE,VEIP
ADD INF_BUCLE,1
MOV INF_BUCLE,[INF_BUCLE],1
MOV INF_BUCLE2,eip
ADD INF_BUCLE2,INF_BUCLE
ADD INF_BUCLE2,2
CMP INF_BUCLE,7F
JBE BUCLE2
SUB INF_BUCLE2,100
BUCLE2:
EVAL "|----[{VEIP}]-¡BUCLE ENCONTRADO!------------------"
MOV CONT_JUMP,$RESULT
BUCLE2_:
LEN CONT_JUMP
CMP $RESULT,34
JNE INC_BUCLE2
ADD CONT_JUMP,"|"
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
BUCLE_CONT_:
BP INF_BUCLE2
RUN
CMP INF_BUCLE2,eip
JNE ERROR1
BC INF_BUCLE2
MOV CONT,0
MOV LOG_BUCLE1,0
MOV LOG_BUCLE2,0
JMP TRACE
INC_LEN_TS:
ADD TIPO_SALTO," "
JMP CMPR_LEN_TS
INC_BUCLE2:
ADD CONT_JUMP,"-"
JMP BUCLE2_
INC_LOG_CMPR_TXT3:
ADD VAR_EIP," "
JMP LOG_CMPR_TXT3_
INC_LOG_CMPR_TXT2:
ADD VEIP_2," "
JMP LOG_CMPR_TXT2_
INC_LOG_COMPR_TXT:
ADD CONT_LOG_N2," "
JMP LOG_COMPR_TXT_
ERROR1:
MSG "Error inesperado #1"
RET
/*
-=================================================================-
Script realizado por :UND3R
Script para : Logear saltos condicionales
Configuracion: Saltar todas las excepciones y no tener ningún BP
Fecha : 12/10/2011
-=[ Comentario del Script ]=-
Ideal para logear todo tipo de saltos condicionales para posteriormente
compararlo con otro log con el fin de localizar saltos mágicos
-=================================================================-
*/
VAR INFO_N4
VAR STR_4
VAR STR_2
VAR STR_1
VAR INFO_N3
VAR INFO_N2
VAR INFO_N
VAR CONT_LOG_N2
VAR AUX_EXIT
VAR T_F_N_LOG
VAR CANTI_LOG_SAVE
VAR CONT_LOG_N
VAR SI_NO
VAR CONT_JUMP
VAR N_LOGTXT
VAR LOG_BUCLE2
VAR LOG_BUCLE1
VAR COMPROBAR_SALTO
VAR INF_BUCLE2
VAR INF_BUCLE
VAR N_BUCLE1
VAR CONT
VAR ANTIBUCLE1
VAR FILTRO
VAR MIN
VAR MAX
VAR COMP
VAR RESP
VAR VEIP2
VAR VEIP
ASK "Introduzca el nombre del archivo a crear EJ: LOG1.TXT"
MOV N_LOGTXT,$RESULT
EVAL "{N_LOGTXT}"
WRT $RESULT, "|N: |ADDRESS:|EIP: |BUCLE: |SALTA: |"
WRTA $RESULT, "|---------------------------------------|"
PREG_FILTRO:
MSGYN "¿Opciones avanzadas?"
CMP 1,$RESULT
JE AVANZADO
TRACE:
TICND "byte [EIP] > 6F && byte [EIP] < 80"
CMP RESP,eip
JE EXIT1
CMP eip,VEIP
JE CONT_BUCLE
MOV LOG_BUCLE1,0
MOV LOG_BUCLE2,0
TRACE1:
MOV COMP,[eip],1
CMP COMP,70
JB TRACE
CMP COMP,7F
JA TRACE
OPCODE eip
MOV VEIP,eip
MOV VEIP2,VEIP
ADD VEIP2,$RESULT_2
STI
CMP FILTRO,1
JNZ TRACE2
CMP eip,MAX
JA TRACE2
CMP eip,MIN
JAE TRACE
TRACE2:
CMP LOG_BUCLE1,1
JNE TRACE3
MOV LOG_BUCLE2,"!"
TRACE3:
INC CONT_LOG_N
ITOA CONT_LOG_N, 10.
MOV CONT_LOG_N2,$RESULT
CMP T_F_N_LOG,1
JNE TRACE4
CMP CONT_LOG_N2,CANTI_LOG_SAVE
JE EXIT2
TRACE4:
CMP VEIP2,eip
JE NO
SI:
MOV COMPROBAR_SALTO,1
MOV SI_NO,"SI"
JMP LOG_COMPR_TXT
NO:
MOV COMPROBAR_SALTO,0
MOV SI_NO,"NO"
LOG_COMPR_TXT:
LEN CONT_LOG_N2
MOV INFO_N,$RESULT
CMP INFO_N,1
JE LOG_CMPR_TXT_1
CMP INFO_N,2
JE LOG_CMPR_TXT_2
CMP INFO_N,3
JE LOG_CMPR_TXT_3
CMP INFO_N,4
JE LOG_CMPR_TXT_4
CMP INFO_N,5
JE LOG_CMPR_TXT__5
JMP ERROR2
LOG_CMPR_TXT_1:
EVAL "|{CONT_LOG_N2} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
JMP LOG_CMPR_TXT2
LOG_CMPR_TXT_2:
EVAL "|{CONT_LOG_N2} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
JMP LOG_CMPR_TXT2
LOG_CMPR_TXT_3:
EVAL "|{CONT_LOG_N2} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
JMP LOG_CMPR_TXT2
LOG_CMPR_TXT_4:
EVAL "|{CONT_LOG_N2} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
JMP LOG_CMPR_TXT2
LOG_CMPR_TXT__5:
EVAL "|{CONT_LOG_N2}|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
LOG_CMPR_TXT2:
ITOA VEIP
MOV STR_1,$RESULT
LEN STR_1
MOV INFO_N2,$RESULT
CMP INFO_N2,5
JE LOG_CMPR_TXT_5
CMP INFO_N2,6
JE LOG_CMPR_TXT_6
CMP INFO_N2,7
JE LOG_CMPR_TXT_7
CMP INFO_N2,8
JE LOG_CMPR_TXT_8
JMP ERROR3
LOG_CMPR_TXT_5:
EVAL "{VEIP} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
JMP LOG_CMPR_TXT3
LOG_CMPR_TXT_6:
EVAL "{VEIP} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
JMP LOG_CMPR_TXT3
LOG_CMPR_TXT_7:
EVAL "{VEIP} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
JMP LOG_CMPR_TXT3
LOG_CMPR_TXT_8:
EVAL "{VEIP}|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
LOG_CMPR_TXT3:
ITOA eip
MOV STR_2,$RESULT
LEN STR_2
MOV INFO_N3,$RESULT
CMP INFO_N3,5
JE LOG_CMPR_TXT2_5
CMP INFO_N3,6
JE LOG_CMPR_TXT2_6
CMP INFO_N3,7
JE LOG_CMPR_TXT2_7
CMP INFO_N3,8
JE LOG_CMPR_TXT2_8
JMP ERROR4
LOG_CMPR_TXT2_5:
EVAL "{eip} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
JMP LOG_CMPR_TXT4
LOG_CMPR_TXT2_6:
EVAL "{eip} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
JMP LOG_CMPR_TXT4
LOG_CMPR_TXT2_7:
EVAL "{eip} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
JMP LOG_CMPR_TXT4
LOG_CMPR_TXT2_8:
EVAL "{eip}|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
LOG_CMPR_TXT4:
EVAL "{LOG_BUCLE2} |{SI_NO} |"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP,""
CMP AUX_EXIT,1
JE LOG_COMPR_TXT2
JMP TRACE
LOG_COMPR_TXT2:
JMP EXIT
STOP:
BPHWS RESP, "x"
JMP FILTRO
EXIT1:
BPHWC RESP
EXIT:
EVAL "{N_LOGTXT}"
WRTA $RESULT,"`---------------------------------------´"
ret
EXIT2:
MOV AUX_EXIT,1
JMP TRACE4
AVANZADO:
MSGYN "¿Detener en Nº cantidad de datos logeados?"
CMP 0,$RESULT
JE AVANZADO2
N_LOG_SAVE:
ASK "Introduzca número de datos a logear:"
MOV CANTI_LOG_SAVE,$RESULT
ITOA CANTI_LOG_SAVE
MOV CANTI_LOG_SAVE,$RESULT
MOV T_F_N_LOG,1
JMP FILTRO
AVANZADO2:
MSGYN "¿Detener log en address determinado?"
CMP 0,$RESULT
JE FILTRO
BP_ADDRESS:
ASK "Introduzca la dirección en donde desea detener el log"
MOV RESP,$RESULT
CMP RESP,0
JNE STOP
FILTRO:
MSGYN "¿Excluir en el log rango de address?"
CMP 0,$RESULT
JE ANTIBUCLE
FILTRO2:
MOV FILTRO,1
ASK "Introduzca el rango a excluir,desde:"
MOV MIN,$RESULT
ASK "hasta:"
MOV MAX,$RESULT
ANTIBUCLE:
MSGYN "¿Log inteligente (evita bucle's)?"
CMP 0,$RESULT
JE OLLYH
ANTIBUCLE2:
MOV ANTIBUCLE1,1
ASK "Nº de veces que debe repetirse un salto para ser considerado bucle"
MOV N_BUCLE1,$RESULT
OLLYH:
MSGYN "¿Ocultar OllyDBG mientras se ejecuta el script?"
CMP $RESULT,0
JE GOTRACE
DBH
GOTRACE:
JMP TRACE
CONT_BUCLE:
INC CONT
MOV LOG_BUCLE1,1
CMP CONT,N_BUCLE1
JE SALTAR_BUCLE
JMP TRACE1
SALTAR_BUCLE:
CMP COMPROBAR_SALTO,0
JE NO_SALTA_BUCLE
SI_SALTA_BUCLE:
MOV INF_BUCLE2,VEIP2
JMP BUCLE2
NO_SALTA_BUCLE:
MOV INF_BUCLE,VEIP
ADD INF_BUCLE,1
MOV INF_BUCLE,[INF_BUCLE],1
MOV INF_BUCLE2,eip
ADD INF_BUCLE2,INF_BUCLE
ADD INF_BUCLE2,2
CMP INF_BUCLE,7F
JBE BUCLE2
SUB INF_BUCLE2,100
BUCLE2:
ITOA VEIP
MOV STR_4,$RESULT
LEN STR_4
MOV INFO_N4,$RESULT
CMP INFO_N4,5
JE BUCLE_5
CMP INFO_N4,6
JE BUCLE_6
CMP INFO_N4,7
JE BUCLE_7
CMP INFO_N4,8
JE BUCLE_8
BUCLE_5:
EVAL "|----[{VEIP}]-¡BUCLE ENCONTRADO!---------|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
JMP BUCLE_CONT_
BUCLE_6:
EVAL "|----[{VEIP}]-¡BUCLE ENCONTRADO!--------|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
BP INF_BUCLE2
JMP BUCLE_CONT_
BUCLE_7:
EVAL "|----[{VEIP}]-¡BUCLE ENCONTRADO!-------|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
JMP BUCLE_CONT_
BUCLE_8:
EVAL "|----[{VEIP}]-¡BUCLE ENCONTRADO!------|"
MOV CONT_JUMP,$RESULT
EVAL "{N_LOGTXT}"
WRTA $RESULT,CONT_JUMP
BUCLE_CONT_:
BP INF_BUCLE2
EOB COMPROBAR
RUN
COMPROBAR:
CMP INF_BUCLE2,eip
JNE ERROR1
BC INF_BUCLE2
MOV CONT,0
MOV LOG_BUCLE1,0
MOV LOG_BUCLE2,0
JMP TRACE
ERROR1:
MSG "Error inesperado #1"
RET
ERROR2:
MSG "Los datos registrados exceden la cantidad máxima permitida"
RET
ERROR3:
MSG "Error inesperado #2"
RET
ERROR4:
MSG "Error inesperado #3"
RET
Cita de: Masterx2010 en 15 Octubre 2011, 12:53 PM
comparte el archivo y quizas t pueda dar una mano! Saludos