Forum The World na Goldenline.pl Twitter Facebook Kanał RSS

Wierzysz w duchy?

Po przeczytaniu Ducha w sieci, a tak naprawdę już w trakcie, zacząłem łamać szyfrogramy, które znajdują się na początku każdego rozdziału. Jest to niezwykle ciekawa zabawa – nawet nie dla ich treści, ale samego faktu rozwiązania problemu. Poniżej przedstawiam rozwiązania wraz z kodami źródłowymi programów, które napisałem w celu wykonania tego zadania.

Pytania zostały zaszyfrowane w języku angielskim (oryginale). Z tego powodu odpowiedzi również należy podawać w tym samym języku (mając polską książkę jest to bardzo trudne przy niektórych pytaniach – tłumaczenie).

Szyfrogramy

1. Trudne początki

Yjcv ku vjg pcog qh vjg uauvgo wugf da jco qrgtcvqtu vq ocmg htgg rjqpg ecnnu?
What is the name of the system used by ham operators to make free phone calls?

Metoda: ROT2
Odpowiedź: autopatch

 

2. Tylko w odwiedziny

Wbth lal voe htat oy voe wxbirtn vfzbqt wagye C poh aeovsn vojgav?
What was the name of the central office where I was almost caught?

Metoda: Vigenere (autopatch)
Odpowiedź: Sunset-Gower

 

3. Grzech pierworodny

Nyrk grjjnfiu uzu Z xzmv kf jvk lg re rttflek fe Kyv Rib?
What password did I give to set up an account on The Ark?

Metoda: ROT16
Odpowiedź: jelly

 

4. Mistrz ucieczki

Flle ujw esc wexp mo xsp kjr hsm hiwwcm, "Wplpll stq lec qma e wzerg mzkk!"?
What was the name of the man who yelled, "Search his car for a logic bomb!"?

Metoda: Vigenere (jelly)
Odpowiedź: Steve Cooley

 

5. Wszystkie twoje linie telefoniczne należą do mnie

Bmfy ytbs ini N mnij tzy ns zsynq ymj Ozajsanqj Htzwy qtxy ozwnxinhynts tajw rj?
What town did I hide out in until the Juvenvile Court lost jurisdiction over me?

Metoda: ROT5
Odpowiedź: Oroville

 

6. Haker z miłości

Kyoo olxi rzr Niyovo Cohjpcx ojy dn T apopsy?
What game did Sandra Lambert ask if I played?

Metoda: Vigenere (oroville)
Odpowiedź: Hearts (kierki)

 

7. Małżeństwo w pośpiechu

Kvoh wg hvs boas ct hvs Doqwtwq Pszz sadzcmss kvc fsor hvs wbhsfboz asac opcih am voqywbu oqhwjwhwsg cjsf hvs voa forwc?
What is the name of the Pacific Bell employee who read the internal memo about my hacking activities over the ham radio?

Metoda: ROT19
Odpowiedź: Bill Cook

 

8. Lex Luthor

Iwh xwqv wpvpj fwr Vfvyj qks wf nzc ncgsoo esg psd gwc ntoqujvr ejs rypz nzfs?
How much money did Lenny owe me for losing the bet for cracking the door code?

Metoda: Vigenere (billcook)
Odpowiedź: 150$

 

9. Plan rabatowy Kevina Mitnicka

Hsle td esp epcx qzc dzqehlcp mfcypo zy esp nsta esle Yzglepw dpye xp?
What is the term for software burned on the chip that Novatel sent me?

Metoda: ROT22
Odpowiedź: firmware

 

10. Tajemniczy haker

Bprf cup esanqneu xmm gtknv amme U biiwy krxheu Iwqt Taied?
What guy answered the phone when I first called Eric Heinz?

Metoda: Vigenere (firmware)
Odpowiedź: Henry Spiegel

 

11. Nieczysta gra

Lwpi idlc sxs bn upiwtg axkt xc lwtc X bdkts xc lxiw wxb?
What town did my father live in when I moved in with him?

Metoda: ROT15
Odpowiedź: Calabasas

 

12. Wszędzie cię znajdą

Yhlt xak tzg iytfrfad RanBfld squtpm uhst uquwd ce mswf tz wjrwtsr a wioe lhsv Ecid mwnlkoyee bmt oquwdo't ledn mp acomt?
What was the internal PacBell system that could be used to wiretap a line that Eric mentioned but wouldn't tell me about?

Metoda: Vigenere (calabasas)
Odpowiedź: SAS

 

13. Na podsłuchu

