![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
anthony |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 25.6.2007 Где: Украина Репутация: 3 Всего: 5 |
Обновленный код (устранены ошибки и предупреждения, сокращен объем, изменен стиль).
Протестировано на Win XP PE/HE SP 2 с включенным и выключенным DEP (процессоры без поддержки DEP). Проверена большая часть настроек компиляции для MSVC 2005 PE SP 1, для других компиляторов нужно аккуратно проверять настройки.
Это сообщение отредактировал(а) anthony - 19.7.2007, 11:23 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
anthony, какой у тебя процессор? Он поддеживает DEP?
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Вот теперь лучше.
g++ [-O2] -Wall, 4.1.3, Debian lenny - полет нормальный. DEP, естественно, не стоит. С ним не должно работать, так как программа пытается выполнить инструкции, находящиеся в стеке. |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
fish9370, продолжай в том же духе и получишь предупреждение.
|
|||
|
||||
fish9370 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: -1 Всего: 1 |
Добавлено @ 20:04 обсуждаем дальше..
PS. надеюсь, это никому не придет в голову, компилить под линукс.. ) Это сообщение отредактировал(а) chipset - 20.7.2007, 21:36 -------------------- undefined |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Daevaorn, вообще-то, модератор этого раздела. Так что не надо здесь разжигать страсти. а, собственно, что мы сейчас обсуждаем? Теперь. Приведенные участки кода - это хорошо. Однако раздел называется: "С++: Общие вопросы". И тема называется "Замена кода С++ на ходу". А не "Замена кода С++ на ходу в операционной системе Windows". Так что последнее полным решением не является. Есть раздел "С++: Системное программирование и WinAPI". Вот там последний код окажется полезен, наверное. Это сообщение отредактировал(а) JackYF - 20.7.2007, 12:12 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Ребята, давайте жить дружно
![]() ![]() ![]() Конечно, заставить код выполняться в стеке или другой не-исполняемой памяти можно, хотя и не на всех системах. Причем прошу заметить, со временем этих систем (где нельзя), видимо, будет становиться все больше. Я когда-то этим баловалась и тоже с целью защиты, но тогда это работало почти всегда, т.к. защитный флажок хоть и имелся, но явно был задумкой на будущее... Ладно, допустим, загрузили, расшифровали, передали управление... Однако это может быть совсем не любой код, а ведь чтобы удовлетворить задумку автора, такой код должен быть a) достаточно объемный (не три оператора), б) критичный для правильной работы приложения... Ладно, напряглись, преодолели все трудности... Однако не забываем, что программ с одной версией не бывает; если программа не развивается, причем быстро, кому она нафиг нужна ... А такой способ защиты будет мешать жить прежде всего самому разработчику... Особенно приятно будет изменять и отлаживать код, который вынесен из программы (помним, что он не должен быть совсем уж тривиальным). И наконец, как уже было сказано, это спасает до получения взломщиком первого же валидного ключа (а у мало-мальски ценной программы они всегда утекают - как только появляются первые пользователи)... Т.е. само по себе это абсолютно не достаточно. Нужно применять и другие приемы... Короче, не стоит овчинка выделки. Сложность защиты (в смысле усилий, потраченных как на ее разработку, так и на развитие) должна соответствовать ценности программы. -------------------- ... |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
--------------------
|
||||
|
|||||
DDyDog |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 16.7.2007 Репутация: нет Всего: нет |
1. Первый раз запустил программу(скопировал выше), вывело Hello, World!
2. Закоментировал часть кода
Снова вывело Hello, World! В первом случае выполнялась функция из стека (buf), во втором из сегмента кода А вопрос такой, где произошла модификация кода? И даже если модифицировать буфер и выполнить его, чем это будет отличатся от вызова еще одной функции адресс которой присвоен _Demo (вот если бы произвести модификацию сегмента кода или исполняемого файла)? А стек мы и так постоянно модифицируем ![]() И так для мыслей, может лучше вместо функций использовать обьекты-функции, и размер легче найти, и скопировать с стек легко? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |