Узнать заголовок окна по Handle (r0)??

Тема в разделе "WASM.NT.KERNEL", создана пользователем test555, 21 янв 2010.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Драйвер, известен хендл окна верхнего уровня. Как можно узнать текст?

    Нужен аналог юзермодного GetWindowText или SendMessage(hWnd, WM_GETTEXT,..)

    Прошел отладочником по 2 варианту, дошел до места

    Код (Text):
    1. MOV EDX, ESP
    2. SYSENTER
    Состояние EAX == 11E3

    Тут и встает вопрос, какая из функций win2k.sys будет вызвана согласно этому номеру..
    Как это можно узнать?

    Просмотрел список функций теневой таблицы, функций типа
    NtUserGetWindowText - не обнаружено.
    NtUserSendMessage - не обнаружено.

    Есть только NtUserPostMessage, но юзермодной функцией PostMessage(hWnd, WM_GETTEXT,..) тест получить нельзя.

    Установил ХУК на NtUserPostMessage, накидал тестовую юзермодную прогу
    Код (Text):
    1. SendMessage(hWnd, WM_GETTEXT,..)
    Текст получается, функция при этом не вызывается. Отсюда вывод - юзается другая. Но какая?

    Как можно посмотреть: куда передается управление после SYSENTER, согласно регистру EAX...

    В распоряжении Syser, IDA, Olly...
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Если в пределах одного процесса, то SendMessage сразу уходит в WndProc класса окна назначения, AFAIR.
    Открой в IDA Pro user32.dll с символами. Там будут и названия юзермодных гейтов в Shadow-сервисы.
    Например, NtUserCreateWindowEx, NtUserPostThreadMessage, ...
    Заодно увидишь, какие сервисы вызывает та же SendMessage.

    ПС. Проще сделать юзермодный поток из дрова, который вызовет GetWindowText.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Проще и надёжнее из глобальной секции шадова имя вытянуть без всяких теневых сервисов.
    test555
    http://lmgtfy.com/?q=ssdt+sysenter
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Внутри Win32k первое реализовано через второе.

    Таких функции нет, а API-функция SendMessage() реализована через вызов по индексу во внутренней таблице Win32k, её адрес брать там же. Впрочем, лучше найти адрес сервиса SendMessageEx(), так будет универсальнее. Короче говоря, сервиса NtUserSendMessage() не существует, не ищи.

    Тебе нужно найти адрес вот этой функции:

    Код (Text):
    1. LRESULT
    2. xxxSendMessageEx (
    3.     PWND pwnd,
    4.     UINT message,
    5.     WPARAM wParam,
    6.     LPARAM lParam,
    7.     ULONG_PTR xParam);
    Можно через сигнатурный поиск попробовать. Последний параметр можно установить в 0L.

    Это бесполезно в твоём случае.

    Ну возьми да найти таблицу индексов в сети и сравни. Или тупо Rootkit Unhooker какой-нибудь из последних версий запусти, там есть эта таблица плюс там же сможешь проверить, корректно ли хук поставил или нет.
     
  5. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Тут можно подробнее?

    ПС: проблема решена, решил юзать юзермод таки.

    ППС: 11Е3 - это NtUserQueryWIndow.. В ней два параметра, - хендл и 0 или 1.. Не знаю что это значит, да и уже не важно.
     
  6. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Всех благодарю за ответы..
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Очевидно, information class, как и во всех остальных Nt**QueryInformation** сервисах
     
  8. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Передает инфо-класс, но вот как его потом получить - не известно...

    ПС: все же интересно, что имел ввиду Clerk.... (глобальная секция шадова)
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    test555
    Это и имел ввиду. Обьекты и пр. храняться в секции, она на юзерспейс мапится.
     
  10. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Народ что-то совсем не читает статьи. Все же написано уже...
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Twister
    Там не популярно описано, не приблежённый не поймёт. Вобщето вроде можно для техже целей NLS-секции юзать, в на апипорте висят несколько сервисов для этого ;)
    Особенно не тру, лучше так:
    Код (Text):
    1. ; User.h
    2. ;
    3. ; USERCONNECT - \
    4. ;               |
    5. ;               + SHAREDINFO - \
    6. ;               |              |
    7. ;                              + (ulSharedDelta)
    8. ;                              |
    9. ;                              + PSERVERINFO
    10. ;                              |
    11. ;                              + PDISPLAYINFO
    12. ;                              |
    13. ;                              + PHANDLEENTRY
    14. ;                              |
    15.  
    16. KERNEL_ULONG_PTR typedef DWORD
    17.  
    18. ; Private types.
    19. PDESKTOPINFO        typedef PVOID
    20. PWND                typedef PVOID
    21. PFNCLIENT           typedef PVOID
    22. PFNCLIENTWORKER typedef PVOID
    23. WNDPROC_PWNDEX      typedef PVOID
    24. WNDPROC_PWND        typedef PVOID
    25. PMONITOR            typedef PVOID
    26. PHOOK           typedef PVOID
    27. PDCE                typedef PVOID
    28. PSPB                typedef PVOID
    29. KHKL                typedef HANDLE
    30. HBITMAP         typedef HANDLE
    31.  
    32. ; +
    33. ; CI
    34. ; TEB.Win32ClientInfo[WIN32_CLIENT_INFO_LENGTH]
    35.  
    36. CALLBACKWND struct
    37. hwnd        HWND ?
    38. pwnd        PWND ?
    39. CALLBACKWND ends
    40. PCALLBACKWND typedef ptr CALLBACKWND
    41.  
    42. CLIENTTHREADINFO struct
    43. CTIF_flags      UINT ?
    44. fsChangeBits        WORD ?  ; Bits changes since last compared
    45. fsWakeBits      WORD ?  ; Bits currently available
    46. fsWakeBitsJournal   WORD ?  ; Bits saved while journalling
    47. fsWakeMask      WORD ?  ; Bits looking for when asleep
    48. timeLastRead        LONG ?  ; Time of last input read
    49. CLIENTTHREADINFO ends
    50. PCLIENTTHREADINFO typedef ptr CLIENTTHREADINFO
    51.  
    52. WIN32_CLIENT_INFO_LENGTH    equ 7CH ; sizeof(CLIENTINFO)
    53.  
    54. CVKKEYCACHE equ 32
    55. CBKEYCACHE  equ (CVKKEYCACHE shr 2)
    56.  
    57. CVKASYNCKEYCACHE    equ 16
    58. CBASYNCKEYCACHE equ (CVKASYNCKEYCACHE shr 2)
    59.  
    60. CLIENTINFO struct
    61. CI_flags            KERNEL_ULONG_PTR ?  ; Needs to be first because CSR sets this
    62. cSpins          KERNEL_ULONG_PTR ?  ; GDI resets this
    63. dwExpWinVer     DWORD ?
    64. dwCompatFlags       DWORD ?
    65. dwCompatFlags2      DWORD ?
    66. dwTIFlags           DWORD ?
    67. pDeskInfo           PDESKTOPINFO ?
    68. ulClientDelta       KERNEL_ULONG_PTR ?
    69. phkCurrent      PHOOK ?
    70. fsHooks         DWORD ?
    71. cWnd                CALLBACKWND <>
    72. dwHookCurrent       DWORD ?
    73. cInDDEMLCallback    DWORD ?
    74. pClientThreadInfo   PCLIENTTHREADINFO ?
    75. dwHookData      KERNEL_ULONG_PTR ?
    76. dwKeyCache      DWORD ?
    77. afKeyState      BYTE CBKEYCACHE DUP (?)
    78. dwAsyncKeyCache DWORD ?
    79. afAsyncKeyState BYTE CBASYNCKEYCACHE DUP (?)
    80. afAsyncKeyStateRecentDown   BYTE CBASYNCKEYCACHE DUP (?)
    81. hKL             KHKL ?
    82. CodePage            WORD ?
    83. achDbcsCF           BYTE 2 DUP (?)
    84. ;msgDbcsCB      KERNEL_MSG ?
    85. ; #if LATER
    86. ; eventCached       EVENTMSG ?  ; Cached Event for Journal Hook
    87. CLIENTINFO ends
    88. PCLIENTINFO typedef ptr CLIENTINFO
    89.  
    90. ; +
    91. ; HE
    92. ;
    93. HANDLEF_DESTROY     equ 1
    94. HANDLEF_INDESTROY       equ 2
    95. HANDLEF_INWAITFORDEATH  equ 4
    96. HANDLEF_FINALDESTROY    equ 8
    97. HANDLEF_MARKED_OK       equ 10H
    98. HANDLEF_GRANTED     equ 20H
    99. HANDLEF_VALID           equ 3FH
    100.  
    101. ; Object types
    102.  
    103. TYPE_FREE           equ 0
    104. TYPE_WINDOW     equ 1
    105. TYPE_MENU           equ 2
    106. TYPE_CURSOR     equ 3
    107. TYPE_SETWINDOWPOS   equ 4
    108. TYPE_HOOK           equ 5
    109. TYPE_CLIPDATA       equ 6   ; clipboard data
    110. TYPE_CALLPROC       equ 7
    111. TYPE_ACCELTABLE equ 8
    112. TYPE_DDEACCESS      equ 9
    113. TYPE_DDECONV        equ 10
    114. TYPE_DDEXACT        equ 11  ; DDE transaction tracking info.
    115. TYPE_MONITOR        equ 12
    116. TYPE_KBDLAYOUT      equ 13  ; Keyboard Layout handle (HKL) object.
    117. TYPE_KBDFILE        equ 14  ; Keyboard Layout file object.
    118. TYPE_WINEVENTHOOK   equ 15  ; WinEvent hook (EVENTHOOK)
    119. TYPE_TIMER      equ 16
    120. TYPE_INPUTCONTEXT   equ 17  ; Input Context info structure
    121. TYPE_CTYPES     equ 18  ; Count of TYPEs; Must be LAST + 1
    122. TYPE_GENERIC        equ 255 ; used for generic handle validation
    123.  
    124. HEAD struct
    125. h       HANDLE ?
    126. cLockObj    DWORD ?
    127. HEAD ends
    128. PHEAD typedef ptr HEAD
    129.  
    130. HANDLEENTRY struct
    131. phead   PHEAD ? ; pointer to the real object
    132. pOwner  PVOID ? ; pointer to owning entity (pti or ppi)
    133. bType   BYTE ?  ; type of object
    134. bFlags  BYTE ?  ; flags - like destroy flag
    135. wUniq   WORD ?  ; uniqueness count
    136. HANDLEENTRY ends
    137. PHANDLEENTRY typedef ptr HANDLEENTRY
    138. PHE typedef ptr PHANDLEENTRY
    139.  
    140. ; +
    141. ; DISPLAYINFO
    142. ; NT:[gpDispInfo]
    143.  
    144. DISPLAYINFO struct
    145. ; device stuff
    146. hDev                HANDLE ?
    147. pmdev           PVOID ?
    148. hDevInfo            HANDLE ?
    149. ; useful dcs
    150. hdcScreen           HDC ?   ; Device-Context for screen
    151. hdcBits         HDC ?   ; Holds system-bitmap resource
    152. ; Graystring resources
    153. hdcGray         HDC ?   ; GrayString DC.
    154. hbmGray         HBITMAP ?   ; GrayString Bitmap Surface.
    155. cxGray          ULONG ? ; width of gray bitmap
    156. cyGray          ULONG ? ; height of gray bitmap
    157. ; random stuff
    158. pdceFirst           PDCE ?  ; list of dcs
    159. pspbFirst           PSPB ?  ; list of spbs
    160. ; Monitors on this device
    161. cMonitors           ULONG ? ; number of monitors attached to desktop
    162. pMonitorPrimary PMONITOR ?  ; the primary monitor (display)
    163. pMonitorFirst       PMONITOR ?  ; monitor in use list
    164. ; device characteristics
    165. rcScreen            RECT <> ; Rectangle of entire desktop surface
    166. hrgnScreen      HRGN ?  ; region describing virtual screen
    167. dmLogPixels     WORD ?  ; pixels per inch
    168. BitCountMax     WORD ?  ; Maximum bitcount across all monitors
    169. DISPLAYINFO ends
    170. PDISPLAYINFO typedef ptr DISPLAYINFO
    171.  
    172. FNID_START      equ 29AH
    173. FNID_END            equ 2B4H
    174. FNID_WNDPROCEND equ 29EH
    175.  
    176. FNID_ARRAY_SIZE equ 32
    177.  
    178. ICLS_MAX            equ 22  ; Number of system classes
    179.  
    180. MBSTRING struct
    181. szName  WCHAR 15 DUP (?)
    182. uID     UINT ?
    183. uStr        UINT ?
    184. MBSTRING ends
    185. PMBSTRING typedef ptr MBSTRING
    186.  
    187. ; Total number of strings used as button strings in MessageBoxes
    188. MAX_MB_STRINGS      equ 11
    189.  
    190. NCHARS          equ 256
    191.  
    192. ; +
    193. ; SI
    194. ;
    195. SERVERINFO struct
    196. wRIPFlags           WORD ?  ; RIPF_ flags
    197. wSRVIFlags      WORD ?  ; SRVIF_ flags
    198. wRIPPID         WORD ?  ; PID of process to apply RIP flags to (zero means all)
    199. wRIPError           WORD ?  ; Error to break on (zero means all errors are treated equal)
    200. cHandleEntries      KERNEL_ULONG_PTR ?  ; count of handle entries in array
    201. ; Array of server-side function pointers.
    202. ; Client passes servers function ID so they can be easily validated;
    203. ; this array maps function ID into server-side function address.
    204. ; The order of these are enforced by the FNID_ constants, and must match
    205. ; the client-side mpFnidClientPfn[] order as well.
    206. mpFnidPfn           WNDPROC_PWNDEX FNID_ARRAY_SIZE DUP (<>) ; function mapping table
    207. aStoCidPfn      WNDPROC_PWND (FNID_WNDPROCEND - FNID_START) + 1 DUP (<>)
    208.  
    209. ; mapping of fnid to min bytes need by public windproc user
    210. mpFnid_serverCBWndProc  WORD (FNID_END - FNID_START) + 1 DUP (<>)
    211.  
    212. ; Client side functions pointer structure.
    213. apfnClientA     PFNCLIENT ? ; Version dependent!
    214. apfnClientW     PFNCLIENT ?
    215. apfnClientWorker    PFNCLIENTWORKER ?
    216.  
    217. cbHandleTable       DWORD ?
    218.  
    219. ; Class atoms to allow fast checks on the client.
    220. atomSysClass        ATOM ICLS_MAX DUP (<>)  ; Atoms for control classes
    221.  
    222. dwDefaultHeapBase   DWORD ? ; so WOW can do handle validation
    223. dwDefaultHeapSize   DWORD ?
    224.  
    225. uiShellMsg      UINT ?  ; message for shell hooks
    226. wMaxBtnSize     UINT ?  ; Size of the longest button string in any MessageBox
    227. MBStrings           MBSTRING MAX_MB_STRINGS DUP (<>)
    228.  
    229. ;values to allow HasCaptionIcon to be in user32
    230. atomIconSmProp      ATOM <>
    231. atomIconProp        ATOM <>
    232.  
    233. atomContextHelpIdProp   ATOM <>
    234.  
    235. acOemToAnsi     CHAR NCHARS DUP (?)
    236. acAnsiToOem     CHAR NCHARS DUP (?)
    237.  
    238. ; ..PERUSERSERVERINFO
    239.  
    240. ; #if DEBUGTAGS
    241. ;    DWORD adwDBGTAGFlags[DBGTAG_Max + 1];
    242. SERVERINFO ends
    243. PSERVERINFO typedef ptr SERVERINFO
    244.  
    245. WNDMSG struct
    246. maxMsgs UINT ?
    247. abMsgs  PVOID ?
    248. WNDMSG ends
    249. PWNDMSG typedef ptr WNDMSG
    250.  
    251. ; +
    252. ; SHAREDINFO
    253. ; [NT:gSharedInfo]
    254. ;
    255. SHAREDINFO struct
    256. psi             PSERVERINFO ?
    257. aheList         PHANDLEENTRY ?  ; Handle table pointer.
    258. pDispInfo           PDISPLAYINFO ?
    259. ulSharedDelta       KERNEL_ULONG_PTR ?
    260. awmControl      WNDMSG (FNID_END - FNID_START + 1) DUP (<>)
    261. DefWindowMsgs       WNDMSG <>
    262. DefWindowSpecMsgs   WNDMSG <>
    263. SHAREDINFO ends
    264. PSHAREDINFO typedef ptr SHAREDINFO
    265.  
    266. ; +
    267. ;
    268. USERCONNECT struct
    269. ulVersion           ULONG ? ; USERCURRENTVERSION
    270. ulCurrentVersion    ULONG ? ; OPTIONAL
    271. dwDispatchCount DWORD ?
    272. siClient            SHAREDINFO <>
    273. USERCONNECT ends
    274. PUSERCONNECT typedef ptr USERCONNECT
    275.  
    276. USER_MAJOR_VERSION  equ 5
    277. USER_MINOR_VERSION  equ 0
    278. USERCURRENTVERSION  equ ((USER_MAJOR_VERSION shl 16) or USER_MINOR_VERSION)
    279.  
    280. CSRSRV_SERVERDLL_INDEX  equ 0
    281. BASESRV_SERVERDLL_INDEX equ 1
    282. CONSRV_SERVERDLL_INDEX  equ 2
    283. USERSRV_SERVERDLL_INDEX equ 3
    284.  
    285. .code
    286. UserConnectToServer proc uses ebx ConnectionInformation:PUSERCONNECT
    287. Local SessionDirectory[10]:WCHAR
    288. Local ConnectionInformationLength:ULONG
    289. Local CalledFromServer:BOOLEAN
    290.     xor eax,eax
    291.     mov ecx,ConnectionInformation
    292.     mov ebx,STATUS_INVALID_PARAMETER
    293.     mov ConnectionInformationLength,124H
    294. ; WINSS_OBJECT_DIRECTORY_NAME = "\Windows"
    295.     mov dword ptr [SessionDirectory],('W' shl 16) or '\'
    296.     mov USERCONNECT.ulVersion[ecx],USERCURRENTVERSION
    297.     mov dword ptr [SessionDirectory + 2*2],('n' shl 16) or 'i'
    298.     mov dword ptr [SessionDirectory + 4*2],('o' shl 16) or 'd'
    299.     mov dword ptr [SessionDirectory + 6*2],('s' shl 16) or 'w'
    300.     mov dword ptr [SessionDirectory + 8*2],eax
    301.     mov CalledFromServer,eax
    302.     invoke CsrClientConnectToServerI, addr SessionDirectory, USERSRV_SERVERDLL_INDEX, ConnectionInformation, addr ConnectionInformationLength, addr CalledFromServer
    303.     cmp eax,ebx ; STATUS_UNSUCCESSFUL если версия не верна.
    304.     jne Exit
    305.     mov ConnectionInformationLength,120H
    306.     invoke CsrClientConnectToServerI, addr SessionDirectory, USERSRV_SERVERDLL_INDEX, ConnectionInformation, addr ConnectionInformationLength, addr CalledFromServer
    307.     cmp eax,ebx
    308.     jne Exit
    309.     mov ConnectionInformationLength,sizeof(USERCONNECT) + 4*8
    310. @@:
    311.     invoke CsrClientConnectToServerI, addr SessionDirectory, USERSRV_SERVERDLL_INDEX, ConnectionInformation, addr ConnectionInformationLength, addr CalledFromServer
    312.     sub ConnectionInformationLength,4
    313.     cmp eax,ebx
    314.     jne Exit
    315.     cmp ConnectionInformationLength,sizeof(USERCONNECT)
    316.     jnb @b
    317. Exit:
    318.     ret
    319. UserConnectToServer endp
    Порты из ядра доступны.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Рабочий код который ищет заголовок окна(в ядре проверок нужно добавить на вхождение в юзерспейс и можно дельту не считать, юзая ядерную проекцию):
    Код (Text):
    1. ; +
    2. ; Верификация описателя.
    3. ; Eax - ссылка на обьект в пользовательской проекции.
    4. ; Ecx - ссылка на обьект в ядерной проекции.
    5. ; Edx - ссылка на описатель обьекта.
    6. ;
    7. ValidateHandle proc SharedInormation:PSHAREDINFO, ObjectType:ULONG, Handle:HANDLE
    8.     mov ecx,SharedInormation
    9.     mov edx,Handle
    10.     mov eax,SHAREDINFO.psi[ecx]
    11.     and edx,HMINDEXBITS
    12.     cmp SERVERINFO.cHandleEntries[eax],edx  ; limit.
    13.     mov ecx,SHAREDINFO.aheList[ecx]
    14.     jb Error
    15.     lea edx,[edx + edx*2]   ; sizeof(HANDLEENTRY) = 12
    16.     mov eax,Handle
    17.     lea edx,[ecx + edx*4]   ;  p + n*12 = p + (n*3)*4
    18.     shr eax,HMUNIQSHIFT
    19.     mov ecx,ObjectType
    20.     assume edx:PHANDLEENTRY
    21.     cmp [edx].wUniq,ax
    22.     jne Error
    23.     cmp [edx].bType,cl
    24.     jne Error
    25.     mov ecx,fs:[CLIENTINFO.pDeskInfo[TEB.Win32ClientInfo]]
    26.     mov eax,[edx].phead
    27.     cmp DESKTOPINFO.pvDesktopBase[ecx],eax  ; range.
    28.     jnb Error
    29.     cmp DESKTOPINFO.pvDesktopLimit[ecx],eax
    30.     mov ecx,eax
    31.     jb Error
    32.     sub eax,fs:[CLIENTINFO.ulClientDelta[TEB.Win32ClientInfo]]
    33.     jbe Error
    34. Exit:
    35.     ret
    36. Error:
    37.     xor eax,eax
    38.     xor ecx,ecx
    39.     xor edx,edx
    40.     jmp Exit
    41. ValidateHandle endp
    42.  
    43. TwName      equ 88H
    44.  
    45.     ...
    46.     invoke FindWindow, NULL, addr $Caption
    47.     BREAKZ
    48.     invoke ValidateHandle, addr USERCONNECT.siClient[ConnectionInformation], TYPE_WINDOW, Eax
    49.     BREAKZ
    50.     add eax,dword ptr [eax + TwName]
    51.     sub eax,ecx
    52.     ...
     
  13. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    В следующей статье цикла (про хуки) этот адрес ищется динамически, забыл про это упомянуть. А так да, конечно такой подход не тру.

    Только я не понял зачем столько входных параметров?
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Twister
    Уточните, не совсем понял.
     
  15. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Задача: получить указатель на Wide-строку заголовка окна. Условие: по хэндлу окна в R0.
    Вот я и не понял, зачем в функцию передается ObjectType. :)

    А вот тут я бы рекомендовал быть аккуратнее. Если мне не изменяет память, то смещение строки класса равно 0x60 на Win2k. Смещение строки заголовка тоже не везде одинаково. Я бы с удовольствием привел все смещения для всех версий Nt, но к сожалению исходники того проекта в прошлом году достались крысам вместе с ноутом. Единственное чем могу подсобить - бинарником драйвера далеко не самой последней версии. Это всяко лучше, чем дизасмить около десятка разных вариаций win32k.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Twister
    Это ведь тестовые примеры всё, которые я на XP запускаю. ObjectType - аверификация, вот так привык я выполнять проверки. Всё вам не нравится :dntknw:
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    *верификация
     
  18. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Так так так, тема не умерла.

    По некоторым причинам использование юзермода откладывается.

    Статью про инжект через окно читал, но она мне показалась не очень наглядной и не очень пригодной для этой задачи (мне не хватает знаний)...

    По написанным Вашим сообщением остались вопросы, завтра и спрошу..
     
  19. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Итак, кому интересно, узнать можно с помощью функции NtUserMessageCall
    Какие параметры дать - сомтрите ИДА, SendMessage в итоге выходит на нее.

    Но, есть один подводный камень. Если вызывать функцию из ядра, то нужно передавать адрес буфера в юзермодной памяти, иначе в один момент функция спотыкается на ProbeForWtire..
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    test555
    Тоесть весь дров шадова доступен, только вы не способны искать не экспортируемые ссылки и изза этого приходится прибегать к таким убогим способам как дёрганье пользовательского функционала из ядра ?