archivo


187KB Größe 0 Downloads 36 Ansichten
Edutin Academy

Problema: Crack Diseñe e implemente un programa, crack , que rompa contraseñas.

Especificaciones • Implemente su programa en un archivo llamado crack.c en un directorio llamado crack (dentro de programming ). • Su programa debería aceptar un único argumento en la línea de comandos: una contraseña hash (cifrada). • Si su programa se ejecuta sin ningún argumento de línea de comandos o con más de un argumento de línea de comandos, su programa debería imprimir un error 1 (de su elección) y salir inmediatamente, con la función main retornando (lo que significa un error). • De lo contrario, su programa debe proceder a descifrar la contraseña dada, idealmente tan pronto como sea posible, imprimiendo la contraseña en el claro seguido por \n , nada más y nada menos, con el retorno principal 0. • Suponga que cada contraseña ha sido cifrada (hashed) con la función de crypt basada en C (no en MD5). • Suponga que cada contraseña no tiene más de cinco (5) caracteres • Suponga que cada contraseña está compuesta enteramente de caracteres alfabéticos (mayúsculas y/o minúsculas).

Edutin Academy

Información En la mayoría de los sistemas que ejecutan Linux en estos días hay un archivo llamado /etc/shadow , que contiene nombres de usuario y contraseñas. Afortunadamente, las contraseñas no se almacenan "limpias", sino que se encriptan mediante una función de hash unidireccional. Cuando un usuario inicia sesión en estos sistemas escribiendo un nombre de usuario y una contraseña, esta última se cifra con la misma función hash, y el resultado se compara con la entrada del nombre de usuario en /etc/shadow . Si las dos contraseñas cifradas coinciden, el usuario puede entrar. Si alguna vez ha olvidado alguna contraseña, es posible que le hayan dicho que el servicio de asistencia técnica no puede buscar su contraseña, pero que puede cambiarla por usted. Lo más probable es que sea porque el soporte técnico solo puede ver, si acaso, un hash de su contraseña, no su contraseña en sí misma. Pero pueden crear un nuevo hash para ti. Aunque las contraseñas en /etc/shadow están cifradas, la función hash no siempre es tan fuerte. Muy a menudo los adversarios, al obtener ese archivo de alguna manera, son capaces de adivinar (y comprobar) las contraseñas de los usuarios o descifrarlas usando fuerza bruta (es decir, intentando todas las contraseñas posibles). A continuación se muestra cómo podría ser /etc/shadow , aunque simplificado, en el que cada línea está formateada como username:hash .

Edutin Academy

andi:50.jPgLzVirkc jason:50YHuxoCN9Jkc malan:50QvlJWn2qJGE mzlatkova:50CPlMDLT06yY patrick:50WUNAFdX/yjA rbowden:50fkUxYHbnXGw summer:50C6B0oz0HWzo stelios:50nq4RV/NVU0I wmartin:50vtwu4ujL.Dk zamyla:50i2t3sOSAZtk

Nota: El vídeo de recorrido indica incorrectamente que las contraseñas no tienen más de cuatro (4) caracteres. En su lugar, según la especificación, asegúrese de manejar contraseñas de hasta cinco (5) caracteres.

Edutin Academy

Honestidad Académica La filosofía de este curso sobre la honestidad académica es mejor mencionada como “sé razonable”. El curso reconoce que la interacción con los compañeros de clases y otros puede facilitar el dominio del material del curso. Sin embargo, aquí recordamos una línea entre conseguir ayuda de otro y presentar el trabajo de alguien más. Esta política caracteriza ambos lados de esa línea. La esencia de todo el trabajo que envía a este curso debe ser propia. La colaboración sobre los problemas no está permitida (a menos que se mencione explícitamente) excepto hasta el punto de que puedas pedir ayuda a tus compañeros u otros, siempre y cuando esa ayuda no se reduzca a que el otro haga el trabajo por ti. Generalmente hablando, cuando pides ayuda, puedes mostrar tu propio código o escribirlo, pero no deberías ver el de los demás, mientras que usted y ellos respeten estas políticas y otras restricciones. La colaboración en quices y tesis está totalmente prohibida. La colaboración en el proyecto final está permitida hasta el punto que se especifique. Debajo están las reglas prácticas que caracterizan los actos que el curso considera razonables y no razonables. Si duda en cuanto si un acto es razonable, no lo haga hasta que solicite y reciba la aprobación por escrito de su instructor. Si una violación de esta política es sospechada y confirmada, su instructor se reserva el derecho de imponer sanciones sobre cualquier resultado disciplinario que podría incluir la pérdida del trabajo enviado o del curso en sí.

