Méthode bourrine avec objdump
Utilisation d’objdump en lui demandant le full-contents
et en recherchant le flag FCSC en étant large (regex) :
$ objdump --full-contents aaarg | grep -B5 -A20 "F.*C.*S.*C"
401280 c3 .
Contents of section .fini:
401284 4883ec08 4883c408 c3 H...H....
Contents of section .rodata:
402000 01000200 00000000 00000000 00000000 ................
402010 46e2808d 43e2808d 53e2808d 43e2808d F...C...S...C...
402020 7be2808d 66e2808d 39e2808d 61e2808d {...f...9...a...
402030 33e2808d 38e2808d 61e2808d 64e2808d 3...8...a...d...
402040 61e2808d 63e2808d 65e2808d 39e2808d a...c...e...9...
402050 64e2808d 64e2808d 61e2808d 33e2808d d...d...a...3...
402060 61e2808d 39e2808d 61e2808d 65e2808d a...9...a...e...
402070 35e2808d 33e2808d 65e2808d 37e2808d 5...3...e...7...
402080 61e2808d 65e2808d 63e2808d 31e2808d a...e...c...1...
402090 38e2808d 30e2808d 63e2808d 35e2808d 8...0...c...5...
4020a0 61e2808d 37e2808d 33e2808d 64e2808d a...7...3...d...
4020b0 62e2808d 62e2808d 37e2808d 63e2808d b...b...7...c...
4020c0 33e2808d 36e2808d 34e2808d 66e2808d 3...6...4...f...
4020d0 65e2808d 31e2808d 33e2808d 37e2808d e...1...3...7...
4020e0 66e2808d 63e2808d 36e2808d 37e2808d f...c...6...7...
4020f0 32e2808d 31e2808d 64e2808d 37e2808d 2...1...d...7...
402100 39e2808d 39e2808d 37e2808d 63e2808d 9...9...7...c...
402110 35e2808d 34e2808d 65e2808d 38e2808d 5...4...e...8...
402120 64e2808d 7d00 d...}.
Contents of section .eh_frame_hdr:
402128 011b033b 44000000 07000000 f8eeffff ...;D...........
402138 a0000000 28efffff 60000000 58efffff ....(...`...X...
On constate que notre flag se trouve dans la section .rodata
avec des données parasites pour brouiller les pistes.
Méthode bourrine avec xxd
Utilisation de l’outil xxd
en lui demandant le dump tout le contenu et en filtrant également pour trouver le flag FCSC :
$ xxd aaarg | grep -A20 "F.*C.*S.*C"
00002010: 46e2 808d 43e2 808d 53e2 808d 43e2 808d F...C...S...C...
00002020: 7be2 808d 66e2 808d 39e2 808d 61e2 808d {...f...9...a...
00002030: 33e2 808d 38e2 808d 61e2 808d 64e2 808d 3...8...a...d...
00002040: 61e2 808d 63e2 808d 65e2 808d 39e2 808d a...c...e...9...
00002050: 64e2 808d 64e2 808d 61e2 808d 33e2 808d d...d...a...3...
00002060: 61e2 808d 39e2 808d 61e2 808d 65e2 808d a...9...a...e...
00002070: 35e2 808d 33e2 808d 65e2 808d 37e2 808d 5...3...e...7...
00002080: 61e2 808d 65e2 808d 63e2 808d 31e2 808d a...e...c...1...
00002090: 38e2 808d 30e2 808d 63e2 808d 35e2 808d 8...0...c...5...
000020a0: 61e2 808d 37e2 808d 33e2 808d 64e2 808d a...7...3...d...
000020b0: 62e2 808d 62e2 808d 37e2 808d 63e2 808d b...b...7...c...
000020c0: 33e2 808d 36e2 808d 34e2 808d 66e2 808d 3...6...4...f...
000020d0: 65e2 808d 31e2 808d 33e2 808d 37e2 808d e...1...3...7...
000020e0: 66e2 808d 63e2 808d 36e2 808d 37e2 808d f...c...6...7...
000020f0: 32e2 808d 31e2 808d 64e2 808d 37e2 808d 2...1...d...7...
00002100: 39e2 808d 39e2 808d 37e2 808d 63e2 808d 9...9...7...c...
00002110: 35e2 808d 34e2 808d 65e2 808d 38e2 808d 5...4...e...8...
00002120: 64e2 808d 7d00 0000 011b 033b 4400 0000 d...}......;D...
00002130: 0700 0000 f8ee ffff a000 0000 28ef ffff ............(...
00002140: 6000 0000 58ef ffff 8c00 0000 18f0 ffff `...X...........
00002150: c800 0000 68f0 ffff e400 0000 f8f0 ffff ....h...........
Si on veut nettoyer un peu :
$ xxd aaarg \
| grep -A20 "F.*C.*S.*C" \
| awk -F' ' '{ print $2 }' \
| xargs \
| tr -d '. ' \
| grep -o "FCSC{.*}"
FCSC{f9a38adace9dda3a9ae53e7aec180c5a73dbb7c364fe137fc6721d7997c54e8d}
Nettoyage rapide, on peut trouver mieux, mais ça fait le job :)
Recherche plus fine avec radare2
Maintenant, on peut utiliser les outils radare2
et notamment rafind
qui permet d’utiliser une regex, et nous recherchons une occurence large de FCSC{
afin de trouver le bon offset des données :
$ rafind2 -e "/F.*C.*S.*C.*{/" ./aaarg
0x2010
Notre flag semble se trouver à l’offset 0x2010
.
Voyons cela avec radare2
en lui demandant d’aller à l’offset 0x2010
(-ns
) et d’afficher le résultat (-qc
) :
$ r2 -ns '0x2010' -qc 'x 277' ./aaarg
0x00002010 46e2 808d 43e2 808d 53e2 808d 43e2 808d F...C...S...C...
0x00002020 7be2 808d 66e2 808d 39e2 808d 61e2 808d {...f...9...a...
0x00002030 33e2 808d 38e2 808d 61e2 808d 64e2 808d 3...8...a...d...
0x00002040 61e2 808d 63e2 808d 65e2 808d 39e2 808d a...c...e...9...
0x00002050 64e2 808d 64e2 808d 61e2 808d 33e2 808d d...d...a...3...
0x00002060 61e2 808d 39e2 808d 61e2 808d 65e2 808d a...9...a...e...
0x00002070 35e2 808d 33e2 808d 65e2 808d 37e2 808d 5...3...e...7...
0x00002080 61e2 808d 65e2 808d 63e2 808d 31e2 808d a...e...c...1...
0x00002090 38e2 808d 30e2 808d 63e2 808d 35e2 808d 8...0...c...5...
0x000020a0 61e2 808d 37e2 808d 33e2 808d 64e2 808d a...7...3...d...
0x000020b0 62e2 808d 62e2 808d 37e2 808d 63e2 808d b...b...7...c...
0x000020c0 33e2 808d 36e2 808d 34e2 808d 66e2 808d 3...6...4...f...
0x000020d0 65e2 808d 31e2 808d 33e2 808d 37e2 808d e...1...3...7...
0x000020e0 66e2 808d 63e2 808d 36e2 808d 37e2 808d f...c...6...7...
0x000020f0 32e2 808d 31e2 808d 64e2 808d 37e2 808d 2...1...d...7...
0x00002100 39e2 808d 39e2 808d 37e2 808d 63e2 808d 9...9...7...c...
0x00002110 35e2 808d 34e2 808d 65e2 808d 38e2 808d 5...4...e...8...
0x00002120 64e2 808d 7d d...}
Il suffit de nettoyer les caractères non-utiles à notre flag final, et nous trouvons bien notre flag :
FCSC{f9a38adace9dda3a9ae53e7aec180c5a73dbb7c364fe137fc6721d7997c54e8d}