Writeup: CrackMe (by @necrofox)

  • ЯП: C#
  • Тип: .NET
  • Защита: Обфускатор
  • Сложность: 2/10 (субъективно)
  • Задача: получение всех логинов и паролей
  • Автор: @necrofox
  • Хотите сами решить - во вложениях лежит zip. Пароль: rev_time

Внимание!
Ни я, ни автор крэкми, ни в прямом, ни в переносном смыслах не призываем вас к употреблению, хранению или распространению наркотиков и всему, что с этим связано - это плохо, сами понимаете.
Так же этот файл содержит сомнительного содержания гифки. Не знаю, насколько они безопасны для эпилептиков, но я бы на их месте всё же не рисковал.





Пусть вас не смущает этот небольшой дисклеймер - файл называется narkocrackme.exe, ну и выглядит он, конечно же, соответствующе (будьте готовы к назойливому аудиосопровождению):

1720189575204.png


Согласитесь, выглядит поинтереснее банального ввода серийника. Раз уж это .NET, попробуем открыть через .NET Reflector:

1720190066101.png


Нашему пристальному взгляду сразу стала доступна формочка Form1 и интересно выглядящий метод button1_Click. Как уже можно предположить, это та самая кнопка "Log in", и её метод проверяет введённые нами данные. Попробуем посмотреть код этого метода:

1720195142123.png


Внимание сразу же притягивают гигантские строки, закодированные в base64 (внешние функции + набор символов + знак "=" на конце). Сам метод сначала бросается на метку TR_0047, глянем, что там:

1720195328714.png


Как можно заметить, эти закодированные строки мелькают либо в MessageBox, либо в textBox1+textBox2, причём последние участвуют в if-выражении. Ничего не напоминает?

1720195551162.png


Ладно, хватит лить воду, пора заняться декодом. Но надо учитывать, какая самая внешняя функция используется, поскольку почти везде мы имеем конструкции следующего вида:


this.textBox1.Text == Encoding.UTF8.GetString(Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String("..."))))


Которые указывают, что декодить строку нам придётся дважды, но есть одно место:


this.textBox1.Text == Convert.ToBase64String(Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(Convert.FromBase64String(""))))

Которое сначала декодит, а потом обратно шифрует строку, т.е. никакого эффекта эти функции не возымеют, и нам можно просто копипастить то, что внутри. Итак, декодим строки, участвующие в textBox'ах:

Python:
from base64 import b64decode

non_decoded = "bVlzN2VyWSAtINC90LjRh9GC0L7QttC10YHRgtCy0L4=::0YEt0YMt0Lot0LA="
creds = ["VG1WamNtOVhiMnht::UUcxMlpHNWxZM0p2",
         "U0hkcFpGOVk=::UUdoM2FXUmZlQT09",
         "YlZsek4yVnlXUT09::UUcxNWN6ZGxjbms9"]

print("DECODED CREDITS:\n")
print("login: " + "\npassword: ".join(non_decoded.split("::")))
print()
for el in creds:
        decr = el.split("::")
        decr = [b64decode(b64decode(i.encode("utf-8"))).decode("utf-8") for i in decr]
        print("login: " + "\npassword: ".join(decr))
        print()


Запускаем:

1720197160293.png


Попробуем эти креды запустить в формочку:

1720197592130.png


1720197633493.png


1720197670129.png


1720197770661.png




Как можно догадаться, все строки из MessageBox относились к этим обращениям на разные "аккаунты". Я уже упоминал - автор сего чуда юмором явно не обделён, поэтому захреначил аккаунты под несколько довольно известных (в узких кругах) персон. Правда mYs7rY жалко...

Это всё, что нам требовалось - вытащить все логины/пароли. Так что этот несложный крэкми можно назвать решённым!

Надеюсь, этот небольшой райтап вам помог. Удачного ревёрса!

made 4 @rev_with_da_boys
 

Вложения

  • narkocrackme.zip
    2,2 МБ · Просмотры: 27
  • Нравится
Реакции: nsk и Edmon Dantes
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!