сейчас делается так в exe добавляется такой код: push offset dll_name call LoadLibraryA jmp real_entry_point dll_name db test.dll,0 вот попалась прога которая проверяет свою контрольную сумму. вопрос: как выполнить аналогичные действия не трогая exe ?
А, и забыл сказать этот код выполняется до запуска .exe если прилудить статически. Попробуй расковырять .exe и добаить в секцию импорта свою ДЛЛ
проблема не в этом. все нормально работает с большинством exe. кроме случая когда сам exe проверяет себя и видит что его код модифицирован и отказывается работать. если прикрутить статически то все равно контрольная сумма изменится. я думал модифицировать какую нибудь системную dll таким образом (добавить код загрузки test.dll) или может есть варианты лучше ?
Пропиши код загрузки длл на точку входа .exe, а в самой длл восстанавливай оригинальные байты на точке входа.
пробовал. на самом деле проверяется содержимое exe на диске. в памяти можно модифицировать - все ok. а исправлять на диске тоже непонятно как (файл используется). шас пробую перехватить GetModuleFilename GetCommandLine и подменить возвращаемое имя файла.
а если прикрутить dll в winlogon\notify и перехватить ZwResumeThread или прописать в AppInit_Dlls свою dll в которой грузить нужную тебе библиотеку?
совершенно элементарно загрузить свою ДЛЛ посредством loader'а, который стартует target exe по типу того как это делает Armadillo, т.е. с теми же выкрутасами(0EBh,0FEh на вход и т.д.) для универсальности метода
>> прикрутить dll в winlogon\notify нужно загружать только для одного процесса если я правильно понял таким методом будет грузиться во все процессы ? >> который стартует target exe по типу того как >> это делает Armadillo да я думал нечто подобное, только не понял как создать процесс но поток не запускать (потом вызвать ResumeThread) ? пока сделал подмену результата GetModuleFileName только приходится иметь 2 разных exe (оригинальный и патченый) думаю перехватить ReadFile...
если прописать в AppInit_DLLs то будет грузиться ко всем, которые грузят user32.dll. собсно в чем проблема, имя файла нужного процесса известно, в процедуре инициализации длл пишеш проверку на то в каком ты процессе и если не в том - то выгружаеш длл как создать процесс но не запускать поток: смотри пример 6.2 к Гари Нэббету Native API Reference, примеры (и книгу) можно скачать из сети, если нужен линк - пиши slow at programist pt ru прикрутка в winlogon\notify позв загрузить длл раньше всех юзеровых процессов. дальше мона похукать ZwCreateProcess(может не ее, я сейчас точно не помню) и в нужный процесс внедрить свою dll.
kropalik Исследуй работу Армадилло во время запуска второго процесса и поймешь как, для меня после этого сделать свою реализацию труда не составило