Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определение типа подсистемы приложения из DLL

7
02 декабря 2009 года
@pixo $oft
3.4K / / 20.09.2006
Задача:определить тип подсистемы приложения,загрузившего DLL
Путём обсуждения в IRC были предложены следующие методы решения:
0)я–определение по полю Subsystem в PE-заголовке
Код:
.386
.Model Flat,StdCall
Include ..\Include\Kernel32.inc
IncludeLib ..\Lib\Kernel32
.Code
    DLLMain:
    Cmp DWord Ptr[ESP+8],DLL_Process_Attach
    JNZ StdExit
    XOr EBX,EBX
    Invoke GetModuleHandle,EBX
    Add EAX,[EAX+60]
    Add EAX,92
    ;Здесь лежит Word,определяющий тип подсистемы.Его и надо анализировать
    StdExit:XOr EAX,EAX
    Inc EAX
    Ret 12
End DLLMain
1)поиск окон приложения.Если их нет,значит,приложение консольное(не факт,правда,ведь могут быть приложения просто без окон…).Как вариант–если загружена User32.dll,то окна есть(ненадёжно).Не представляю,как реализовать такое в точности(не про User32.dll)
2)вызовом из приложения функции в DLL,которая будет оповещать о типе приложения.Вполне возможно,но минус в том,что это будет невозможно,если DLL сама должна будет загружаться в процесс(например,как ловушка или по механизму Windows NT)
3)вроде ещё что-то было,сейчас не упомнить

Меня интересуют другие методы,желательно более лёгкие(если есть).Может,есть API для определения типа подсистемы(типа IsUserAnAdmin,но в другой плоскости,конечно же).В общем,если есть возможность сделать короче,чем я,буду рад увидеть варианты.Впрочем,если не короче–тоже:)
288
02 декабря 2009 года
nikitozz
1.2K / / 09.03.2007
Microsoft предлагает только нулевой вариант :)
http://support.microsoft.com/kb/90493
14
02 декабря 2009 года
Phodopus
3.3K / / 19.06.2008
..ибо чем консольное приложение отличается от GUI? Да тем что консольному по-умолчанию системой создается консоль. Как раз по этому флажку в заголовке. Но если захочешь - сделаешь консоль для GUI приложения или окно для консольного.
8.2K
08 декабря 2009 года
bagie2
299 / / 26.10.2008
На паскале. Вернет 2 если GUI и 3 если консоль. Это берется из значения поля PEB.ImageSubSystem;

 
Код:
function GetImageSubSystem(): ULONG; register;
asm
  xor eax,eax
  mov eax,fs:[eax+30h]
  mov eax,[eax+0b4h]
end;
7
08 декабря 2009 года
@pixo $oft
3.4K / / 20.09.2006
Во!Видите,есть же другие варианты!:)
Вот только,насколько я знаю,структура PEB…ммм…как бы сказать.Нестабильна,что ли,и может меняться от версии к версии
8.2K
08 декабря 2009 года
bagie2
299 / / 26.10.2008
Не знаю. Всё она стабильна. Просто эти поля есть в Windows NT 4.0 и выше и всё работает, в Windows 9x\ME их нет. А чтобы проверить NT-система или нет можно поглядеть значение PEB.Ldr - если 0 то это не NT.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог