# 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.