---
# System prepended metadata

title: REVERSE-2

---

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