Здравствуйте ZakkeR, Вы писали:
ZR>Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll ZR>Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос: ZR>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
Поскольку kernel32.dll и ntdll.dll все равно загружаются в адресное пространство процесса (точка входа Win32-процесса вызывается из kernel32.dll), то их адреса можно найти в PEB, который всегда находится по адресу 0x7FFDF000. Зная адрес kernel32.dll уже нетрудно найти адреса LoadLibrary и GetProcAddress, после чего задача написания нетривиальной программы становится тривиальной (каламбурчик-с).
Хай Олл!
Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll
Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос:
Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
ZR>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
насколько я знаю проги без таблицы импортов в Win2k работать не хотят. загрузчик их не воспринимает как правильный PE файл
Здравствуйте ZakkeR, Вы писали:
ZR>Хай Олл! ZR>Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll ZR>Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос: ZR>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
ZR>wbr ZakkeR
Без kernel32.dll — запросто, если из ntdll.dll все брать.
Пишется простейшая прога, в ней ZwDelayExecution() — и простым просмотром юзаемых ею DLL-ек убеждаемся, что kernel32.dll она не юзает.
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте ZakkeR, Вы писали:
AF>http://www.alexfedotov.com/code/null.exe
AF>Эта программа ничего не делает. Исходный код
AF>
AF>Поскольку kernel32.dll и ntdll.dll все равно загружаются в адресное пространство процесса (точка входа Win32-процесса вызывается из kernel32.dll), то их адреса можно найти в PEB, который всегда находится по адресу 0x7FFDF000. Зная адрес kernel32.dll уже нетрудно найти адреса LoadLibrary и GetProcAddress, после чего задача написания нетривиальной программы становится тривиальной (каламбурчик-с).
А не проще ли в EntryPoint'е PE модуля взять со стека адрес возврата — сие будет указывать куда-то в kernel32.dll... Дальше просто ищем начало PE header и разбираем таблицу импортов...
P.S. PEB лучше получить из TEB который всегда лежит по fs:[18h]
Здравствуйте Kirillov Sergey, Вы писали:
ZR>>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
KS>насколько я знаю проги без таблицы импортов в Win2k работать не хотят. загрузчик их не воспринимает как правильный PE файл
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте Kirillov Sergey, Вы писали:
ZR>>>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
KS>>насколько я знаю проги без таблицы импортов в Win2k работать не хотят. загрузчик их не воспринимает как правильный PE файл
AF>http://www.alexfedotov.com/code/null.exe тоже не воспринимает?
не воспринимает. при ее загрузке лоадер валится с исключением (при обычном запуске она просто тихо выходит, но если запускать под дебагером то это видно).
Здравствуйте Kirillov Sergey, Вы писали:
AF>>http://www.alexfedotov.com/code/null.exe тоже не воспринимает?
KS>не воспринимает. при ее загрузке лоадер валится с исключением (при обычном запуске она просто тихо выходит, но если запускать под дебагером то это видно).
Loader использует CreateProcess для загрузки модуля, и он же проверяет секцию импорта, и выходит если ни одной функции нет.
В принципе можно то же самое проделать как бы "вручную" — создать секцию, замапить модуль, настроить структуры, передать управление — но это все через KMD, и детали реализации я и сам бы с удовольствием посмотрел :shuffle:
Так что формально — нельзя, но если очень хочется...
Здравствуйте masquer, Вы писали:
M>Здравствуйте Kirillov Sergey, Вы писали:
AF>>>http://www.alexfedotov.com/code/null.exe тоже не воспринимает?
KS>>не воспринимает. при ее загрузке лоадер валится с исключением (при обычном запуске она просто тихо выходит, но если запускать под дебагером то это видно).
M>Loader использует CreateProcess для загрузки модуля, и он же проверяет секцию импорта, и выходит если ни одной функции нет. M>В принципе можно то же самое проделать как бы "вручную" — создать секцию, замапить модуль, настроить структуры, передать управление — но это все через KMD, и детали реализации я и сам бы с удовольствием посмотрел M>Так что формально — нельзя, но если очень хочется...
Тут программисты на Бейсике интересуются — а какая практическая польза от этого решения?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
TK>Тут программисты на Бейсике интересуются — а какая практическая польза от этого решения?
Все бы программистам на Бейсике пользу извлекать
На самом деле пользы никакой, если не считать небольшое удивление на лице потенциального хакера/кракера
Здравствуйте vasketsov, Вы писали:
V>Здравствуйте ZakkeR, Вы писали:
ZR>>Хай Олл! ZR>>Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll ZR>>Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос: ZR>>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?
ZR>>wbr ZakkeR
V>Без kernel32.dll — запросто, если из ntdll.dll все брать. V>Пишется простейшая прога, в ней ZwDelayExecution() — и простым просмотром юзаемых ею DLL-ек убеждаемся, что kernel32.dll она не юзает.
Хм... ага! Ну хорошо, усложним задачу : Один и тот же exe'шник должен работать под всеми виндам начиная с 95-й.
Похоже все-таки не судьба мне сделать такой финт