• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Один из вариантов обфускации кода (c++)

Apostol

Участник
Сообщения
3
Реакции
3
0 руб.
Привет всем , сегодня я расскажу как можно сделать неочевидным исполняемый код , без отладки ( в случае если у вас имеется хорошая защита от дебагга , то этот метод будет для вас эффективным )
допустим есть у нас класс , который мы хотим запутать и будет он вида :
C++:
class cProtect
{
public:
    void AntiDbg( )
    { }
    void  EraseHeaders( )
    { }
}Protect;
В случае если вы , захотите ее вызвать ее , то в исполняемом коде она будет вида
call Адрес_функции
Наша задача не дать найти адрес функции . Для этого я предлагаю создать абстрактный класс за место того что есть .
пример
C++:
class  Dummy_Protect
{
public:
    virtual void AntiDbg( )=0;
    virtual void  EraseHeaders( )=0;
}* vProtect;

Dummy_Protect::Dummy_Protect()
    {vProtect=&Protect; };

    Dummy_Protect::~Dummy_Protect()
    { delete vProtect; };
необходимо добавить наследование в наш исходный класс
для тех кто в танке =)
C++:
class cProtect:public Dummy_Protect
{
public:
    void AntiOllyDbg( )
    { }
    void  EraseHeaders( )
    { }
}Protect;
!Важно : добавлять функции в абстрактный класс нужно строго в той последовательности в какой они у вас записаны в исходном классе .
Итого : при вызове функции в исполняемом коде будет исполнены примерно такие команды
mov регистр , Адрес_абстрактного_класса
call [регистр+смещение_функции]
то есть фактически адрес обфусицированной функции мы не даем , но а если уж дебажить то при вызове этой функции мы вызываем конструктор , где мы присваиваем абстрактному классу ссылку на искомый ) выполняем исходную функцию вызываем деконструктор ( где удаляем ссылку) а потом возвращаемся в первый уровень кода

Минусы : громоздкость , возможность найти конструктор класса , при более детальном просмотре кода , но как вариант можно запихать присвоение ссылки на класс в мутекс , который будет находится в какой-то жопе .

Плюсы : можно усложнить жизнь неопытным взломщикам =)
 
Сверху Снизу