Доброго времени суток. Собственно возник вопрос,как защитить процесс от воздействия из вне? Опишу ситуацию более конкретно. Есть программа клиент(с закрытым кодом). Нужно зашифровать соеденинения с сервером,и запретить перехват функций send() recv(). С первой частью задачи справился. А как быть со второй?Запретить "зловредным" программа а-ля art money\wpe\rpe\ и прочим получать доступ к процессу? Конечно главная задача - это запретить перехват траффика сниферами. За любую информацию буду благодарен.
Не много не то... Я интересовался как реализовать,а не чем Есть и так куча защит а-ля GameGuard,HShield...По какому принципу они работают.
Интересно как вы это реализовали ? Замена секций ? А если хардварные точки останова использовать или трассировать к примеру ?
Вот например код: Код (Text): Call ProtectCurrentPage Call ValidataCodeChecksum -> exit Call IsTracerActive -> exit [...] Call dword ptr ds:[XXXX] [...] Call send [...] Или так: Код (Text): Call ProtectCurrentPage Call ValidataCodeChecksum -> exit Call IsTracerActive() -> exit [...] mov ebx,dword ptr ds:[XXXX] [...] mov eax,dword ptr [ebx] [...] Call send [...] Если не лезть в ядро, чисто из юзермода - как отловить вызов send() ? Очень просто - в первом случае в ds:[XXXX] мы запишем свой обработчик, который дотрассирует до куда нужно и снимет лог. Или изменим селектор так, чтоб заюзался наш код. Во втором случае - мы запишем в ds:[XXXX] невалидный адрес, обработаем исключение и выполним трассировку. Если вы делаете такую манипуляцию. Разбили функцию условно на два блока: Код (Text): send: [Macro1] send2: [...] И юзается у себя в коде первый блок, далее второй в send2 - будем трассировать до send2 Про хардварные точки останова даже говирить нечего.
Если реализовано первое то зачем вам второе? Это уже бессмысленно. Впрочем оно не много смысла имеет и без реализации первого. send()/recv() это так сказать верхушка айсберга, есть сотня ступеней ниже, где можно втюхнуть свой перехватчик трафика. Кроме того есть еще сеть, там сниферы вообще к вашему компьютеру отношения не имеют. Так что у вас задача не в том чтобы send()/recv() перехватить, а в том чтобы защитить ваш шифровальщик/дешифровальщик от реверсинга (закрытый/секретный ключ чтобы не узнали ну и алгоритм шифрации) Научишь шифровать соединение "заменой секций"?
SashaTalakin Да, я это умею и надеюсь не только я. Проекция модуля заменяется на приватные секции http://files.virustech.org/indy/Code/PsProtectImage/ И я тебя прошу не пости свои дурацкие смайлы, пока по хорошему.)
Хм...Прошу прощения,забыл указать язык.С++. Теме конечно место в С++ программировании,но я ещё новичок и что бы не обрушить на себя кучу матов запостил её тут.Ещё раз извиняюсь. Инъекция в процесс,API перехват функций. Использовал Deterous. Вы не правы...Точнее возможно и правы,но ко мне не подходит. Объясняю. Есть пакет использовать умение А на цель Б. Клиент,не позволяет сам по себе слать пакеты со скорость 1000000 в миллисекунду(образно).Но есть ведь чудо штука под название Winsocket Packet Editor.(WPE)(к примеру).Она перехватывает наш шифрованый пакет,и сервер его отлично обрабатывает.Конечно можно уже на стороне сервера,реализовать антифлуд пакетами,но хочется это сделать именно на стороне клиента. Хм...Если можно поподробнее. @back to topic: И всё же как можно защитить процесс скажем от банальной инъекции DLL?Не используя глобальный hook к kernel32.dll.
DeKrant Деторус - это гуано полное. Есть множество способов эффективной защиты и очень эффективной, но это слишком обширный вопрос чтобы его описывать тут. Поищите тут на сайте вначале.
Можно чуть-чуть поподробнее? Мне необходимо просто перехватить функцию recv в одном приложении X. Я в этом деле новичок, тернируюсь пока на аське, перехватываю в ней recv. Успешно или нет- говорит пока рано, ещё дорабатываю пока проект перехвата. А в приложении X много труднее будет перехватить recv. Я не вникал в него ещё, но предназначение этого предположения ИМЕННО предполагает борьбу с перехватом этой функции. И если я с этим столкнусь, придётся мне трафик по-другому перехватывать. Хотелось бы про ступени ниже чуть-чуть услышать. Ключевые слова там, ещё что-нибудь. Спасибо.
Честно ничего не понял. Если в вашем первом посте какая-то задача ставится достаточно распространенная и адекватная то дальше я напр. вообще не понимаю о чем вы. Может отупел малость sorry ) Ну во-первых даже если ваше приложение никак не защищается от перхвата трафика совсем необязательно что оно использует функции recv/send. Про более низкие уровни, ок ключевые слова такие: TDI фильтры, NDIS фильтры, NDIS intermediate драйвер. Ну это скажем документированные способы. Есть еще недокументированные такие как перехват ы всяких ядерных функций или там подмена IRP коллбеков, замена системных сервисов (тут еще свое поддерево способов), которые дергаются при работе send/recv и т.д. Вообщем вар-тов очень много
Эм...Ну скажем так ушёл от топика.Sorry Почему же? ТоварисЧ Рихтер Рекомендует его.Да и если вы правы,предложите альтернативу. sry 4 offtopic. Да смотрел...Скрытие процессов например?Или я что то упустил?
DeKrant Кому он его рекоминдует ? Чего предлагать то, поиск заюзай. Читале пост #5, или я для себя пишу. Деторус - что там сплайсинг.. фтопку. Нужно хотябы прочитать что написано, а потом вопросы задавать, эти дурацкие.)
Clerk Хм...Дельный совет.В вашем посте номер 5,написан код ассемблера. Я же писал в посте номер 10. Я конечно понимаю что асеммблер мать и отец всего и вся. Но пока мне нужно не всего и вся,а только 1 пункт.
Нет не в коем случае. Я бы сказал дайте наводку,для создания кода под MS visual C++. Задачу описал выше(защитить процесс X от любых припадок из вне). Вы сказали что Detours не айс для перехвата API.Ну чтож посоветуйте что нибудь другое. Я не отказываюсь от помощи. Я прекрасно понимаю что любой серьёзный продукт пишется как миниуму при участии ассемблера.Но увы и ах,познание мира програмирования я начал не с него,как будет возможность обязательно займусь.
Если трафик защифрован, зачем вообще предотвратить перехват send\recv ? Вить туда уже передаются шифрованные данные.. Если не в курсе, трафик можно перехватить и через скниффер, без хука данных апи в конкретном прилажении..
Flasher Если не в курсе то трафик можно перехватить без хука любой апи, врезавшись в сетевой кабель. Думаю смысл понятен.