Прога, которая ничего не импортирует
От: ZakkeR Россия http://znav.narod.ru
Дата: 23.08.02 01:35
Оценка:
Хай Олл!
Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll
Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос:
Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?

wbr ZakkeR
regards
Re: Прога, которая ничего не импортирует
От: Alex Fedotov США  
Дата: 23.08.02 02:26
Оценка: 62 (5)
Здравствуйте ZakkeR, Вы писали:

ZR>Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll

ZR>Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос:
ZR>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?

http://www.alexfedotov.com/code/null.exe

Эта программа ничего не делает. Исходный код

extern "C" void __cdecl wmainCRTStartup()
{
}


Поскольку kernel32.dll и ntdll.dll все равно загружаются в адресное пространство процесса (точка входа Win32-процесса вызывается из kernel32.dll), то их адреса можно найти в PEB, который всегда находится по адресу 0x7FFDF000. Зная адрес kernel32.dll уже нетрудно найти адреса LoadLibrary и GetProcAddress, после чего задача написания нетривиальной программы становится тривиальной (каламбурчик-с).
-- Alex Fedotov
Re: Прога, которая ничего не импортирует
От: Kirillov Sergey Украина www.rainboo.com
Дата: 23.08.02 09:07
Оценка:
ZR>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?

насколько я знаю проги без таблицы импортов в Win2k работать не хотят. загрузчик их не воспринимает как правильный PE файл
----------------------------------------------------------------
Хочешь выучить Японский? Yokozuna!
Re: Прога, которая ничего не импортирует
От: vasketsov Россия http://ntprog.by.ru
Дата: 23.08.02 12:03
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Хай Олл!

ZR>Всем наверное известно, что как любой exe'шник при старте импортирует как минимум kernel32.dll
ZR>Т.е. я хотел сказать, что он прописан в таблице импорта и система его сама подрубает. А все потому, что именно в этой либе есть LoadLibrary, используя которую можно догружать самому оставшиеся либы. А теперь вопрос:
ZR>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?

ZR>wbr ZakkeR


Без kernel32.dll — запросто, если из ntdll.dll все брать.
Пишется простейшая прога, в ней ZwDelayExecution() — и простым просмотром юзаемых ею DLL-ек убеждаемся, что kernel32.dll она не юзает.
Васкецов Сергей
http://registry.km.ru
Re[2]: Прога, которая ничего не импортирует
От: nvs  
Дата: 23.08.02 13:05
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте ZakkeR, Вы писали:


AF>http://www.alexfedotov.com/code/null.exe


AF>Эта программа ничего не делает. Исходный код


AF>
AF>extern "C" void __cdecl wmainCRTStartup()
AF>{
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]
    __asm
    {
       mov     eax,fs:[18h]                                       // TEB.NtTib.Self
       mov    eax,[eax][30h]                                     // TEB.ProcessEnvironmentBlock
    }
Re[2]: Прога, которая ничего не импортирует
От: Alex Fedotov США  
Дата: 23.08.02 16:27
Оценка:
Здравствуйте Kirillov Sergey, Вы писали:

ZR>>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?


KS>насколько я знаю проги без таблицы импортов в Win2k работать не хотят. загрузчик их не воспринимает как правильный PE файл


http://www.alexfedotov.com/code/null.exe тоже не воспринимает?
-- Alex Fedotov
Re[3]: Прога, которая ничего не импортирует
От: Kirillov Sergey Украина www.rainboo.com
Дата: 23.08.02 17:13
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте Kirillov Sergey, Вы писали:


ZR>>>Возможно ли написать прогу, у которой таблица импорта вообще пустая. Я знаю что это возможно на 9x системах, даже исходник имеется, но вот возможно ли так сделать в NT/2K/XP?


KS>>насколько я знаю проги без таблицы импортов в Win2k работать не хотят. загрузчик их не воспринимает как правильный PE файл


AF>http://www.alexfedotov.com/code/null.exe тоже не воспринимает?


не воспринимает. при ее загрузке лоадер валится с исключением (при обычном запуске она просто тихо выходит, но если запускать под дебагером то это видно).
----------------------------------------------------------------
Хочешь выучить Японский? Yokozuna!
Re[4]: Прога, которая ничего не импортирует
От: masquer Украина  
Дата: 23.08.02 18:12
Оценка:
Здравствуйте Kirillov Sergey, Вы писали:

AF>>http://www.alexfedotov.com/code/null.exe тоже не воспринимает?


KS>не воспринимает. при ее загрузке лоадер валится с исключением (при обычном запуске она просто тихо выходит, но если запускать под дебагером то это видно).


Loader использует CreateProcess для загрузки модуля, и он же проверяет секцию импорта, и выходит если ни одной функции нет.
В принципе можно то же самое проделать как бы "вручную" — создать секцию, замапить модуль, настроить структуры, передать управление — но это все через KMD, и детали реализации я и сам бы с удовольствием посмотрел :shuffle:
Так что формально — нельзя, но если очень хочется...
Re[5]: Прога, которая ничего не импортирует
От: TK Лес кывт.рф
Дата: 23.08.02 19:34
Оценка:
Здравствуйте masquer, Вы писали:

M>Здравствуйте Kirillov Sergey, Вы писали:


AF>>>http://www.alexfedotov.com/code/null.exe тоже не воспринимает?


KS>>не воспринимает. при ее загрузке лоадер валится с исключением (при обычном запуске она просто тихо выходит, но если запускать под дебагером то это видно).


M>Loader использует CreateProcess для загрузки модуля, и он же проверяет секцию импорта, и выходит если ни одной функции нет.

M>В принципе можно то же самое проделать как бы "вручную" — создать секцию, замапить модуль, настроить структуры, передать управление — но это все через KMD, и детали реализации я и сам бы с удовольствием посмотрел
M>Так что формально — нельзя, но если очень хочется...

Тут программисты на Бейсике интересуются — а какая практическая польза от этого решения?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Прога, которая ничего не импортирует
От: ZakkeR Россия http://znav.narod.ru
Дата: 25.08.02 23:24
Оценка:
Здравствуйте TK, Вы писали:


TK>Тут программисты на Бейсике интересуются — а какая практическая польза от этого решения?


Все бы программистам на Бейсике пользу извлекать
На самом деле пользы никакой, если не считать небольшое удивление на лице потенциального хакера/кракера
regards
Re[2]: Прога, которая ничего не импортирует
От: ZakkeR Россия http://znav.narod.ru
Дата: 26.08.02 04:45
Оценка:
Здравствуйте 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-й.
Похоже все-таки не судьба мне сделать такой финт
regards
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.