Загрузка...

Initial protection of applications in C#.

Thread in C# created by ПереигралВсех Nov 19, 2022. (bumped Nov 20, 2022) 531 view

  1. ПереигралВсех
    ПереигралВсех Topic starter Nov 19, 2022 Banned 1098 Feb 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]
     
  2. Radensss
    Radensss Nov 19, 2022 231 Feb 6, 2020
    годная:pepeheart:
     
    1. ПереигралВсех Topic starter
    2. vtlstolyarov
  3. IIIaKa
    Статья :kakashka:
    Так же можно создать тему "Как защитить свое приложение на C#", А содержание будет "Советую защитить свой софт, но гайда по настройке не будет"
    [IMG]
    [IMG]
     
Loading...
Top