REM cisco.opl - Psion 3/5 version

REM brought to you (Kristmas '97) by:

REM

REM Koder: BigDog

REM Systems Anakyst: Major Malfunction

REM

REM Kontax: majormal@wownet.org

REM

REM Kreds: Jared Mauch, Janos Zsako, Hobbit, SPHiXe,

REM (I think... not *really* sure where it originally

REM came from)... original works are floating around

REM the 'net...

REM

REM Spelling: Major Malfunktion's teecher.

REM

REM This krap is Bobbyright (b) Whenever,

REM BigDog & Major Malfunction - All Rites Reversed,

REM All Wrongs degneveR.



PROC Main:

        local passwd$(50)



progloop::

        print "Cisco Password Dekryption"

        print

        print "Enter encrypted password: ";

        input passwd$

        print "Decrypted password: ";

        Dekrypt:(passwd$)

        print

        print

        print

goto progloop

endp



PROC Dekrypt:(enc$)



        local seed

        local i

        local value

        local declen

        local xlat(50)

        local counter

        local a%

        local b%





        global encpw(50)

        global decpw(50)

        value=0



        i=1

        WHILE i<=LEN(enc$)

                encpw(i)=asc(MID$(enc$,i,1))

                i=i+1

        ENDWH



        xlat(1)=6*16+4

        xlat(2)=7*16+3

        xlat(3)=6*16+6

        xlat(4)=6*16+4

        xlat(5)=3*16+11

        xlat(6)=6*16+11

        xlat(7)=6*16+6

        xlat(8)=6*16+15

        xlat(9)=4*16+1

        xlat(10)=2*16+12

        xlat(11)=2*16+14

        xlat(12)=6*16+9

        xlat(13)=7*16+9

        xlat(14)=6*16+5

        xlat(15)=7*16+7

        xlat(16)=7*16+2

        xlat(17)=6*16+11

        xlat(18)=6*16+12

        xlat(19)=6*16+4

        xlat(20)=4*16+10

        xlat(21)=4*16+11

        xlat(22)=4*16+4

        xlat(23)=72

        xlat(24)=83

        xlat(25)=85

        xlat(26)=66



        seed=((encpw(1)-ASC("0"))*10) + (encpw(2)-ASC("0"))



        i=2

        WHILE i<=LEN(enc$)

                if (i<>2)

                        if (i/2)<>INT(i/2)

                        else

                                a%=value

                                b%=xlat(seed+1)

                                decpw((i/2)-2+1)=(a% OR b%) AND NOT (a% AND b%)

                                seed=seed+1

                                value=0

                        endif

                endif



                value=value*16



                encpw(i+1)=ASC(UPPER$(CHR$(encpw(i+1))))

                if encpw(i+1)>=ASC("0") and encpw(i+1)<=ASC("9")

                        value=value+encpw(i+1)-ASC("0")

                endif



                if encpw(i+1)>=ASC("A") and encpw(i+1)<=ASC("F")

                        value=value+encpw(i+1)-ASC("A")+10

                endif



                i=i+1

        ENDWH



        i=i+1

        declen=(i/2)-2



        i=1

        WHILE i<=declen

                print CHR$(decpw(i));

                i=i+1

        ENDWH

endp