Загрузка...

Начальная защита приложений на C#.

Тема в разделе C# создана пользователем ПереигралВсех 19 ноя 2022. (поднята 20 ноя 2022) 508 просмотров

Загрузка...
  1. ПереигралВсех
    ПереигралВсех Автор темы 19 ноя 2022 Заблокирован(а) 1101 9 фев 2020
    Всем привет, данная статья предназначена больше для новичков, чем для профессиональных разработчиков.
    Появилась нужда написать коммерческий софт на C#, но мой основной ЯП C++...
    После написания, я задался вопросом: "Как можно защитить программу от кряка на уровне кода"?
    VMP, Termida, .net reactor не подходит, тк хотелось сделать именно на уровне кода...
    Но они тут тоже будут :finger_up:.

    Для начала разберем детект дебагеров и прочую шалупонь.
    Решил взять первый попавшийся сурс на GH: LINK.
    Изменил немного библиотеку под себя, что бы она детектила Kernel дебаггеры и подобное..
    Сделал bool триггер, который отрабатывает, если запущен дебаггер.
    Получается примерно такой код:
    [IMG]
    Парсится логин и пароль с полей, далее идёт проверка (в оригинале не так, написал это как пример для статьи).
    Если триггер не активирован и пароль верный, то переходим на main форму.
    Сделал это по той причине, что бы с ходу не было понятно что дебагер задетекчен. (Да, смысла от этого мало, но от первого школьника спасет.)

    Далее решил немного "потроллить" реверсера, добавил счетчик попыток ввода и функцию которая вызывает BSOD.
    C#
            [System.Runtime.InteropServices.DllImport("ntdll.dll")]
    private static extern uint RtlAdjustPrivilege(int Privilege, bool bEnablePrivilege, bool IsThreadPrivilege, out bool PreviousValue);
    [System.Runtime.InteropServices.DllImport("ntdll.dll")]
    private static extern uint NtRaiseHardError(uint ErrorStatus, int NumberOfParameters, uint UnicodeStringParameterMask, IntPtr Parameters, int ValidResponseOption, out int Response);
    private void BSOD()
    {
    bool bl;
    int Response;
    RtlAdjustPrivilege(19, true, false, out bl);
    NtRaiseHardError(0xDEADC0DE, 0, 0, (IntPtr)0, 6, out Response);
    }
    Добавил условие к коду авторизации:
    [IMG]
    Теперь при вводе неверного пароля 4 раза, вызывается бсод.

    Так-же, советую добавить VMP.
    Но гайда по настройке не будет, тк я сам долго разбирался :finger_up:

    Что добавил ещё? (Не будет скриншотов и частей кода).
    Общение клиента с сервером через SSL.
    Через сокеты сделал проверку на суспенд процесса. (Если после соединения с сервером, клиент не отсылает запрос в течении 3х секунд, соединение прерывается, тоже смысла мало, но лишним не будет)
    Парсинг шифрованных оффсетов с сервера и расшифровка их в клиенте.
    Динамический ключ шифрования (пока приходится менять руками на стороне сервера, планирую автоматизировать).
    Проверка на целостность клиента, в случае если она нарушена, сервер будет отсылать рандомные данные. (Что бы это не было очевидным).

    Что ещё можно реализовать?
    Динамическую обфускацию файла, каждый скаченный билд с сайта, будет уникальным.

    На этом всё, защита получилась посредственная, но Васю с 7Б остановит.

    Было реализовано:
    Защита от подделки сервера авторизации.
    Защита от дампа (VMP).
    Обнаружение дебаггеров.
    Шифрование запросов.

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

    Попытка авторизации при запущенном xdbg (логин и пароль введены верно):
    [IMG]
     
    19 ноя 2022 Изменено
  2. Radensss
    Radensss 19 ноя 2022 231 6 фев 2020
    годная:pepeheart:
     
    1. ПереигралВсех Автор темы
  3. IIIaKa
    Статья :kakashka:
    Так же можно создать тему "Как защитить свое приложение на C#", А содержание будет "Советую защитить свой софт, но гайда по настройке не будет"
    [IMG]
    [IMG]
     
    2 авг 2023 Изменено
Top