Вы находитесь на странице: 1из 8

UNIVERSIDAD AUTÓNOMA GABRIEL RENÉ MORENO

FACULTAD DE INGENIERIA EN CIENCIAS DE LA COMPUTACIÓN Y


TELECOMUNOCACIONES.
CARRERAS DE INGENIERÍA INFORMÁTICA, SISTEMAS Y REDES

INF221 LENGUAJE ENSAMBLADOR - GRUPOs “SA”, “SB”, “SC”


Semestre/Año:
1/2016

PROYECTO No.- 1

CREAR UN PROGRAMA DE LOGIN QUE VALIDA LOS NOMBRES DE


USUARIO Y CONTRASEÑAS.

Crear un programa de inicio de sesión de un Sistema Operativo


el cual autentica los nombres de usuarios y contraseñas
(passwords).

Cuando un usuario se conecta por ejemplo a una máquina Linux,


el sistema operativo solicita ingresar un ID de usuario y su
correspondiente contraseña. Si soy un usuario autorizado, el
sistema operativo me dará acceso y aparecerá por ejemplo en
la pantalla el mensaje: "Jose, you have successfully logged
in.". Si no se tiene un ID de usuario /contraseña autorizada,
el sistema operativo negará el acceso al sistema y mostrará
en pantalla: "Invalid UserID/Password. Your login failed."

El trabajo asignado a este proyecto de programación consiste


en escribir un programa en lenguaje ensamblador para llevar a
cabo este proceso.
El programa debe empezar por preguntar al usuario por su ID
de usuario. Lo hace mediante la visualización de "Login ID:"
en la consola. A continuación el sistema operativo esperará a
que el usuario escriba su ID de usuario. El programa debe
entonces solicitar al usuario ingresar su contraseña,
mostrando el mensaje "Password:" en la pantalla.

El programa debe luego comparar el par de UserID/Password con


todos los pares de UserID/Password del archivo de
contraseñas. Para proteger este archivo por seguridad, las
contraseñas se almacenan en forma “encriptada”. Por lo tanto,
también se tendrá que cifrar la contraseña ingresada por el
usuario antes de compararla con la contraseña para ese
usuario almacenada en el archivo de contraseñas cifradas.

El algoritmo de cifrado consistirá simplemente en restar x0C


de cada código ASCII que constituye la contraseña. Por lo
tanto, si la contraseña es ABC75, la contraseña cifrada sería
567+).

Si suponemos por ejemplo que tenemos cuatro usuarios como se


muestra en la siguiente tabla, junto con su contraseña y
contraseña cifrada:

UserID Input Password Encrypted


Password

Jose ee306P YY '$* D


ANTONIO ATX2008 5HL & $$,
Luis hookem \ cc_Ya
Leny 100yrs % $$ mfg

Una muestra de lo que va a producir el programa, usando como


fuente la información de los usuarios que intentan iniciar
una sesión, se muestra a continuación:

Login ID: Jose


Password: ee306P
Jose, you have successfully logged in.

----- Halting the program -----

Login ID: Jose


Password: ee
Invalid UserID/Password. Your login failed.

----- Halting the program -----

Login ID: Luis


Password: hookem
Luis, you have successfully logged in.
----- Halting the program -----

Login ID: Luis


Password: horns
Invalid UserID/Password. Your login failed.

----- Halting the program -----

Login ID: Omar


Password: 123
Invalid UserID/Password. Your login failed.

----- Halting the program -----

El archivo de contraseñas cifradas


==================================

Para realizar el trabajo se tendrá que conocer cómo el


archivo de contraseñas cifradas se almacena en memoria.

Se debe almacenar en posiciones consecutivas de memoria,


empezando en la dirección 0x00402000 los “punteros” a
UserID/password para cada usuario autorizado.

0x00402000 0x00402014
0x00402004 0x00402020
0x00402008 0x00402030
0x0040200C 0x0040203C
0x00402010 0x00000000

Tener en cuenta que el “puntero” del primer usuario “José” se


almacenará en la dirección de memoria que comienza en
x00402000. Tenga en cuenta que 0x00402010 contiene
0x00000000, el puntero NULL, lo que indica que en este caso
sólo existen cuatro usuarios autorizados. Se puede suponer
que el número de usuarios es menor que 0x100, y que la tabla
termina con 0x00000000.
Tener en cuenta que el “puntero” del primer usuario es
0x00402014, lo que indica que el nombre de usuario que es
"José" se almacenará en lugares consecutivos de memoria
comenzando en la dirección 0x00402014.

Para cada usuario, el UserID/Encrypted_Password se almacena


como una secuencia consecutiva de códigos ASCII, un código
ASCII por ubicación de memoria. Con el fin de comprobar ID de
usuario y la contraseña correcta, vamos a almacenar 0X00
después de cada ID de usuario y 0x00 después de cada
contraseña. Dado que José / AA '$ * D consta de 10
caracteres ASCII + los dos 0x00, el UserID/Password ocupará
12 palabras de memoria, desde las localidades 0x00402014 a
0x0040201F.

El segundo usuario, ANTONIO se almacenará a partir de la


ubicación de memoria 0x00402020.

La siguiente tabla muestra el contenido de la memoria a


partir de la dirección 0x00402014 para los cuatro usuarios
autorizados del ejemplo.

Dirección: Memoria:

0x00402014 0X4A
0x00402015 0X6F
0x00402016 0X73
0x00402017 0X65
0x00402018 0X00
0x00402019 0X59
0x0040201A 0X59
0x0040201B 0X27
0x0040201C 0X24
0x0040201D 0X2A
0x0040201E 0X44
0x0040201F 0X00
0x00402020 0X41
0x00402021 0X4E
0x00402022 0X54
0x00402023 0X4F
0x00402024 0X4E
0x00402025 0X49
0x00402026 0X4F
0x00402027 0X00
0x00402028 0X35
0x00402029 0X48
0x0040202A 0X4C
0x0040202B 0X26
0x0040202C 0X24
0x0040202D 0X24
0x0040202E 0X2C
0x0040202F 0X00
…………… …….

A fin de probar el programa, se necesita conocer el


UserID/Password de todos los usuarios autorizados. Por ahora,
usted sabe esto para los cuatro usuarios Jose, ANTONIO, Luis
y Leny. Por ejemplo el UserID/Password para los usuarios José
y ANTONIO se mostraron arriba.

Para probar el programa crear el archivo de prueba en memoria


asociado con estos cuatro usuarios: José, ANTONIO, Luis y
Leny. Por lo tanto estos UserID/Password deberán ser
inicializados por el programa en la memoria.

Tener en cuenta que esto es sólo un ejemplo de cómo se puede


inicializar la memoria de datos para probar el programa. Este
no es el único caso de prueba con que el programa debe
trabajar y que no se someterá este archivo de prueba para la
evaluación de la presentación.

Requisitos de entrada / salida


==============================
Se describe a continuación los requisitos detallados sobre
las entradas y salidas del programa.

Entrada:
El programa solicitará al usuario dos entradas independientes
desde el teclado, de la siguiente manera:

1. El mensaje: Login ID:


. El usuario a continuación ingresará una cadena de
caracteres desde el teclado, dando por concluido el
UserID con la tecla <Enter >. Asumir que serán
utilizados únicamente caracteres alfanuméricos.
. Asumir que el nombre de usuario se escribe
correctamente y que la longitud de la cadena usuario
tendrá obligatoriamente un mínimo de 4 y un máximo de 10
caracteres.

2. El mensaje: Password:
. El usuario a continuación ingresará una una cadena de
caracteres desde el teclado, terminando el mensaje con
la tecla <Enter >.
. Asumir que serán utilizados únicamente caracteres
“alfanuméricos”.
. Asumir que la contraseña se escribe correctamente y
que la longitud de la cadena de contraseña tendrá un
mínimo de 6 y un máximo de 10 caracteres.
. La introducción de la contraseña desde el teclado es
la clave “descifrada”. Es el trabajo del programa de
encriptar la contraseña introducida y después comprobar
para ver si coincide con la contraseña cifrada en la
lista de la matriz de entrada.

Salida:
El programa debe mostrar uno de los dos siguientes mensajes,
dependiendo del resultado de la comprobación de nombre de
usuario y contraseña cifrada, y luego detendrá su ejecución.

1. Salida de la pantalla: Invalid UserID/password. Your


login failed.
En los siguientes casos:

. Una entrada de UserID no válida (no se encuentra en la


matriz identificación de usuario).
. Un password incorrecto (no coincide con el UserID) si
y sólo si el UserID ya es válida.

2. Salida de la pantalla: <UserID>, you have successfully


logged in.
Solo en el siguiente caso:
. Un UserID válido y el password asociado coincide con
el UserID de entrada y el password cifrado.

PRESENTACIÓN DEL PROYECTO

Se recuerda que la presentación del proyecto para la


evaluación se realizará por grupo de estudiantes. Cada
grupo estará constituido por un máximo de 5 (cinco)
estudiantes. No se aceptarán prácticas que tengan un
número menor de estudiantes. En el futuro para nuevos
proyectos que se asignarán, el estudiante “no” podrá
cambiar de grupo (formar por lo tanto los grupos con
mucho cuidado !!).
Cada grupo deberá enviará por correo el archivo del programa
fuente (uno solo) en ensamblador que se nombrará como:
“password.asm”. No olvidar verificar que el archivo fuente
fue enviado correctamente.
Entregar además en clases el día de la presentación, el
“listado” del programa fuente: password.lst” con una carátula
donde figuren los nombres y número de registro de los
integrantes del grupo.

Colocar al principio del programa fuente como “comentario” el


Número de Registro y los Apellidos y Nombres de los
integrantes del grupo que participaron en la resolución del
proyecto.

El archivo fuente del programa ensamblador deberá ser enviado


utilizando el perfil del estudiante de la página WEB de la
UAGRM (www.uagrm.edu.bo) a través de la opción: “Consulta de
Datos” >> “Estudiantes” >> “Control de Materias”
>>“Prácticos” >> “Enviar Solución”. Favor que 1 (un) solo
estudiante del grupo envíe el correspondiente proyecto a
nombre de todo el grupo!!!!. Colocar en “Mensaje” de envío
del práctico “todos” los integrantes del grupo (Número
Registro y Nombres) que han participado en la práctica y a
los cuales se les asignará la nota del proyecto.

Recalcar que el archivo que se suministre por la WEB tiene


que ser un archivo del programa en lenguaje ensamblador
llamado como se dijo: password.asm. Este es el único archivo
que el grupo debe enviar.

La evaluación del presente proyecto promediado con los demás


prácticos, tendrá un valor correspondiente al 20% de la Nota
Final de la materia.
Fecha límite de presentación: día viernes 8 julio 2016 hasta
las 07:00 horas. No se aceptarán envíos de prácticos pasada
dicha hora.
Para cualquier consulta o dudas sobre el presente práctico o
temas en general de la materia favor dirigirse con mi
persona.

corrado vallet

Santa Cruz 24 junio 2016.

Вам также может понравиться