Zkdw lv wkh qdph ri wkh SL ilup wkdw zdv zluhwdsshg eb Sdflilf Ehoo?
What is the name of the PI firm that was wiretapped by Pacific Bell?

Metoda: ROT3
Odpowiedź: Teltec

 

14. Ja pluskwę tobie, a ty mnie

Plpki ytw eai rtc aaspx M llogw qj wef ms rh xq?
Where was the pay phone I asked my dad to go to?

Metoda: Vigenere (teltec)
Odpowiedź: Village Market

 

15. „No nie, jakim fartem znaleźliście SAS?”

Ituot oaybmzk ymwqe ftq pqhuoq ftmf Xqiue geqp fa buow gb mzk dmpua euszmxe zqmd Qduo?
Which company makes the device that Lewis used to pick up any radio signals near Eric?

Metoda: ROT12
Odpowiedź: Optoelectronics

 

16. Wpraszając się do Erica

Kwth qzrva rbq lcq rxw Svtg vxcz zm vzs lbfieerl nsem rmh dg ac oef'l cwamu?
What month and day did Eric tell me the wiretaps were put on my dad's lines?

Metoda: Vigenere (optoelectronics)
Odpowiedź: January 27

 

17. Odsłonięcie kurtyny

Epib qa bpm vium wn bpm ixizbumvb kwuxtmf epmzm Q bziksml lwev Mzqk Pmqvh?
What is the name of the apartment complex where I tracked down Eric Heinz?

Metoda: ROT8
Odpowiedź: Oakwood

 

18. Analiza ruchu sieciowego

Khkp wg wve kyfcqmm yb hvh TBS oeidr trwh Yhb MmCiwus wko ogvwgxar hr?
What is the acronym of the FBI squad that Ken McGuire was assigned to?

Metoda: Vigenere (oakwood)
Odpowiedź: WCC3

 

19. Rewelacje

Rcvo dn ivhz ja ocz omvinvxodji oj adiy v kzmnji'n njxdvg nzxpmdot iphwzm pndib oczdm ivhz viy yvoz ja wdmoc?
What is name of the transaction to find a person's social security number using their name and date of birth?

Metoda: ROT21
Odpowiedź: Alphadent

 

20. Z myśliwego ofiara

Wspa wdw gae ypte rj gae dilan lbnsp loeui V tndllrhh gae awvnh "HZO, hzl jaq M uxla nvu?"
What was the name of the steak house where I answered the phone "DMV, how can I help you?"

Metoda: Vigenere (alphadent)
Odpowiedź: Bob Burns

 

21. Kot i mysz

4A 75 6E 67 20 6A 6E 66 20 62 68 65 20 61 76 70 78 61 6E 7A 72 20 74 76 69 72 61 20 67 62 20 47 72 65 65 6C 20 55 6E 65 71 6C 3F
What was our nickname given to Terry Hardy?

Metoda: HEX + ROT13
Odpowiedź: Klingon

 

22. Praca detektywa

Gsig cof dsm fkqeoe vnss jo farj tbb epr Csyvd Nnxub mzlr ut grp lne?
What was the secret name we used for the Wells Fargo code of the day?

Metoda: Vigenere (klingon)
Odpowiedź: Kat

 

23. Nalot

Fqjc nunlcaxwrl mnerln mrm cqn OKR rwcnwcrxwjuuh kanjt fqnw cqnh bnjalqnm vh jyjacvnwc rw Ljujkjbjb?
What electronic device did the FBI intentionally break when they searched my apartment in Calabasas?

Metoda: ROT9
Odpowiedź: boom box

 

24. Znikam

Xvof jg qis bmns lg hvq thlss ktffb J cifsok EAJ uojbthwsbhlsg?
What is the name of the store where I outran DMV investigators?

Metoda: Vigenere (boombox)
Odpowiedź: Kinko

 

25. W ukryciu

Cngz zuct ngy znk grsg sgzkx lux znk xkgr Kxoi Ckoyy?
What town has the alma mater for the real Eric Weiss?

Metoda: ROT6
Odpowiedź: Ellensburg

 

26. Prywatny detektyw

Aslx jst nyk rlxi bx ns wgzzcmgw UP jnsh hlrjf nyk TT seq s cojorpdw pssx gxmyeie ao bzy glc?
What was the name of my favorite TV show where the PI had a business card printer in his car?

Metoda: Vigenere (ellensburg)
Odpowiedź: The Rockford Files

 

27. Tam, gdzie wschodzi słońce

