Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Programatorská hádanka: Najdi heslo

Ahoj, kdysi dávno se zde objevovali hádanky, které dělal IgorK. Byly velice zábavné. Dneska v práci jsem něco řešil a přitom mě napadla jedna hádanka, tak ji s dovolením odzkouším na vás. Následuje zadání formou fake otázky do poradny:

Mám velký problém, kdysi dávno jsme měli ve firmě cool admina a ten si šifroval svoje soubory svoji vlastní metodou, ale nikdo už neví jak to vlastně dělal a on už u nás nedělá. Jediné, co po něm zbylo je soubor secret.dat a secret_key.dat. Ten soubor secret.dat je pro mě strašně důležitý, protože obsahuje zašifrovaný .zip soubor, ve kterém je uložené důležité heslo k serveru. Pak jsem jestě našel papírek, kde bylo napsáno něco o exkluzivní disjunkci a signed bytech, ale vůbec tomu nerozumím. Zajímavé je, že soubor secret.dat a secret_key.dat mají naprosto stejnou velikost. Nevíte někdo jak soubor dešifrovat, získat tak zip se souborem s heslem?

Zde si můžete zkoušet svá hesla: hof
Přeji úspěšné řešení!

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Pak jsem jestě našel papírek, kde bylo napsáno... To měl kliku! Jen jsem si vzpomněl na nedávný pří… nový
host 05.01.2015 22:03
host
Vylustil som PK, dalej uz ma to nebavi :) Sranda by ale bola, keby ten vysledny zip bol este s hesl… nový
Palos9 05.01.2015 22:03
Palos9
Přemýšlel jsem nad tím, ale muselo by se to zašifrovat starým pkzipem a pak použít pkcrack a plainte… nový
MaSo 05.01.2015 22:07
MaSo
Mezitím další úspěšný řešitel. Jan Fiala :beer: nový
MaSo 05.01.2015 22:09
MaSo
To si někdo hrál, já v tu dobu už skoro spal :-D Ale jako prvni bych zkusil pustit na ty 2 soubory X… nový
Jan Fiala 06.01.2015 07:35
Jan Fiala
Líbí se mi nápad, ale vúbec nevím jak to vyřešit, potom sem napiše prosím postup :D nový
sumik22 05.01.2015 22:16
sumik22
něco o exkluzivní disjunkci nový
Wikan 05.01.2015 22:17
Wikan
Mno, čtu si o tom na wikipedii a zatím pořád nic moc :D (vám to asi docvakne hned, já jsem jenom 13… nový
sumik22 05.01.2015 22:25
sumik22
Spust si kalkulacku, zvol si zobrazit-programatorska. Zvol si hex a bajt. Potom mozes sledovat co sa… nový
Palos9 05.01.2015 22:51
Palos9
Wikan mi to tak nějak vysvětlil princip za který jsem rád...:) nový
sumik22 05.01.2015 22:56
sumik22
Tohle chce mít programátorský mozek.Něco jako tohle: Ráno mi žena povídá:"Až půjdeš z práce,kup chle… nový
Karel04 05.01.2015 22:54
Karel04
To hloupé Lorem Ipsum fakt vleze všude..... :-) Pěkné :-) (vůbec nesouvisí přímo s řešením, ale kdo… nový
marekdrtic 06.01.2015 07:49
marekdrtic
hrátky s XORem, z toho jsem už vyrostl. :-) Máte málo práce, holomci?! nový
touchwood 06.01.2015 08:11
touchwood
Specialní prémie pro toho, kdo to vyřeší bez programování jen skriptem v bash...;-) nový
MaSo 06.01.2015 08:18
MaSo
bash je trapny, kto to spravi ako *.bat subor? :D nový
shiro 06.01.2015 08:49
shiro
Aby to neskončilo jako prémie pro toho, kdo to vyřeší na čtverečkovaném papíru :-P nový
Jan Fiala 06.01.2015 09:09
Jan Fiala
Může to být skript pro NodeJS? nový
Wikan 06.01.2015 08:50
Wikan
bash skript je taky program :-) nový
touchwood 06.01.2015 09:03
touchwood
Tak máme tři úspěšné řešitele, ještě někdo zkusí? ;-) nový
MaSo 07.01.2015 13:15
MaSo
• Co na to budu potrebovat PSPad :-) a udelat naky mensi binarni prevod, zmenit '.priponu'? .dat se… nový
CoCoChanel 07.01.2015 13:18
CoCoChanel
.dat příponu souborů jsem si vymyslel, nemá nic společného s hádankou. Jedíné, co potřebuješ je vědě… nový
MaSo 07.01.2015 13:25
MaSo
Programovat se nemusí. Stačí správný dotaz na Googlu ;) nový
ws79 07.01.2015 14:11
ws79
::) jaký? Když tak PM... Aha, už asi chápu (zasraný NirSoft)...:-) nový
MaSo 07.01.2015 14:30
MaSo
jojo.. xorfiles.html :-) nový
touchwood 07.01.2015 14:36
touchwood
Tak jo, no. :) edit: Sakra, koukám, že pozdě. :D nový
Potkan007 07.01.2015 14:40
Potkan007
ŘEŠENÍ Ano, opravdu stačilo udělat XOR (exkluzivní disjunkci) mezi souborem secret_key.dat a secret… poslední
MaSo 07.01.2015 14:49
MaSo

