LIMB
Вход Регистрация

тема

[СТАТЬЯ]Введение в Реверс-Инжиниринг. .NET 1 часть.

skeet · · 3 ответов · 267 просмотров

Введение в Реверс-Инжиниринг .NET – часть 1​


Обратно же, статья в моем стиле максимально информативно и лаконично.

Вступление​

Доброго времени суток, уважаемые форумчане! Листая наш прекрасный форум, я наткнулся на статью  Что такое реверс-инжиниринг + пару полезных книг
Вдохновившись, я решил написать похожую статью, только мы будем проводить реверс-инжиниринг файлов, написанных на языке C#.

Инструменты​


Различие .NET и нативных x86 приложений​

Нативные приложения:

  • Исходный код (C/C++ и другие) проходит через препроцессор, компилятор и компоновщик.
    В результате получаем исполняемый файл с инструкциями, специфичными для архитектуры и ОС.
  • Код выполняется напрямую процессором без промежуточных виртуальных машин.

.NET приложения:

  • Код на C# компилируется в IL (Intermediate Language).
    IL выполняется в управляемой среде CLR (Common Language Runtime) или её аналогах (JVM для Java).

В последних версиях .NET появилась опция Enable native AOT publish.

Практика: сборка и реверс без Native AOT​

Создадим простую программу с проверкой пароля (
Code:
PasswordCheckerLIMB
):

Code:
    private static void Main()
    {
        Console.WriteLine(Watermark);
        bool loopLIMB = true;
        while (loopLIMB)
        {
            Console.Write("Enter password: ");
            string inputLIMB = Console.ReadLine();
            loopLIMB = CheckPasswordLIMB(inputLIMB);
            Console.WriteLine(Watermark);
        }
    }

    private static bool CheckPasswordLIMB(string pwdLIMB)
    {
        if (string.IsNullOrEmpty(pwdLIMB))
        {
            Console.WriteLine("Password cannot be empty");
            return true;
        }

        if (pwdLIMB == CorrectPasswordLIMB)
        {
            Console.WriteLine("Access granted");
            return false;
        }

        Console.WriteLine("Access denied");
        return true;
    }
}

Программа запрашивает пароль и выводит либо Access granted, либо Access denied. Компилируем через MSVC.

При запуске через CMD может возникнуть ошибка о пропавшей DLL (testdutt.dll). Теперь у нас два пути:


  • Перетащить DLL из папки
    C:\Users<имя ПК>\source\repos<проэкт>\bin\Release\net8.0​
    в папку с EXE и запустить.

    Собрать самодостаточный EXE без внешних DLL (Native AOT).

Исследование сборок в dnSpy​


  1. Открываем EXE в DetectItEasy – это пустой файл с .NET-лоадером.
  2. Загружаем EXE в dnSpy – видим только структуру PE файла.
  3. Загружаем саму DLL в dnSpy и нажимаем правой кнопкой мыши по файлу и нажимаем на  Go To Entry Point – попадаем в наш код, видим константу пароля и метод CheckPasswordLIMB.

Native AOT​

Скомпилировав с Native AOT, мы получим аналогичный результат, лишь без внешних зависимостей. Подробности опустим до части 2.

Защита приложения​

Для минимальной защиты рекомендую использовать .NET Reactor (последняя версия) или скачать его с моего сайта asm.rest:


  • В окне Main Assembly перетаскиваете скомпилированную DLL.
    Выбираете функции защиты и жмёте PROTECT.
  • В папке появится _Secure с защищёнными файлами – переносите туда EXE и запускаете.

Это базовая защита, о продвинутых методах – во второй части.

Практика: анализ чужой  ВРЕДОНОСНОЙ сборки​

