На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Обнаружил взлом своей программы копированием файла msimg32.dll , в папку моей программы
    Недавно обнаружил, что к моей программе выпущен кряк. Работает он так - просто просят скопировать в папку с моей программой специальный файл msimg32.dll, который видимо специальным образом модифицирован.

    Когда моя программа устанавливается, там в папке с исполняемым файлом вообще нет никаких dll. Моя программа, видимо, обычно берет этот файл из папки Windows. Насколько я знаю, .dll файлы сначала ищутся в папке программы (где исполняемый файл) – если такового нет, то в папке Windows... – это я и не предусмотрел.


    Подскажите пожалуйста, как можно защититься от подобных подложек?

    Была идея проверять, есть ли в папке с программой есть какие-нибудь dll файлы, то сразу завершать работу программы с сообщением об ошибке. Но может быть есть какие-нибудь другие варианты?


    p.s. Программа написана на VC MFC.
      А может сделать проще, и для защиты не юзать чужих библиотек, а сделать например всё в своём коде? Хотя, верно, вы берёте через неё, привязки к машине.

      Или вот ещё, просто потрясный способ от взлома! Не встречал ещё ни одного взломщика этой защиты. Выпустите прогу под свободной лицензией freeware или что-то вроде. Гарантирую, что крякеры даже и не подумают писать взломщика. *типа шутка*
      Сообщение отредактировано: Eric-S -
        Цитата ViH @
        Подскажите пожалуйста, как можно защититься от подобных подложек?
        В общем случае - нельзя. Ваша программа всё равно использует KERNEL32.DLL или т.п.
        Цитата Справка по MS VC пишет

        Примечание по безопасности
        Если код запускается под управлением операционных систем Windows NT 4, Windows 2000 или Windows XP (предшествующих пакету обновления SP1), необходимо указывать полный путь для всех библиотек DLL. В этих операционных системах при загрузке файлов в первую очередь поиск идет в текущем каталоге. Если не указать полный путь к файлу, возможно загрузка другого файла.
        Т.о. запустится из вашего каталога, если что.

        Добавлено
        Цитата Eric-S @
        Или вот ещё, просто потрясный способ от взлома! Не встречал ещё ни одного взломщика этой защиты. Выпустите прогу под свободной лицензией freeware или что-то вроде. Гарантирую, что крякеры даже и не подумают писать взломщика.
        И что? - вот выпустил он такую freeware-программу, а в ней - покупка "танка" идёт за деньги. Что, и к ней кряк не станут писать? Да ещё как напишут! Будьте уверены.
          ViH
          ВЗЛОМАТЬ МОЖНО ЛЮБУЮ ПРОГУ!!!
            Цитата ViH @
            то сразу завершать работу программы с сообщением об ошибке
            Вообще не надо ничего показывать...

            Цитата ViH @
            Была идея проверять, есть ли в папке с программой есть какие-нибудь dll файлы, то сразу завершать работу программы с сообщением об ошибке.
            А если удалять найденные dll?
            Сообщение отредактировано: Filka -
              Запихай эту DLL в ресурсы или в конец EXE, при запуске программы распаковывай эту DLL из ресурсов или из конца EXE, лучше хранить в EXE.
              Распаковывай куда нить в TEMP под непонятным именем, и загружай ее оттуда. Когда запихиваешь в ресурсы или EXE то кодируй ее.
                Цитата
                Запихай эту DLL в ресурсы или в конец EXE, при запуске программы распаковывай эту DLL из ресурсов или из конца EXE, лучше хранить в EXE.
                MemoryModule?
                Сообщение отредактировано: Filka -
                  Цитата ViH @
                  Подскажите пожалуйста, как можно защититься от подобных подложек?


                  В самом начале своей программы проверяйте путь загруженных DLL через GetModuleHandle+GetModuleFileName.
                  Некоторые системные DLLки имеют цифровые подписи, можно их проверять дополнительно. Если очень важна безопасность а цифровых подписей нет на проверяемых DLL-ках, то можно выяснять хэши системных библиотек на системе где установлена ваша программа и проверять хеши. Здесь конечно надо мониторить обновления винды, но оно не так часто происходит для основных системных библиотек.

                  Цитата Eric-S @
                  А может сделать проще, и для защиты не юзать чужих библиотек, а сделать например всё в своём коде? Хотя, верно, вы бирёте через неё, привязки к машине.

                  Слинковаться статически с системными библиотеками не получится.
                  Сообщение отредактировано: neokoder -
                    Цитата Славян @
                    вот выпустил он такую freeware-программу, а в ней - покупка "танка" идёт за деньги. Что, и к ней кряк не станут писать? Да ещё как напишут! Будьте уверены.

                    Какая же это freeware? Если там так или иначе просят деньги?

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

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

                    Но это всё психология.
                      Цитата Eric-S @
                      Какая же это freeware? Если там так или иначе просят деньги?
                      Откройте википедию и прочитайте:
                      Цитата вики
                      freeware - ПО, лицензионное соглашение коего не требует каких-либо выплат правообладателю.
                      Танки он, ViH, продаёт за деньги, но не требует, а говорит: "хотите мощный танк - платите, нет - играйте обычным". Нет никаких требований. Все чётко, агу?
                        Цитата
                        Насколько я знаю, .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.


                        :D
                        Сначала загрузите вредоносную DLL, а потом проверьте путь. Это что-то из серии про "- Как проверить, существует ли таблица MySQL? - Очень просто: if (DROP TABLE ... != 0) таблица существовала"

                        Цитата
                        Некоторые системные DLLки имеют цифровые подписи, можно их проверять дополнительно. Если очень важна безопасность а цифровых подписей нет на проверяемых DLL-ках, то можно выяснять хэши системных библиотек на системе где установлена ваша программа и проверять хеши. Здесь конечно надо мониторить обновления винды, но оно не так часто происходит для основных системных библиотек.


                        Чет вас не в ту степь понесло :D
                        Сообщение отредактировано: reinterpret_alexey -
                          А можно вместе с программой распространять файл: хакер, пожалуйста, не взламывай мою программу! Вот!!! :) :offtop:
                            Эх, Бублик, Бублик.. Подвел черту, так сказать:)
                              Цитата reinterpret_alexey @
                              Цитата
                              В самом начале своей программы проверяйте путь загруженных DLL через GetModuleHandle+GetModuleFileName.


                              :D
                              Сначала загрузите вредоносную DLL, а потом проверьте путь. Это что-то из серии про "- Как проверить, существует ли таблица MySQL? - Очень просто: if (DROP TABLE ... != 0) таблица существовала"

                              Даже в этом случае тоже можно грохнуть чужие dll.
                              Программа может создать .bat - файл и рестартовать
                              с его помощью. Этот батник и зачистит папку от плохих модулей
                              перед запуском.
                                Есть мнение, что в случае защиты от описанного хака любым приведенным выше способом, выйдет другой кряк :whistle:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0402 ]   [ 16 queries used ]   [ Generated: 14.05.25, 11:44 GMT ]