С++. Защита программы от анализа. Нестандартные способы вызова функций.



Комментарии

13 комментария(ев)
аватар: WhiteP
WhiteP
Дата: СР, 11/05/2011 - 17:53
Звание: Наблюдатель
Сообщений: 89

Good
Еще мне нравится цепочка вызовов функций через формирование стека с последующим ret Smile . Т.е.:
...
push arg2api2
push arg1api2
push apiaddr3
push arg2api1
push arg1api1
push apiaddr2
push apiaddr1
ret

Ну и скрытие API-функций из импорта путем "собственноручного" поиска их внутри спроецированной dll или через поиск LoadLibrary и GetProcAddress в kernel32 (когда поток находится на точке входа в [esp] адрес внутри kernel32) и использование TLS-callback.
Правда средего опыта реверсера данными ухищрениями не испугать (в т.ч. и приведенными автором), имхо.

аватар: Kastor
Kastor
Дата: СР, 11/05/2011 - 19:54
Звание: Мастер
Сообщений: 1169

Интересная статья!
Понравился третий способ, через обработку исключений.

аватар: alexsandrch-ch
alexsandrch-ch
Дата: СР, 11/05/2011 - 20:08
Звание: Энтузиаст
Сообщений: 128

через обработку исключений защита реально бесит при отладке т.к. та же ольга будет нервно выбрасывать окошко с сообщением об эксекпшн, 1 и 2 способ помогут при статическом анализе(IDA), но вот отладчик хорошо должен управиться, однако если скомбинировать с кучкой именно антиотладочных фишек может заставить кого то разбить монитор ^_^ Насчет использования callback весьма не плохо задумано! но важно что бы отладчик/дизасм не смог определить какую API ф-ию вызывает код, что в принципе не сложно(смотрим 1 способ, от дизассемблера точно спасет)

аватар: Belketre
Belketre
Дата: СР, 11/05/2011 - 23:38
Звание: Мастер
Сообщений: 1889

Все это бесполезная трата времени, когда проект, что называется, горит. Но как пища для мозга - весьма полезно Smile

аватар: Антон Козлов
Антон Козлов
Дата: ЧТ, 12/05/2011 - 02:01
Звание: Наблюдатель
Сообщений: 17

От реверсинга не спасает - раз... геморрой для прогера (плюс отлавливание ошибок и контроль кода) - два... данные методы были актуальны (если можно так выразиться) лет 10 назад, как точно. Интересно - методы виртуализации, ну на крайний случай создание драйвера... или работа с компонентами Aladdin (СКЗИ).

аватар: Evgenij
Evgenij
Дата: ЧТ, 12/05/2011 - 02:55
Звание: Посвященный
Сообщений: 310

Цитировать

методы виртуализации, ну на крайний случай создание драйвера... или работа с компонентами Aladdin (СКЗИ).

вот это точно никак не спасет от реверсинга, драйвер зареверсить не так сложно, устраивать в драйвере геморрой ты не будешь, так как велика вероятность нарваться на синий экран Smile
СКЗИ тут тоже совершенно не причем Smile

аватар: Evgenij
Evgenij
Дата: ЧТ, 12/05/2011 - 02:58
Звание: Посвященный
Сообщений: 310

Цитировать

Правда средего опыта реверсера данными ухищрениями не испугать (в т.ч. и приведенными автором), имхо

Согласен, тут необходимо добавлять методы защиты от отладки, контроль целостности кода и т.д.

аватар: WhiteP
WhiteP
Дата: ЧТ, 12/05/2011 - 03:03
Звание: Наблюдатель
Сообщений: 89

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

По реверсу:
int 3 - жесткое палево, т.к. при запуске под отладчиком прога там и остановится, а дальше нужно лишь просмотреть fs:[0] и проследить за _except_handler_common.

аватар: Hamper
Hamper
Дата: СБ, 14/05/2011 - 10:27
Звание: Энтузиаст
Сообщений: 223

int 3 можно еще кучу левых напихать, пока найдешь нужный таким способом куча времени уйдет

аватар: Evgenij
Evgenij
Дата: ЧТ, 12/05/2011 - 15:27
Звание: Посвященный
Сообщений: 310

to WhiteP надо же с чего-то начинать, основная цель при написании: поднять эту тему, я ожидал, что будет поток критики, но зато уже в комментах можно узнать что-то новое и народ делится известными им способами Smile