====== babyRev ====== ===== Analysis ===== file nous dit que c'est un executable avec addresses dynamiques et avec les infos de debug {{:screenshot_2025-07-12_235722.png?nolink|}} strings nous donne un flag mais c'est probablement pas directement utilisable {{:screenshot_2025-07-13_000743.png?nolink|}} ltrace nous montre un appel a strncmp {{:screenshot_2025-07-13_000902.png?nolink|}} on voit que ya un mapping fait sur l'input sur les characteres lowercase {{:screenshot_2025-07-13_001043.png?nolink|}} ===== Reverse ===== pour l'instant on a notre flag a comparer apres mapping L3AK{ngx_qkt_fgz_ugffq_uxtll_dt} a partir de la on peut facilement extraire le mapping en lui passant une string de a-z en input sinon on ouvre dans ghidra et on voit ce que ca donne {{:screenshot_2025-07-13_001259.png?nolink|}} on voit sur ghidra que dans notre main on a un init remap, on va y jeter un coup d'oeil dans le init_remap on a directement la table de mapping qu'on veut {{:screenshot_2025-07-13_001429.png?nolink|}} si on la convertit en code ca donne un truc du genre void init_remap(void) { for (int i = 0; i < 0x80; i++) { remap[i] = (char)i; } remap['a'] = 'q'; remap['b'] = 'w'; remap['c'] = 'e'; remap['d'] = 'r'; remap['e'] = 't'; remap['f'] = 'y'; remap['g'] = 'u'; remap['h'] = 'i'; remap['i'] = 'o'; remap['j'] = 'p'; remap['k'] = 'a'; remap['l'] = 's'; remap['m'] = 'd'; remap['n'] = 'f'; remap['o'] = 'g'; remap['p'] = 'h'; remap['q'] = 'j'; remap['r'] = 'k'; remap['s'] = 'l'; remap['t'] = 'z'; remap['u'] = 'x'; remap['v'] = 'c'; remap['w'] = 'v'; remap['x'] = 'b'; remap['y'] = 'n'; remap['z'] = 'm'; } sauf que nous on veut l'inverse donc void init_reverse_remap(void) { for (int i = 0; i < 0x80; i++) { reverse_remap[i] = (char)i; } reverse_remap['q'] = 'a'; reverse_remap['w'] = 'b'; reverse_remap['e'] = 'c'; reverse_remap['r'] = 'd'; reverse_remap['t'] = 'e'; reverse_remap['y'] = 'f'; reverse_remap['u'] = 'g'; reverse_remap['i'] = 'h'; reverse_remap['o'] = 'i'; reverse_remap['p'] = 'j'; reverse_remap['a'] = 'k'; reverse_remap['s'] = 'l'; reverse_remap['d'] = 'm'; reverse_remap['f'] = 'n'; reverse_remap['g'] = 'o'; reverse_remap['h'] = 'p'; reverse_remap['j'] = 'q'; reverse_remap['k'] = 'r'; reverse_remap['l'] = 's'; reverse_remap['z'] = 't'; reverse_remap['x'] = 'u'; reverse_remap['c'] = 'v'; reverse_remap['v'] = 'w'; reverse_remap['b'] = 'x'; reverse_remap['n'] = 'y'; reverse_remap['m'] = 'z'; } reste plus qu'a faire un petit programme a la con pour passer le flag initial qu'on avait dans ce mapping et ca donne {{:screenshot_2025-07-13_001959.png?nolink|}} voila done