Меня очень интересует проблема связанная со статьей http://www.wasm.ru/article.php?article=apihook_2, особенно с ее частью "Внедрение процесса целиком". Там предлогается вызвать LoadLibrary("kernel32.dll") и LoadLibrary("user32.dll") после начала выполнения инжектированного кода после вызова CreateRemoteThread. Поскольку данные библиотеки не обязанны быть подгруженны к целевому процессу. Но возникает вопрос - разве kernel32.dll не подгруженна как минимум ко всем юзермодным приложениям притом ко всем по одному и тому же адресу? Если нет - то мы не можем вызвать LoadLibrary, а если да - то не должны этого делать - dll уже подгружена. И второе - разве user32.dll обязанна грузится во всех приложениях по одинаковым адресам? Не следует ли дополнительно править таблицу импорта после ее загрузки? Просто не могу избавиться от чувства, что я чего-то не понимаю, объясните плз.
drmist kernel32 может быть ине подгружена, если прога юзает только nativeapi, точнее ntdll, поскольку как я понял эта dll мапица в процес первой, то скорее всего её адрес можно таки ожидать в определенном месте. да вообщет этот нюанс был объяснен в Рихтере довольно подробно, так что совет почитать эту буку.
tr1cker на удивление четкий ответ ))) CARDINAL Ну если ты говоришь, что kernel32.dll может быть не подружена - значит вызывать LoadLibrary не совсем верно. Рихтера читал, но метсами - целиком нет времени и желания, я попробую найти то, о чем ты говоришь, но буду благодарен если главу подскажешь. Я так понял, что стандартные библиотеки действительно грузятся по фиксированным адресам, и занять ее скажем VirtualAlloc'ом или самопальной библиотекой не удастся - адрес будет уже занят. Действительно удивительный факт.
drmist попробуй скомпилить ехек с базовым адресом равным ntdll.dll, и загрузить его. Почитай статьи Володи по упаковщикам, там загрузчик расписан, поищи другие статьи, коих в нете хватает, попробуй сам реально.