вторник, 6 сентября 2011 г.

ищем gapfnMessageCall

вот тут например 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 ф-ций, бгг

Комментариев нет:

Отправить комментарий