Ищем кряк любого читы на форумах или YouTube (пример: https://www.youtube.com/watch?v=UWXIkobGbu4]UWXIkobGbu4[/URL]). После скачивания запускаем DetectItEasy – видим VB.NET.
Загружаем в dnSpy – множество запутанных классов.
Для упрощённого анализа используем онлайн-сканер, например https://www.uncoverit.org/]UncoverIT[/URL]:

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


Книги и материал по C# смотрите на форуме - asm.rest
👍22 😮6 😢2
C фотокарточками была проблема, по этому без них.
В течение часа выложу все на форум.

Введение в Реверс-Инжиниринг. .NET 2 часть.​


Доброго времени суток, это продолжение к статьи "Введение в Реверс-Инжиниринг. .NET 1 часть."

В этой части мы рассмотрим "Гейм-Хакинг" - что это и с чем его едят?

Что такое Game Hacking?​


Гейм хакинг, если переводить дословно то получится взлом игр: game - игра, hacking - взлом.

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

В этой статье мы промодифицируем игру написанную на C# Unity Mono.

Я не буду показывать модификацию каких-либо значений через Cheat Engine - цель статьи обучить реверс инжинирингу .NET программ.

На чем пишут игры?​


Игры чаще всего пишут на:
  • C# Unity
    C++ Unreal Engine
  • Также не редко в больших проектах используют кастомные движки

Популярные игры на Unity:​

Спойлер: Список игр Unity
[]Cuphead

 []Cities: Skylines

[]Subnautica

 []Hollow Knight

[]Ori and the Blind Forest

 []Escape from Tarkov

[]Fall Guys

 []Rust

[]Hearthstone

 []Beat Saber

[]Kerbal Space Program

 []The Forest

[]Monument Valley

 []Superhot

[]Firewatch

 []Genshin Impact

[]Untitled Goose Game

 []Doki Doki Literature Club!

[]Disco Elysium

 []Inside

Известные игры на Unreal Engine 4:​

Спойлер: Список игр UE4
[]Fortnite

 []PUBG: Battlegrounds

[]Ark: Survival Evolved

 []Street Fighter V

[]Final Fantasy VII Remake

 []Observer

[]Outriders

 []The Outer Worlds

[]Life is Strange 2

 []Gears 5

[]Hellblade: Senua's Sacrifice

 []Mortal Kombat 11

[]Tekken 7

 []Psychonauts 2

[]Borderlands 3

 []Pokemon Unite

[]Dragon Quest XI

 []Control

Известные игры на Unreal Engine 5:​

Спойлер: Список игр UE5
[]S.T.A.L.K.E.R. 2: Heart of Chornobyl (UE5)

 []The Matrix Awakens (UE5)

[]Lords of the Fallen (2023) (UE5)

 []Tekken 8 (UE5)

[]The Witcher 4 (TBA, UE5)

 []Life Is Strange: Double Exposure (UE5)

[]Senua's Saga: Hellblade II (UE5)

 []Hell is Us (UE5)

[]The Day Before (UE5)

 []Black Myth: Wukong (UE5)

[]The Alters (UE5)

 []The Blood of Dawnwalker (UE5)

[]Silent Hill 2 (2024, UE5)

 []Little Nightmares III (UE5)

[]OD (UE5)

 []Subnautica 2 (UE5)

Unity: Mono vs IL2CPP​


В статье мы рассмотрим Unity.

Игры написанные на движке Unity могут быть либо Mono, либо IL2CPP.

Mono игры​

MONO игры используют C# почти в оригинальном виде (JIT) что делает их полностью уязвимыми для любых модификаций.
https://docs.unity3d.com/6000.0/Documentation/Manual/scripting-backends-mono.html]Документация Unity Mono[/URL]

IL2CPP игры​

IL2CPP (IL TO C++) - это игры которые преобразуются в C++, а после в машинный код, что усложняет анализ и взлом. Но на IL2CPP существует огромное количество дамперов, которые делают процесс взлома легче.

Практический пример: взлом Mono игры​


В данной части мы рассмотрим Mono игру. Подопытная игра будет "SchoolBoy Runaway".

Шаг 1: Поиск игровых файлов​


Открывая папку с игрой мы видим различные файлы, но нас интересует только папка "SchoolBoy Runaway_Data".
Не удалось прогрузить медиа

Здесь открываем папку "Managed" и ищем главный файл.
Не удалось прогрузить медиа

Шаг 2: Декомпиляция​

Не удалось прогрузить медиа

Assembly-CSharp.dll - это и есть вся игра! Перекидываем её в dnSpy.

В dnSpy мы видим различное количество классов, связанных с игрой.
Не удалось прогрузить медиа

Шаг 3: Модификация​


Теперь мы можем редактировать как хотим, написать совершенно любой чит.

Пример модификации:
Я нашел класс, где измеряется FPS, и отредактировал его так, что теперь пишется текст "hacked by LIMB".

Результат​

Не удалось прогрузить медиа

Вот и всё! Так легко взламывать игры, написанные на Mono.

Скажу по секрету: с Unreal Engine и IL2CPP всё делается почти также, только немного сложнее.

Заключение​


За эту короткую статью мы узнали:

  1. Какие бывают движки для создания игр
    Как писать читы под Unity Mono игры
  2. Основы работы с dnSpy для декомпиляции игр

Спасибо за прочтение и ДО СВИДАНИЯ!​

Демонстрационное видео: 
Не удалось прогрузить медиа
👍4
Ответskeet

Введение в Реверс-Инжиниринг. .NET 2 часть.​ Доброго времени суток, это продолжение к статьи "Введение в Реверс-Инжиниринг. .NET 1 часть." В этой части мы рассмотрим "Гейм-Хакинг" - что это и с чем его едят? Что такое…

В этой статье попробовал BB Code,
👍1

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.