85 102 121 114 32 103 113 32 114 102 99 32 108 121 107 99 32 109 100 32 114 102 99 32 122 109 109 105 113 114 109 112 99 32 71 32 100 112 99 111 115 99 108 114 99 98 32 103 108 32 66 99 108 116 99 112 63
What is the name of the bookstore I frequented in Denver?

Metoda: ASCII + ROT24
Odpowiedź: Tattered Cover

 

28. Łowca trofeów

Phtm zvvvkci sw mhx Fmtvr VOX Ycmrt Emki vqimgv vowx hzh L cgf Ecbst ysi?
What version of the Micro TAC Ultra Lite source code did I ask Alisa for?

Metoda: Vigenere (tatteredcover)
Odpowiedź: doc2

 

29. Wyjazd

126 147 172 163 040 166 172 162 040 154 170 040 157 172 162 162 166 156 161 143 040 145 156 161 040 163 147 144 040 115 156 165 144 153 153 040 163 144 161 154 150 155 172 153 040 162 144 161 165 144 161 040 150 155 040 122 172 155 040 111 156 162 144 077
What was my password for the Novell terminal server in San Jose?

Metoda: OCT + ROT25
Odpowiedź: snowbird

W polskiej wersji książki tłumacz zgubił dwie jedynki w kodzie.

 

30. Zaskoczony

Ouop lqeg gs zkds ulv V deds zq lus DS urqstsn't wwiaps?
What kind of lock did I pick in the HR manager's office?

Metoda: Vigenere (snowbird)
Odpowiedź: Cylinder lock (zamek bębenkowy)

 

31. Oczy na niebie

Alex B25 rixasvo hmh M ywi xs gsrrigx xs xli HQZ qemrjveqi?
What X25 network did I use to connect to the DMV mainframe?

Metoda: ROT4
Odpowiedź: GTE Telenet

 

32. Bezsenność w Seattle

Caem alw Ymek Xptq'd tnwlchvw xz lrv lkkzxv?
What was Lile Elam's password to her server?

Metoda: Vigenere (gtetelenet)
Odpowiedź: m00n$@earth

 

33. Hakowanie Samuraja

Ozg ojglw lzw hshwj gf AH Khggxafy lzsl BKR skcwv ew stgml?
Who wrote the paper on IP Spoofing that JSZ asked me about?

Metoda: ROT20
Odpowiedź: Robert Morris

 

34. Kryjówka w Pasie Biblijnym

Nvbx nte hyv bqgs pj gaabv jmjmwdi whd hyv UVT'g Giuxdoc Gctcwd Hvyqbuvz hycoij?
What was the type of phone service for the MDC's Federal Public Defender phones?

Metoda: Vigenere (robertmorris)
Odpowiedź: Direct link (bezpośrednie połączenie)

 

35. Gra skończona

2B 2T W 2X 2Z 36 36 2P 36 2V 3C W 3A 32 39 38 2Z W 3D 33 31 38 2V 36 3D W 2R 2Z 3C 2Z W 3E 3C 2V 2X 2Z 2Y W 3E 39 W 2R 32 2V 3E W 2V 3A 2V 3C 3E 37 2Z 38 3E W 2X 39 37 3A 36 2Z 2S 1R
My cellular phone signals were traced to what apartment complex?

Metoda: Base36 + ROT6
Odpowiedź: Players Club

 

36. „Walentynki” z FBI

Lsar JSA cryoi ergiu lq wipz tnrs dq dccfunaqi zf oj uqpctkiel dpzpgp I jstcgo cu dy hgq?
What FBI agent tried to look into my briefcase in my apartment before I locked it on him?

Metoda: Vigenere (playersclub)
Odpowiedź: Glasgow

 

37. Jak zostałem kozłem ofiarnym

V2hhdCBGQkkgYWdlbnQgYXNrZWQgU3VuIE1pY3Jvc3lzdGVtcyB0byBjbGFpbSB0aGV5IGxvc3QgODAgbWlsbGlvbiBkb2xsYXJzPw==
What FBI agent asked Sun Microsystems to claim they lost 80 million dollars?

Metoda: Base64
Odpowiedź: Kathleen Carson

 

38. Uśmiech losu

100-1111-10-0 011-000-1-111 00-0100 1101-10-1110-000-101-11-0-1 0111-110-00-1001-1-101 111-0-11-0101-010-1-101 111-10-0100 11-00-11
What does my favorite bumper sticker say?

Metoda: MORSE
Odpowiedź: Free Kevin

W tym szyfrogramie występują dwa błędy:

  • Słowo favorite – powinno się pisać favourite
  • Ostatni „wyraz” po zdekodowaniu szyfrogramu programem to imi – jest to błędy zapis znaku zapytania, który zamiast 11-00-11 powinien mieć postać 110011

 

