Здравствуйте, alextretij, Вы писали:
A>1. Переименовать стандартную библиотеку KERNEL32.dll в KERNEL32_1.dll. Написать свою KERNEL32.dll в которой все функции "пробрасывать" в KERNEL32_1.dll, а функфионал GetConsoleProcessList дописать свой. Не могу, нет h-файла для коректного описания свех 1000 функций с KERNEL32.dll. Или я не знаю как по другому это сделать.
Хочу установить MS SQL2008 Express на Windows 2000 Server. Он эго официаьно не потдерживает.
Ставиться не хочет, дошел до ошибки
"Точка входа в процедуру GetConsoleProcessList не найдена в библиотеке DLL KERNEL32.dll"
Это новая API-функция. Её нет в Windows 2000 Server.
Хочу как-то сделать так чтобы инсталятор SQL2008 Express "нашел" это функцию.
Было два варанта:
1. Переименовать стандартную библиотеку KERNEL32.dll в KERNEL32_1.dll. Написать свою KERNEL32.dll в которой все функции "пробрасывать" в KERNEL32_1.dll, а функфионал GetConsoleProcessList дописать свой. Не могу, нет h-файла для коректного описания свех 1000 функций с KERNEL32.dll. Или я не знаю как по другому это сделать.
2. Думал сделать hook, но как сделать это на функцию которой нет в таблице импорта...
Здравствуйте, Clickmaker, Вы писали:
A>>Хочу как-то сделать так чтобы инсталятор SQL2008 Express "нашел" это функцию.
C>А есть уверенность, что обманув инсталлятор, удастся также обуть и сам сиквел?
Гарантии нет, но а вдруг ...
Re[2]: hook для несуществующей функции KERNEL32.dll
От:
Аноним
Дата:
30.11.10 10:58
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:
LS>Здравствуйте, alextretij, Вы писали:
A>>1. Переименовать стандартную библиотеку KERNEL32.dll в KERNEL32_1.dll. Написать свою KERNEL32.dll в которой все функции "пробрасывать" в KERNEL32_1.dll, а функфионал GetConsoleProcessList дописать свой. Не могу, нет h-файла для коректного описания свех 1000 функций с KERNEL32.dll. Или я не знаю как по другому это сделать.
LS>Прототипы функций знать необязательно, чтобы сделать proxy dll. LS>http://www.codeproject.com/KB/DLL/CreateYourProxyDLLs.aspx
LS>И лучше стандартную библиотеку не переименовывать, а положить свою kernel32.dll в ту же папку, где находится инсталлятор.
так и сделал, но не помогло. Windows не берет мою kernel32.dll, а пользуется стандартной. Я так понял что он уже имеет загруженную kernel32.dll и использует её. Когда положил её в system32 то сразу же дамп.
Re[3]: hook для несуществующей функции KERNEL32.dll
Здравствуйте, Аноним, Вы писали:
LS>>И лучше стандартную библиотеку не переименовывать, а положить свою kernel32.dll в ту же папку, где находится инсталлятор.
А>так и сделал, но не помогло. Windows не берет мою kernel32.dll, а пользуется стандартной. Я так понял что он уже имеет загруженную kernel32.dll и использует её. Когда положил её в system32 то сразу же дамп.
Гугли по KnownDlls
kalsarikännit
Re[3]: hook для несуществующей функции KERNEL32.dll
Здравствуйте, Аноним, Вы писали:
А>так и сделал, но не помогло. Windows не берет мою kernel32.dll, а пользуется стандартной. Я так понял что он уже имеет загруженную kernel32.dll и использует её. Когда положил её в system32 то сразу же дамп.
Тогда такой вариант: назови свою библиотеку kernel33.dll, и подредактируй таблицу импорта целевого исполняемого файла, чтобы он ее загружал вместо kernel32.dll.
Здравствуйте, alextretij, Вы писали:
A>Здравствуйте, Clickmaker, Вы писали:
A>>>Хочу как-то сделать так чтобы инсталятор SQL2008 Express "нашел" это функцию.
C>>А есть уверенность, что обманув инсталлятор, удастся также обуть и сам сиквел?
A>Гарантии нет, но а вдруг ...
Ага, типа других отличий между Win2K и Win2008 нет и не было.
Здравствуйте, Аноним, Вы писали:
А>так и сделал, но не помогло. Windows не берет мою kernel32.dll, а пользуется стандартной. Я так понял что он уже имеет загруженную kernel32.dll и использует её. Когда положил её в system32 то сразу же дамп.
Насколько я знаю, kernel32 и ntdll не загружаются через LoadLibrary, они уже существуют в памяти при создании процесса по заранее известному адресу, еще до начала выполнения. (чем бы вы загрузили kernel32, если LoadLibrary находится в самом kernel32, который еще не загружен?)
Если функция не находится при динамическом связывании, то можно загрузить инсталлер со своей DLL, из которой хукнуть GetProcAddress и вернуть свою реализацию.
Re[4]: hook для несуществующей функции KERNEL32.dll
Кё>Насколько я знаю, kernel32 и ntdll не загружаются через LoadLibrary, они уже существуют в памяти при создании процесса по заранее известному адресу, еще до начала выполнения.
Не совсем. В АП процесса, который еще не начал исполнения есть тока образ ехе шника и ntdll. kernel32.dll загружает инициализатор процесса в ntdll.dll Если очень хочется — можно всунуть свой код который исполнится в процессе до загрузки kernel32.dll но в данном случае это не самое простое решение проблемы. Самое простое имхо — написать/найти свой загрузчик .exe файлов.
Кё>(чем бы вы загрузили kernel32, если LoadLibrary находится в самом kernel32, который еще не загружен?)
LoadLibrary — лишь фасад к ntdll!LdrLoadDll
Как много веселых ребят, и все делают велосипед...
A>Хочу как-то сделать так чтобы инсталятор SQL2008 Express "нашел" это функцию.
Приделать свой загрузчик, в котором нужные функции маппятся на заглушки? Например модифицировав тот же UPX