code développé pour résoudre le challenge sstic2012
./input/data/blah: bloc de donnéesblahextrait du binairessticrypt./input/data/blob: bloc de donnéesblobextrait du binairessticrypt./input/data/check.pyc: bloc de donnéescheck_pycextrait du binairessticrypt./input/data/init_rom: bloc de donnéesinit_romextrait du binairessticrypt./input/data/init_rom_scan_record_0: premier "scan record" deinit_rom(code de la routine d'interruption)./input/data/init_rom_scan_record_1: deuxième "scan record" deinit_rom(relocations à appliquer)./input/data/init_rom_scan_record_2: troisième "scan record" deinit_rom(saut sur la routine)./input/data/layer1: bloc de donnéeslayer1extrait du binairessticrypt./input/data/layer2: bloc de donnéeslayer2extrait du binairessticrypt(chiffré)./input/data/layer3: bloc de donnéeslayer2extrait du binairessticrypt(chiffré)./input/data/stage2_rom: bloc de donnéesstage2_romextrait du binairessticrypt./input/data/stage2_rom_scan_record_0: premier "scan record" destage2_rom(code de la routine d'interruption)./input/data/stage2_rom_scan_record_0.relocated: premier "scan record" destage2_rom(code de la routine d'interruption) après application des relocations./input/data/stage2_rom_scan_record_1: deuxième "scan record" destage2_rom(relocations à appliquer)./input/data/stage2_rom_scan_record_2: troisième "scan record" destage2_rom(saut sur la routine)./input/irc.log: conversation irc extraite de l'image disque./input/secret: fichier à déchiffrer pour trouver l'adresse email./input/ssticrypt: programme principal du challenge
./part1_wb/code/reverse.py: réimplémentation du fichiercheck.pyc, implémentation de l'attaque par cryptanalyse./part1_wb/doc: les articles académiques référencés dans la solution
./part2a_rom/code/emul: code de l'émulateur cy16./part2a_rom/code/reverse_ssticrypt: réimplémentation en C de la routine de vérification de la clé (client.ccorrespond au binairessticrypt,server.cest la réimplémentation de la ROM)./part2a_rom/code/usb_hook: bibliothèque partagée permettant de remplacer les appels aux fonctions de lalibusbpar des fonctions équivalentes utilisant des sockets TCP pour les communications./part2a_rom/data/cy16-rom.asm: désassemblage de la ROM obtenu avec Metasm./part2a_rom/data/traces: traces d'exécution entre le binairessticryptMIPS et l'émulateur./part2a_rom/doc: documents de spécification sur le processeur CY16./part2a_rom/tools/apply_reloc.rb: applique les relocation sur la routine d'interruption./part2a_rom/tools/extract_data.rb: extrait les différents blocs de données du binairessticrypt./part2a_rom/tools/scan_signature.rb: identifier les "scan records" dans les blocs de données envoyés à la webcam
./part2b_vm/layer1/bflayer1.c: code implémentant la recherche exhaustive sur la première partie de la clé./part2b_vm/layer1/bflayer1.orig.c: code autogénéré parvmdisas.rbà partir du bytecodelayer1./part2b_vm/layer1/layer1.asm: désassemblage dulayer1parvmdisas.rb./part2b_vm/layer2/bflayer2.c: code implémentant la recherche exhaustive sur la seconde partie de la clé./part2b_vm/layer2/bflayer2.orig.c: code autogénéré parvmdisas.rbà partir du bytecodelayer2(déchiffré)./part2b_vm/layer2/layer2.decoded: contenu dulayer2une fois déchiffré./part2b_vm/layer2/layer2.decoded.asm: désassemblage dulayer2(déchiffré) parvmdisas.rb./part2b_vm/layer3/bflayer3.c: code implémentant la recherche exhaustive sur la troisième partie de la clé./part2b_vm/layer3/bflayer3.orig.c: code autogénéré parvmdisas.rbà partir du bytecodelayer3(déchiffré)./part2b_vm/layer3/layer3.decoded: contenu dulayer3une fois déchiffré./part2b_vm/layer3/layer3.decoded.asm: désassemblage dulayer3(déchiffré) parvmdisas.rb./part2b_vm/vmdisas.rb: désassembleur et décompilateur en C pour la machine virtuelle du challenge
./part3_secret/extract.c: extrait les blocs corrects./part3_secret/findblocks.c: implémente une heuristique de recherche de blocs en se basant sur la différence d'entropie d'un bloc après déchiffrement