Kody źródłowe programów

AHO Converter (ASCII HEX OCTAL Converter)

Konwertuje ciąg zapisany liczbami na znaki.

Użyty w szyfrogramach: 21, 27, 29

#include <iostream>
#include <iomanip>
#include <vector>
#include <sstream>

using namespace std;

vector<int> split(string & s, char m);

int main(int argc, char** argv)
{
    vector<int> tokens;
    string input;
    int c;
    char mode;

    if(argc == 2) {
        if(argv[1][0] == 'x')
            mode = 'x';
        else if(argv[1][0] == 'o')
            mode = 'o';
        else
            mode = 'a';
    } else {
        cout<<"AHOConverter <xoa>\n";
        return 0;
    }

    cout<<"AHO Converter : "<<(mode == 'x' ? "HEX" : (mode == 'o' ? "OCT" : "ASCII"))<<" mode > ";
    getline(cin, input);

    tokens = split(input, mode);

    cout<<"\n -- ";
    for(int i=0;i<tokens.size();i++)
        cout<<(char)tokens[i];
    cout<<" --\n";

    return 0;
}

vector<int> split(string & s, char m)
{
    vector<int> tokens;
    stringstream ss(s);
    int buff;

    if(m == 'x')
        while (ss >> hex >> buff)
            tokens.push_back(buff);
    else if(m == 'o')
        while (ss >> oct >> buff)
            tokens.push_back(buff);
    else
        while (ss >> buff)
            tokens.push_back(buff);

    return tokens;
}

 

Base36

Konwersja z systemu o podstawie 36 na system o podstawie 10.

Użyty w szyfrogramach: 35

#include <iostream>
#include <vector>
#include <sstream>
#include <cstdlib>

using namespace std;

vector<string> split(string & s);
string decode(string & s);

int main()
{
    string input;

    cout<<"Base36 > ";
    getline(cin, input);

    cout<<"\n -- "<<decode(input)<<" --\n";
    return 0;
}

vector<string> split(string & s)
{
    vector<string> tokens;
    string buff;
    stringstream ss(s);

    while (ss >> buff)
        tokens.push_back(buff);

    return tokens;
}

string decode(string & s)
{
    vector<string> tokens = split(s);
    string out;

    for(int i=0;i<tokens.size();i++)
        out += strtoul(tokens[i].c_str(), NULL, 36);

    return out;
}

 

Base64

Algorytm Base64.

Użyty w szyfrogramach: 37

#include <iostream>

using namespace std;

string base64_decode(string & s);
char inline base(char c);

int main()
{
    string input;

    cout<<"Base64 > ";
    getline(cin, input);

    cout<<"\n -- "<<base64_decode(input)<<" --\n";
    return 0;
}

string base64_decode(string & s)
{
    int c;
    string out;

    for(c=0;c<s.size();c+=4) {
        out += (base(s[c]) << 2) | (base(s[c + 1]) >> 4);
        out += (base(s[c + 1]) << 4) | ((base(s[c + 2]) >> 2) & 15);
        out += ((base(s[c + 2]) << 6) & 192) | (base(s[c + 3]) & 63);
    }

    return out;
}

char inline base(char c)
{
    return c - (isupper(c) ? 65 : (islower(c) ? 71 : (isdigit(c) ? -4 : (c == '+' ? -19 : (c == '/' ? -16 : c)))));
}

 

Morse

Zamienia kod zerojedynkowy pisany alfabetem Morse’a na tekst.

Użyty w szyfrogramach: 38

#include <iostream>

using namespace std;

string decode(string & s);

int main()
{
    string input;

    cout<<"Morse > ";
    getline(cin, input);

    cout<<"\n -- "<<decode(input)<<" --\n";

    return 0;
}

