====== 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