Přemýšlel jsem nad tím, ale muselo by se to zašifrovat starým pkzipem a pak použít pkcrack a plaintext attack. Tam je ale problém s tím, že pod 64bit Windows už to nejede (leda DosBox). Taková hádanka už tu ale kdysi byla právě od IgoraK...

Tohle chce mít programátorský mozek.Něco jako tohle:
Ráno mi žena povídá:"Až půjdeš z práce,kup chleba.A kdyby měli rohlíky,vezmi jich deset".Rohlíky měli,tak jsem těch chlebů koupil deset. :-D

• Co na to budu potrebovat PSPad :-) a udelat naky mensi binarni prevod, zmenit '.priponu'? .dat se posilal i MAILem a prekladal se pomoci nakého TEXT editoru.
Rad bych, ale kvuli islamo "TERORISTICKEMU ATENTATU" :x: co se odehral zhruba pred hodinou a pul, je tu trochu veselo....

ŘEŠENÍ

Ano, opravdu stačilo udělat XOR (exkluzivní disjunkci) mezi souborem secret_key.dat a secret.dat a výsledek uložit jako .zip. Respektive načíst prvni byte ze souboru secret_key.dat a první byte ze souboru secret.dat a mezi nimi udělat XOR, tím získáme první byte výsledného zipu. Pak pokračujeme až do konce souborů. Využívá se této vlastnosti funkce XOR:
A XOR B = C
B XOR C = A

Tato vlastnost se hojně využívá v počítačové kryptografii.

Program může vypadat, třeba takto (Java):

package testicek;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 *
 * @author MaSo
 */
public class Decrypter {
    
    public static void main(String[] args) throws Exception {
      writeBytesToFile("desecret.zip", decryptFile("secret.dat", readBytesFromFile("secret_key.dat")));
    }

    private static int[] decryptFile(String pathToFile, byte[] key) throws IOException {
        byte[] data = readBytesFromFile(pathToFile);
        int[] ret = new int[data.length];
        for (int i = 0; i < data.length; i++) {
            ret[i] = key[i] ^ data[i];
        }
        return ret;
    }

    private static void writeBytesToFile(String filename, int[] data) throws FileNotFoundException, IOException {
        try (FileOutputStream fos = new FileOutputStream(filename)) {
            for (int i = 0; i < data.length; i++) {
                fos.write(data[i]);
            }
        }
    }

    private static byte[] readBytesFromFile(String filename) throws IOException {
        Path path = Paths.get(filename);
        return Files.readAllBytes(path);
    }
}

Ovšem programovat se nemuselo, stačilo použít utilitu od NirSoftu xorfiles o jejíž existenci jsem nevěděl. Příště vymyslím, něco těžšího...

Zpět do poradny Odpovědět na původní otázku Nahoru