code développé pour résoudre le challenge sstic2012
./input/data/blah
: bloc de donnéesblah
extrait du binairessticrypt
./input/data/blob
: bloc de donnéesblob
extrait du binairessticrypt
./input/data/check.pyc
: bloc de donnéescheck_pyc
extrait du binairessticrypt
./input/data/init_rom
: bloc de donnéesinit_rom
extrait 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éeslayer1
extrait du binairessticrypt
./input/data/layer2
: bloc de donnéeslayer2
extrait du binairessticrypt
(chiffré)./input/data/layer3
: bloc de donnéeslayer2
extrait du binairessticrypt
(chiffré)./input/data/stage2_rom
: bloc de donnéesstage2_rom
extrait 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.c
correspond au binairessticrypt
,server.c
est la réimplémentation de la ROM)./part2a_rom/code/usb_hook
: bibliothèque partagée permettant de remplacer les appels aux fonctions de lalibusb
par 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 binairessticrypt
MIPS 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 dulayer1
parvmdisas.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 dulayer2
une 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 dulayer3
une 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