string decode(string & s)
{
    string out, letter;
    int c = 0;

    while(s[c - 1]) {
        if(isdigit(s[c]))
            letter += s[c];
        else {
            if(letter == "10")         out += "a";
            else if(letter == "0111")  out += "b";
            else if(letter == "0101")  out += "c";
            else if(letter == "011")   out += "d";
            else if(letter == "1")     out += "e";
            else if(letter == "1101")  out += "f";
            else if(letter == "001")   out += "g";
            else if(letter == "1111")  out += "h";
            else if(letter == "11")    out += "i";
            else if(letter == "1000")  out += "j";
            else if(letter == "010")   out += "k";
            else if(letter == "1011")  out += "l";
            else if(letter == "00")    out += "m";
            else if(letter == "01")    out += "n";
            else if(letter == "000")   out += "o";
            else if(letter == "1001")  out += "p";
            else if(letter == "0010")  out += "q";
            else if(letter == "101")   out += "r";
            else if(letter == "111")   out += "s";
            else if(letter == "0")     out += "t";
            else if(letter == "110")   out += "u";
            else if(letter == "1110")  out += "v";
            else if(letter == "100")   out += "w";
            else if(letter == "0110")  out += "x";
            else if(letter == "0100")  out += "y";
            else if(letter == "0011")  out += "z";
            else if(letter == "10000") out += "1";
            else if(letter == "11000") out += "2";
            else if(letter == "11100") out += "3";
            else if(letter == "11110") out += "4";
            else if(letter == "11111") out += "5";
            else if(letter == "01111") out += "6";
            else if(letter == "00111") out += "7";
            else if(letter == "00011") out += "8";
            else if(letter == "00001") out += "9";
            else if(letter == "00000") out += "0";

            if(s[c] == ' ') out += " ";

            letter = "";
        }

        c++;
    }

    return out;
}

 

ROTCracker

Łamie szyfr tworząc tablicę wszystkich możliwych kombinacji najdłuższego słowa w ciągu i porównuje je ze słownikiem.

Uwaga! Program wymaga angielskiego słownika – pobierz dictionary.txt

Użyty w szyfrogramach: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35

#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

vector<string> split(string & s);
int longest(vector<string> & v);
int crack(string & s);
string decode(string & s);

string abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

int main()
{
    string sequence;

    cout<<"ROT Cracker > ";
    getline(cin, sequence);

    cout<<"\n -- "<<decode(sequence)<<" --\n";
    return 0;
}

vector<string> split(string & s)
{
    vector<string> tokens;
    string buff;
    stringstream ss(s);
    int i;

    while (ss >> buff) {
        i = 0;
        while(buff[i]) {
            if(isupper(buff[i]))
                buff[i] += 32;
            else if(!islower(buff[i]))
                buff.erase(i, 1);

            i++;
        }

        tokens.push_back(buff);
    }

    return tokens;
}

int longest(vector<string> & v)
{
    int pos = 0;

    for(int i=0;i<v.size();i++)
        if(v[i].size() > v[pos].size())
            pos = i;

    return pos;
}

int crack(string & s)
{
    char shift;
    int c;
    string tokens[25], word;
    bool done = false;
    fstream dictionary("dictionary.txt", ios::in);

    if(!dictionary) {
        cerr<<"Brak pliku słownika.";
        return -1;
    }

    for(int i=1;i<26;i++) {
        c = 0;

        while(s[c])
            tokens[i] += abc[(s[c++] - 97 + i) % 26];
    }

    while(dictionary && !done) {
        dictionary>>word;

        if(word.size() == s.size())
            for(int i=0;i<25;i++)
                if(word == tokens[i]) {
                    shift = i;
                    done = true;
                    break;
                }
    }

    dictionary.close();
    return done ? shift : -1;
}

string decode(string & s)
{
    vector<string> tokens = split(s);
    int shift = crack(tokens[longest(tokens)]),
        c = 0;
    string out;

    if(shift != -1)
        while(s[c]) {
            if(isalpha(s[c]))
                out += abc[(s[c] - (isupper(s[c]) ? 65 : 97) + shift) % 26 + (isupper(s[c]) ? 26 : 0)];
            else
                out += s[c];

            c++;
        }

    return out.empty() ? "Nie znaleziono klucza" : out;
}

 

Vigenere

Dekoduje ciąg zapisany algorytmem Vigenere’a po podaniu poprawnego hasła.

Użyty w szyfrogramach: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36

#include <iostream>
#include <cmath>

using namespace std;

string decode(string & s, string & k);

int main()
{
    string sequence, key;

    cout<<"Vigenere > ";
    getline(cin, sequence);

    cout<<"Klucz > ";
    getline(cin, key);

    cout<<"\n -- "<<decode(sequence, key)<<" --\n";

    return 0;
}

string decode(string & s, string & k)
{
    int c = 0, d = 0;
    string out, abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    while(s[c]) {
        out += isalpha(s[c]) ? abc[(26 - (tolower(k[d++ % k.size()]) - tolower(s[c]))) % 26 + (isupper(s[c]) ? 26 : 0)] : s[c];
        c++;
    }

    return out;
}

Facebook Twitter Delicious Digg Reddit

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current month ye@r day *

CommentLuv badge