Edutin Academy

Razonable • • • •

• • • • • •

Comunicarse con compañeros de clase acerca de problemas en Ingles (u algún otro idioma hablado). Debatir el material de curso con otros con la finalidad de entenderlo mejor. Ayudar a un compañero a identificar un bug en su código, viendo, compilando o corriendo su código, incluso en su propio computador. Incorporando un fragmento de código que se encuentre online o en cualquier lugar, dentro de su código, previsto que esos fragmentos no son en si la solución a los problemas asignados y que se cite el origen del fragmento de código. Revisar quices de años pasados, exámenes y soluciones. Enviar o mostrar código que le ha escrito a alguien, posiblemente a un compañero, entonces eso podría ayudarlo a identificar y arreglar un bug. Compartiendo fragmentos de código, sus propias soluciones a problemas en línea así otros podrían ayudarle a identificar y arreglar un bug u otro inconveniente. Utilizando la web o cualquier otro lugar por instrucciones más allá del curso mismo, para referencias, y para soluciones por dificultades técnicas, pero no para soluciones completas a problemas o para su propio proyecto final. Exponer soluciones a problemas con otros usando diagramas o pseudocódigo, pero no el código actual. Trabajar (e incluso pagarle) a un tutor para ayudarte con el curso, aclarando que el tutor no haga el trabajo por usted.

Edutin Academy

No razonable • • • • • • • •

Acceder a las soluciones de algún problema antes de presentar la suya. Preguntarle a un compañero de clases para ver su solución al problema antes de presentar la suya. Descompilar o desensamblar las soluciones a los problemas. Fallar al citar (como con comentarios) el origen del código, escritura o técnicas que usted descubrió fuera del curso e integrarlas a su propio trabajo incluso mientras respeta esta política y otras restricciones. Dando o mostrando a un compañero la solución a un problema cuando él o ella, y no usted, fue quien tuvo problemas al resolverlo. Viendo el trabajo de otra persona durante un examen o quiz. Pagando u ofreciendo pagarle a alguien por un trabajo que usted debe presentar como (o en parte) suyo. Ofreciendo y haciendo disponible las soluciones de un problema a personas que podrían tomar el curso en el futuro.



Buscar, solicitar o ver las respuestas de un quiz antes de tomarlo.



Buscar o solicitar soluciones completas a problemas en línea o en otro lugar.



Dividiendo la carga de trabajo para resolver un problema y combinar su trabajo. (A menos que esté autorizado explícitamente por el problema mismo).



Presentando (después de una posible modificación) el trabajo de otra persona más allá de los fragmentos permitidos.



Presentando el mismo o un trabajo similar a este curso que usted ha presentado o presentará en otro lugar.



Utilizando recursos durante el quiz más allá de los que están explícitamente permitidos en las instrucciones del quiz.



Viendo otra solución del problema y basar su propia solución en esta.

Edutin Academy

Evaluación Su trabajo en este conjunto de problemas se evaluará principalmente en tres ejes.

Exactitud ¿Hasta qué punto su código es consistente con nuestras especificaciones y libre de errores?

Diseño ¿Hasta qué punto está bien escrito su código (es decir, de manera clara, eficiente, elegante y / o lógica)?

Estilo ¿Hasta qué punto es legible su código (es decir, comentado y sangrado con las variables adecuadamente nombradas)?

Para obtener una calificación aprobatoria en este curso, todos los estudiantes deben enviar todos los problemas asignados, a menos que el profesor otorgue una excepción por escrito.

Este documento hace parte de la obra “CS50's AP® Computer Science Principles” por Harvard University, disponible bajo licencia Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). “CS50's AP® Computer Science Principles” licencia Attribution-NonCommercialShareAlike 4.0 International (CC BY-NC-SA 4.0) modificado y adaptado por Edutin Academy.