Вот у меня есть бинарник программы. У меня два вопроса: 1. Как расширить раздел импорта программы без добавления дополнительной секции (IID King не предлагать, он именно добавляет доп. секцию; через LoadLibrary тоже не стоит)? Причём DLL, которую я хочу подрубить, нету в IMAGE_IMPORT_DECRIPTOR'ах... А места в конце массива импорта тоже нету... Может кто подскажет алгоритм, как можно добавить туда ещё одну запись (возможно, надо скопировать весь импорт в другую часть файла, где есть место)? 2. Вот я каким-либо образом загрузил DLL в адресное пространство. Как теперь убивать все программы, которые хотят записать мне в процесс какую-нибудь дрянь (видимо, надо не дать выполнить им WriteProcessMemory)?
> Возможно, надо скопировать весь импорт в другую часть файла Ну не весь импорт, а только IMAGE_IMPORT_DESCRIPTOR'ы для каждой длл + один для твоей новой. Место понадобится, и сомнительно что ты найдешь столько в готовом файле, если уэ религия запрещает тебе добавлять секции - растяни последнюю, ли пересади ресурсы на новый RVA и растяни предпоследнюю, ну или еще чего придумай. > 2. Вот я каким-либо образом загрузил DLL в адресное > пространство. Как теперь убивать все программы, которые > хотят записать мне в процесс какую-нибудь дрянь (видимо, > надо не дать выполнить им WriteProcessMemory)? Логично, напиши драйвер который будет хучить эту функцию и не давать ей работать. Но в твой процесс запушут чего-нить захучив и внедрив длл. Кароче я еще ниразу не видел достойной защиты от этого дела, да и врядли она возможна.
Места предостаточно... Более 3000 байт. Потом сожму это всё упаковщиком... А кто может посоветовать хорошие упаковщики и другие средства защиты от взлома?
Да что же такое? =) Никто не знает, как ответить на второй вопрос? Или это вообще нельзя реализовать?
По-моему, драйвер - не лучший вариант, т.к. требует админских прав. А перехватить API-функцию при помощи одного только API особого труда и знаний не требует, поскольку всю работу за нас проделал Рихтер (Windows 2000 для профессионалов). Эта тема уже поднималась, и чтобы не повторяться, скажу только, что по-моему, перехватывать нужно не WriteProcessMemory, а OpenProcess. Ведь WriteProcessMemory принимает в первом параметре hProcess, по которому мы никак не узнаем ID или имя процесса-жертвы и не сможем принять решение - позволить функции выполниться или нет.
Эх... Не нашёл чего-то я этого там (у Рихтера)... Как перехватить API вызов внутри процесса — очень много способов... А вот глобально перехватить... Не нашёл. Может подскажете, что почитать? Или способ какой-нибудь...
способов куча, но вот самый простой: Просто внедряйся в каждый процесс, меняй адреса вызова функций на нужные и будет тебе счастье(ну ёщё и getprocaddress+loadlibrary) - но это всё было у Рихтера Надеюсь как внедряться или как менять не надо?(тут вариантов много и всё зависит от творчества) Материалов куча: этот сайт+гугл