
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.148.167.99] |
![]() |
|
Страницы: (5) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
![]() |
|
|
Недавно обнаружил, что к моей программе выпущен кряк. Работает он так - просто просят скопировать в папку с моей программой специальный файл msimg32.dll, который видимо специальным образом модифицирован.
Когда моя программа устанавливается, там в папке с исполняемым файлом вообще нет никаких dll. Моя программа, видимо, обычно берет этот файл из папки Windows. Насколько я знаю, .dll файлы сначала ищутся в папке программы (где исполняемый файл) – если такового нет, то в папке Windows... – это я и не предусмотрел. Подскажите пожалуйста, как можно защититься от подобных подложек? Была идея проверять, есть ли в папке с программой есть какие-нибудь dll файлы, то сразу завершать работу программы с сообщением об ошибке. Но может быть есть какие-нибудь другие варианты? p.s. Программа написана на VC MFC. |
Сообщ.
#2
,
|
|
|
А может сделать проще, и для защиты не юзать чужих библиотек, а сделать например всё в своём коде? Хотя, верно, вы берёте через неё, привязки к машине.
Или вот ещё, просто потрясный способ от взлома! Не встречал ещё ни одного взломщика этой защиты. Выпустите прогу под свободной лицензией freeware или что-то вроде. Гарантирую, что крякеры даже и не подумают писать взломщика. *типа шутка* |
Сообщ.
#3
,
|
|
|
Цитата ViH @ В общем случае - нельзя. Ваша программа всё равно использует KERNEL32.DLL или т.п. Подскажите пожалуйста, как можно защититься от подобных подложек? Цитата Справка по MS VC пишет Т.о. запустится из вашего каталога, если что. Примечание по безопасности Если код запускается под управлением операционных систем Windows NT 4, Windows 2000 или Windows XP (предшествующих пакету обновления SP1), необходимо указывать полный путь для всех библиотек DLL. В этих операционных системах при загрузке файлов в первую очередь поиск идет в текущем каталоге. Если не указать полный путь к файлу, возможно загрузка другого файла. Добавлено Цитата Eric-S @ И что? - вот выпустил он такую freeware-программу, а в ней - покупка "танка" идёт за деньги. Что, и к ней кряк не станут писать? Да ещё как напишут! Будьте уверены. Или вот ещё, просто потрясный способ от взлома! Не встречал ещё ни одного взломщика этой защиты. Выпустите прогу под свободной лицензией freeware или что-то вроде. Гарантирую, что крякеры даже и не подумают писать взломщика. |
Сообщ.
#4
,
|
|
|
ViH
ВЗЛОМАТЬ МОЖНО ЛЮБУЮ ПРОГУ!!! |
Сообщ.
#5
,
|
|
|
Цитата ViH @ Вообще не надо ничего показывать...то сразу завершать работу программы с сообщением об ошибке Цитата ViH @ А если удалять найденные dll? Была идея проверять, есть ли в папке с программой есть какие-нибудь dll файлы, то сразу завершать работу программы с сообщением об ошибке. |
Сообщ.
#6
,
|
|
|
Запихай эту DLL в ресурсы или в конец EXE, при запуске программы распаковывай эту DLL из ресурсов или из конца EXE, лучше хранить в EXE.
Распаковывай куда нить в TEMP под непонятным именем, и загружай ее оттуда. Когда запихиваешь в ресурсы или EXE то кодируй ее. |
Сообщ.
#7
,
|
|
|
Цитата MemoryModule? Запихай эту DLL в ресурсы или в конец EXE, при запуске программы распаковывай эту DLL из ресурсов или из конца EXE, лучше хранить в EXE. |
Сообщ.
#8
,
|
|
|
Цитата ViH @ Подскажите пожалуйста, как можно защититься от подобных подложек? В самом начале своей программы проверяйте путь загруженных DLL через GetModuleHandle+GetModuleFileName. Некоторые системные DLLки имеют цифровые подписи, можно их проверять дополнительно. Если очень важна безопасность а цифровых подписей нет на проверяемых DLL-ках, то можно выяснять хэши системных библиотек на системе где установлена ваша программа и проверять хеши. Здесь конечно надо мониторить обновления винды, но оно не так часто происходит для основных системных библиотек. Цитата Eric-S @ А может сделать проще, и для защиты не юзать чужих библиотек, а сделать например всё в своём коде? Хотя, верно, вы бирёте через неё, привязки к машине. Слинковаться статически с системными библиотеками не получится. |
Сообщ.
#9
,
|
|
|
Цитата Славян @ вот выпустил он такую freeware-программу, а в ней - покупка "танка" идёт за деньги. Что, и к ней кряк не станут писать? Да ещё как напишут! Будьте уверены. Какая же это freeware? Если там так или иначе просят деньги? Абсолютная защита от взлома бывает. Это сделать так, чтоб никому, даже в голову, не пришло взламывать код. Если тулза простая то freeware, без денег, вообще. Если тулза для эксклюзивного использования, только для себя и больше никому! Если тулза плохая или имеет привосходящие бесплатные аналоги. Если исходный код открыт. А вообще, некоторые программы, взламывать уж очень хочется. В основном, если они кривые, а разработчик не желает исправлять. Или же если разработчик упёр чужую идею, забыв сказать спасибо. Но это всё психология. |
Сообщ.
#10
,
|
|
|
Цитата Eric-S @ Откройте википедию и прочитайте:Какая же это freeware? Если там так или иначе просят деньги? Цитата вики Танки он, ViH, продаёт за деньги, но не требует, а говорит: "хотите мощный танк - платите, нет - играйте обычным". Нет никаких требований. Все чётко, агу? freeware - ПО, лицензионное соглашение коего не требует каких-либо выплат правообладателю. |
Сообщ.
#11
,
|
|
|
Цитата Насколько я знаю, .dll файлы сначала ищутся в папке программы (где исполняемый файл) – если такового нет, то в папке Windows... – это я и не предусмотрел. Это называется DLL Hijacking. Атака стара как мир. http://stackoverflow.com/questions/3623490...s-dll-hijacking http://www.exploit-db.com/dll-hijacking-vu...e-applications/ Системные DLL вроде kernel32 описаны в секции KnownDlls (http://blogs.msdn.com/b/larryosterman/arch.../19/187752.aspx) и потому ищутся всегда сначала в системных директориях, а потом уже где-то ещё. Несистемная же DLL, при неуказании пути к ней - ищется, да, сначала в папке с программой, а только потом в других дирах. Ещё один яркий пример такого - sysprep.exe на win7, заморочка для обхода UAC. Ещё будет интересно узнать про две других атаки COM Planting и Binary Planting: http://nobunkum.ru/analytics/en-com-hijacking Решение в твоем случае - указать явно системную директорию, в которой лежит msimg32.dll: 1) GetSystemDirectory(sysdir) 2) SetDllDirectory(sysdir) или LoadLibrary(PathCombine(sysdir, 'msimg32.dll')) Цитата Подскажите пожалуйста, как можно защититься от подобных подложек? Понять идею, способы защиты становятся очевидны. Цитата В самом начале своей программы проверяйте путь загруженных DLL через GetModuleHandle+GetModuleFileName. ![]() Сначала загрузите вредоносную DLL, а потом проверьте путь. Это что-то из серии про "- Как проверить, существует ли таблица MySQL? - Очень просто: if (DROP TABLE ... != 0) таблица существовала" Цитата Некоторые системные DLLки имеют цифровые подписи, можно их проверять дополнительно. Если очень важна безопасность а цифровых подписей нет на проверяемых DLL-ках, то можно выяснять хэши системных библиотек на системе где установлена ваша программа и проверять хеши. Здесь конечно надо мониторить обновления винды, но оно не так часто происходит для основных системных библиотек. Чет вас не в ту степь понесло ![]() |
Сообщ.
#12
,
|
|
|
А можно вместе с программой распространять файл: хакер, пожалуйста, не взламывай мою программу! Вот!!!
![]() ![]() |
Сообщ.
#13
,
|
|
|
Эх, Бублик, Бублик.. Подвел черту, так сказать:)
|
Сообщ.
#14
,
|
|
|
Цитата reinterpret_alexey @ Цитата В самом начале своей программы проверяйте путь загруженных DLL через GetModuleHandle+GetModuleFileName. ![]() Сначала загрузите вредоносную DLL, а потом проверьте путь. Это что-то из серии про "- Как проверить, существует ли таблица MySQL? - Очень просто: if (DROP TABLE ... != 0) таблица существовала" Даже в этом случае тоже можно грохнуть чужие dll. Программа может создать .bat - файл и рестартовать с его помощью. Этот батник и зачистит папку от плохих модулей перед запуском. |
Сообщ.
#15
,
|
|
|
Есть мнение, что в случае защиты от описанного хака любым приведенным выше способом, выйдет другой кряк
![]() |