вот
тут например Indy утверждает что
Поиск этих массивов столь сложен, что без построения и анализа графа фактически не возможен
Я думаю он несколько преувеличивает размер бедствия
Например можно найти
gapfnMessageCall из тела ф-ции
NtUserMessageCall - там всего одна такая примерно инструкция:
call ds:_gapfnMessageCall[eax*4]
Граф понадобится на vista & w7 - построить цепочки переходов в этой ф-ции по jz/jb/jmp
Соотв-но таблица
gapfnScSendMessage на тех 32битных windows, что я сегодня посмотрел, находится всегда непосредственно перед массивом gapfnMessageCall (исключением является w2k3 без sp). Размер обеих таблиц
- под xp/w2k3 0x38 указателей
- под w2k 0x35 указателей
- под vista 0x3d указателей
- под w7 0x40 указателей
- под w8 0x44 указателей
Остается еще один вопрос - как найти неэкспортируемую ф-цию
NtUserMessageCall. Например из DriverEntry достать как аргументы к KeAddSystemServiceTable W32pServiceTable & W32pServiceLimit и по значению W32pServiceLimit в hard-coded словаре извлечь индекс NtUserMessageCall
P.S.: самая Ъ версия windows несомненно pure xp (без SP вообще). У нее в W32pServiceTable ровно 666 ф-ций, бгг