![]() |
|
![]() ![]() ![]() |
|
fridkaratel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 22.10.2007 Где: Error connect to MySQL Da... Репутация: нет Всего: нет |
В-общем, хочется убрать всякую возможность определить ссылку на функцию, т.е. вызов функции...
Приблизительно так - если функция не нужна, то затереть ее или частично испортить... Также интересует вопрос, как можно из неправильной ссылки на функцию сделать правильный... Т.е. сделать void + int, например.... Это необходимо, т.к. приложение распространяется в двух версиях - демо и полной, т.е. через директиву #define вырезать функции из полной, превратив в демо не получится - надо как-то "портить" функции в рантайме... |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Вот это самое место где портить или не портить легко исправляется. ИМХО если речь идет о динамической загрузке, то лучше иметь 2е Dll зашифрованные разными ключами. В зависимости от типа ключа демо или нет распаковывать разные версии одной Dll. Не имея ключа взломщик не сможет извлечь полную Dll. Останется только вариант купить одну копию и ее распространять. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
fridkaratel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 22.10.2007 Где: Error connect to MySQL Da... Репутация: нет Всего: нет |
Идея интересная - я к этому и склонялся... Но хотело бы без dll - поэтому и спросил про указатели и операции с ними...
Хочется как-то или перенаправить на другую функцию (прибавив к указателю, например, 0x12), или как-то заменять часть кода, перенаправляя результат в другой буфер... |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Есть такая функция VirtualProtect, ей можно разблокировать страницы помеченные как ReadOnly, но нужно знать исходный адрес по которому производилось выделение. Разумеется что узнать его нельзя. В инете встречается пример ручной загрузки DLL без LoadLibrary, там память выделяется руками, потому можно узнать этот адрес и разблокировать код на запись. Еще могу посоветовать поискать исходники упаковщика кода, там тоже осуществляется запись исполняемого кода.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
fridkaratel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 22.10.2007 Где: Error connect to MySQL Da... Репутация: нет Всего: нет |
Я использую упаковщик исполняемого кода... но одна защита - хорошо, а две - хорошо-хорошо ;)
Хочется сделать именно "увод" в сторону функционала, т.е. не сравнивать наподобие (if a == b) {} else {}, а сделать по-другому, без сравнения, именно оперируя указателями... потому как отловить, что куда - тяжелее, чем выдавать при сравнении всегда true (или false)... Идея расшифровывать ту или иную часть хороша, но dll использовать не очень хочется... PS: а если бы были две dll, то как бы они выглядели? хотя бы примерный код... может я просто еще не понимаю до конца всю концепцию.... |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Да вот как раз так бы и были if (IsDemoKey(key)) {unpack("Demolib.dll", "lib.dll", key);} else {unpack("Prolib.dll", "lib.dll", key);} Финт в том что если взломщик заменит условный переход if на безусловный, то это приведет к тому что Prolib.dll будет расшифрована неверным ключом, т.е. вместо Dll будет мусор. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Кстати, точно так же можно зашифровать процедуры в самом exe'нике. 2 штуки с разным функционалом разными ключами. Шифровать в уже откомпилированном имадже, расшифровывать предварительно сняв защиту по записи (черея VirtualProtect) |
|||
|
||||
fridkaratel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 22.10.2007 Где: Error connect to MySQL Da... Репутация: нет Всего: нет |
А можно поподробнее... В качестве протектора использую Themid'у... Там есть что-то, может быть как раз и это... Но вот хочется реализовать часть защиты со своей стороны... ;) |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Кстати нашел пример затирания точки входа
Отсюда http://forum.sources.ru/index.php?showtopic=153591&hl= Ток нужно отрубить оптимизацию и не запускать под дебагом. Добавлено через 4 минуты и 39 секунд
С шифровкой отдельных функций дело непросто, дело в том что в них могут использоваться статические адреса других функций относительно базового адреса или переходы по статическому адресу. Когда грузиться Dll для исправления адресов используется таблица релоков, если у нас отдельная функция, то таблицы релоков нет, потому распаковать ее в произвольное место и запустить не удастся. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
xvr |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Кто такой Themid не знаю, но шифровка своих функций делается довольно просто - в готовом exe'нике шифруются нужные функции (прямо в образе). Их адрес узнается из PE таблиц (например после tdump'а). Длинна берется фиксированная. Расшифровка делается прямо в программе:
|
||||||||
|
|||||||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Ну если например есть jmp на некоторый адрес внутри функции, если мы функцию переместим в памяти, то при выполнении этого jmp произойдет переход неизвестно куда. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Мы не будем эти функции никуда перемещать - они будут расшифровываться там же, где лежат. Т.е. функции есть в любом случае (до и после дешифровки), но до дешифровки они неработоспособны, т.к. их код зашифрован и с точки зрения процессора представляет собой практически мусор. Попытка их выполнить скорее всего приведет к падению программы. После расшифровки они содержат уже исполняемый код. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Т.е. будет пост обработка после компиляции, с поиском нужного фрагмента, шифрованием и записью на тоже самое место. В принципе можно так сделать.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
fridkaratel |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 221 Регистрация: 22.10.2007 Где: Error connect to MySQL Da... Репутация: нет Всего: нет |
Это все интересно, но что-то в последних постах я мало что понял...
![]() Так, получается, что я пишу код, компилирую, а потом обрабатываю exe-файл? Или компилирую, смотрю список функций, потом делаю изменения в исходном коде - и еще раз компилирую... Так? |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
fridkaratel, я тебе так скажу: если найдется человек, который не поленится снять Themid'у, то твои "защиты" не создадут ему вообще никаких проблем.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |