# REVERSE-2 Оценка: 20 ## Описание В данном задании необходимо выполнить обратную разработку и получить секретную строку. [Файл №1](https://github.com/dered-cybersecurity/nto_2023/blob/main/1-offensive/REVERSE-2/4570b97e-87eb-4094-bdac-e309d3c4570d_old_times) ## Решение Задачей участника является изучить Оpen-source библиотеку Unicorn и понять принцип работы байткода. В предоставленном бинарном файле *task/old_times* отсутствует отладочная информация и применена статическая линковка. Участник должен найти вызов uc_mem_write и оттуда получить адрес байткод строки, из аргументов uc_open получить архитектуру байткода: MIPS32LE. Дизассемблированный байткод: ```assembly xor $t1, $t1, $a0 lui $s0, 0x4a40 ori $s0, $s0, 0x4d4b subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 xor $t1, $t1, $t2 lui $s0, 0x3117 ori $s0, $s0, 0x257b subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 xor $t1, $t1, $t3 lui $s0, 0x6e22 ori $s0, $s0, 0x1112 subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 xor $t1, $t1, $t4 lui $s0, 0xa7d ori $s0, $s0, 0x457a subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 xor $t1, $t1, $t5 lui $s0, 0x3b0e ori $s0, $s0, 0x1a4b subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 xor $t1, $t1, $t6 lui $s0, 0x6851 ori $s0, $s0, 0x297f subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 xor $t1, $t1, $t7 lui $s0, 0x1b08 ori $s0, $s0, 0x1602 subu $a0, $t1, $s0 sltu $v0, $zero, $a0 xori $v0, $v0, 1 add $v1, $v1, $v0 move $v0, $v1 addiu $s0, $zero, 7 subu $v0, $v0, $s0 sltu $v0, $zero, $v0 xori $v1, $v0, 1 ``` Проанализировав байткод, участник должен заметить, что вводимый флаг записывается в регистры *t1*-*t7* и проверяется следующим образом: ```C int c, s, ret; s = 0 c = 0x2c2c2c2c // a0 c &= t1 s = (c == 0x2c242c28 ? s + 1: s) c ^= t2 s = (c == 0x7b4c1c77 ? s + 1: s) c ^= t3 s = (c == 0x7b4c1c77 ? s + 1: s) c &= t4 s = (c == 0x4e787513 ? s + 1: s) c ^= t5 s = (c == 0x4e506011 ? s + 1: s) c ^= t6 s = (c == 0x62426226 ? s + 1: s) c &= t7 s = (c == 0x20406024 ? s + 1: s) ``` Далее решающему остается найти такие t1-t7, при которых s будет равно 7.