Формат ALPC-сообщений системных серверов

Тема в разделе "WASM.RESEARCH", создана пользователем Marylin, 19 мар 2025.

Метки:
  1. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    Всем привет!
    Недавно разбирался с клиент\сервером ALPC - между двумя моими прожками всё ок, связь есть. Но теперь хочу узнать, что передают клиенты системным ALPC-серверам типа: csrss\lsass\smss\svchost.exe, etc. То-есть мне нужно прочитать содержимое сообщений, которые эти серверы принимают\отправляют. Если получится, потенциально можно будет атаковать их.

    Своим клиентом я могу подключиться к любому из портов ALPC, и даже посылать им сообщения, которые они молча проглатывают. Имена портов получаю через "WinObjEx64". Более того, софт "ProcMonX" из пакета П.Йосифовича возвращает даже идентификаторы ALPC-мессаг, которые далее можно вскормить команде !alpc /m xxx отладчика WinDbg.

    ProcMonX.png

    Сейчас могу прочитать кое-что по схеме ниже, но непонятен точный формат данных. Иногда это текст, но в большинстве случаях наблюдаются штамы двоичных данных. Инфы по теме нету, т.к. фишка недокументирована, поэтому приходится тыкать пальцем в небо. Может кто-нибудь в курсе, на какие команды отзываются системные серверы ALPC ?
    Код (Text):
    1.  
    2. 0: kd> !alpc /lpc    <----- Ключ /lpc начиная с Win10+ (нету на win7)
    3. !alpc [05/31/2007]
    4.  
    5.   !alpc /m MessageAddress
    6.     Dumps the message at the specified address.
    7.   !alpc /p PortAddress
    8.     Dumps the port at the specified address.
    9.  
    10. ;//******************************************************************
    11.  
    12. 0: kd> dt nt!*alpc*      <----------------- Структуры поддержки ALPC
    13.           ntkrnlmp!_ALPC_COMMUNICATION_INFO
    14.           ntkrnlmp!_ALPC_COMPLETION_LIST
    15.           ntkrnlmp!_ALPC_COMPLETION_LIST_HEADER
    16.           ntkrnlmp!_ALPC_COMPLETION_LIST_STATE
    17.           ntkrnlmp!_ALPC_COMPLETION_PACKET_LOOKASIDE
    18.           ntkrnlmp!_ALPC_COMPLETION_PACKET_LOOKASIDE_ENTRY
    19.           ntkrnlmp!_ALPC_DISPATCH_CONTEXT
    20.           ntkrnlmp!_ALPC_HANDLE_ENTRY
    21.           ntkrnlmp!_ALPC_HANDLE_TABLE
    22.           ntkrnlmp!_ALPC_MESSAGE_ATTRIBUTES
    23.           ntkrnlmp!_ALPC_MESSAGE_ZONE
    24.           ntkrnlmp!_ALPC_PORT
    25.           ntkrnlmp!_ALPC_PORT_ATTRIBUTES
    26.           ntkrnlmp!_ALPC_PROCESS_CONTEXT
    27.           ntkrnlmp!_KALPC_HANDLE_DATA
    28.           ntkrnlmp!_KALPC_MESSAGE      <-------------------- Наш клиент!
    29.           ntkrnlmp!_KALPC_MESSAGE_ATTRIBUTES
    30.           ntkrnlmp!_KALPC_REGION
    31.           ntkrnlmp!_KALPC_RESERVE
    32.           ntkrnlmp!_KALPC_SECTION
    33.           ntkrnlmp!_KALPC_SECURITY_DATA
    34.           ntkrnlmp!_KALPC_VIEW
    35.  
    36. ;//***************************************************************
    37.  
    38. 0: kd> !alpc /m 5c0   <------------------------ "Id=5c0" взято у ProcMonX
    39. Message @ fffff8a004100030   <---------------------- адрес _KALPC_MESSAGE
    40.   MessageID             : 0x800005C0 (2147485120)
    41.   CallbackID            : 0x2F777 (194423)
    42.   SequenceNumber        : 0x00000000 (0)
    43.   Type                  : LPC_REPLY
    44.   DataLength            : 0x0024 (36)   <----------- Длина сообщения,
    45.   TotalLength           : 0x004C (76)   <----------- ... а это с заголовком = 0x28
    46.   Canceled              : No
    47.   Release               : Yes
    48.   ReplyWaitReply        : No
    49.   Continuation          : No
    50.   OwnerPort             : 0000000000000000 []
    51.   WaitingThread         : 0000000000000000
    52.   QueueType             : ALPC_MSGQUEUE_NONE
    53.   QueuePort             : 0000000000000000 []
    54.   QueuePortOwnerProcess : 0000000000000000 ()
    55.   ServerThread          : fffffa80059b7b50
    56.   QuotaCharged          : No
    57.   CancelQueuePort       : 0000000000000000
    58.   CancelSequencePort    : 0000000000000000
    59.   CancelSequenceNumber  : 0x00000000 (0)
    60.   ClientContext         : 0000000000000000
    61.   ServerContext         : 0000000000000000
    62.   PortContext           : 0000000000000420
    63.   CancelPortContext     : 0000000000000000
    64.   SecurityData          : 0000000000000000
    65.   View                  : 0000000000000000
    66.  
    67. ;//--------------------------------------------
    68.  
    69. 0: kd> dt nt!_KALPC_MESSAGE fffff8a004100030
    70.    +0x000 Entry               : _LIST_ENTRY [ 0xfffffa80`059ae6d8 - 0xfffffa80`059ae6d8 ]
    71.    +0x010 ExtensionBuffer     : (null)
    72.    +0x018 ExtensionBufferSize : 0
    73.    +0x020 QuotaProcess        : (null)
    74.    +0x020 QuotaBlock          : (null)
    75.    +0x028 SequenceNo          : 0n0
    76.    +0x02c u1                  : <unnamed-tag>
    77.    +0x030 CancelSequencePort  : (null)
    78.    +0x038 CancelQueuePort     : (null)
    79.    +0x040 CancelSequenceNo    : 0n0
    80.    +0x048 CancelListEntry     : _LIST_ENTRY [ 0x00000000`00000000 - 0x0 ]
    81.    +0x058 WaitingThread       : (null)
    82.    +0x060 Reserve             : (null)
    83.    +0x068 PortQueue           : (null)
    84.    +0x070 OwnerPort           : (null)
    85.    +0x078 MessageAttributes   : _KALPC_MESSAGE_ATTRIBUTES
    86.    +0x0b0 DataUserVa          : (null)
    87.    +0x0b8 DataSystemVa        : (null)
    88.    +0x0c0 CommunicationInfo   : 0xfffff8a0`041196e0 _ALPC_COMMUNICATION_INFO
    89.    +0x0c8 ConnectionPort      : 0xfffffa80`059ae640 _ALPC_PORT
    90.    +0x0d0 ServerThread        : 0xfffffa80`059b7b50 _ETHREAD
    91.    +0x0d8 PortMessage         : _PORT_MESSAGE  <-------- Заголовок сообщения = 28h байт
    92.  
    93. ;//******************************************************************
    94.  
    95. 0: kd> dt nt!_KALPC_MESSAGE fffff8a004100030 PortMessage.
    96.    +0x0d8 PortMessage  :
    97.       +0x000 u1           : <unnamed-tag>  <------- Data\TotalLength (Send)
    98.       +0x004 u2           : <unnamed-tag>  <------- Data\TotalLength (Receive)
    99.       +0x008 ClientId     : _CLIENT_ID
    100.       +0x018 MessageId    : 0x800005c0
    101.       +0x020 CallbackId   : 0x2f777
    102.  
    103. 0: kd> dt nt!_KALPC_MESSAGE fffff8a004100030 PortMessage.u1.s1. PortMessage.ClientId.
    104.    +0x0d8 PortMessage  :
    105.       +0x000 u1           :
    106.          +0x000 s1            :
    107.             +0x000 DataLength    : 0n36  <------ 24h
    108.             +0x002 TotalLength   : 0n76
    109.       +0x008 ClientId              :
    110.          +0x000 UniqueProcess         : 0x00000000`00000728
    111.          +0x008 UniqueThread          : 0x00000000`0000075c
    112.  
    113. ;//******************************************************************
    114. ;// Буфер сообщения начинается сразу после заголовка, поэтому...
    115. ;//******************************************************************
    116.  
    117. 0: kd> db fffff8a004100030 + d8 + 28 L24
    118. fffff8a0`04100130  01 00 00 80 00 00 00 00-02 00 00 80 58 00 00 00  ............X...
    119. fffff8a0`04100140  40 02 00 40 00 00 00 00-1a 00 00 00 07 00 00 00  @..@............
    120. fffff8a0`04100150  01 00 00 00                                      ....
    121.  
    Это мессага, которая послана кем-то ALPC-серверу DWM.EXE (в структурах можно найти и клиента). Я заметил, что первые 8-байт почти у всех сообщений одинаковые, хотя иногда встречаются и строки. Как выяснилось, серверы не очищают свои буферы для сл.сообщений, т.е. прежние данные просто затираются новыми, в результате чего часть истории можно увидеть задрав в отладчике аргумент L24, до например L200 (в данном случае там пусто).

    В общем интересно, можно-ли разобраться в формате этих сообщений?
    Была идея брутфорсом атаковать порты серверов, подсовывая от нуля и до 64-бит значения, но непонятно, какой результат ожидать от ALPC-сервака. Буду благодарен за любые идеи.
     
  2. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    547
  3. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    alex_dz, это первые линки из гугла, и (если вы читали их) там нет ответов на мои вопросы.
    сейчас пытаюсь разобраться с аргументами NtAlpcSendWaitReceivePort() в дизассемблере, но там тёмный лес..
     
  4. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    Это же в сурках есть, вот например. Рандомно берём CsrCreateRemoteThread() смотрим диз, как в сурках, может какие то мелкие отличия и есть:

    NtQueryInformationThread
    CsrLockProcessByClientId
    CsrAllocateThread
    CsrInsertThread

    На счёт сервера, так ведь не важно что смена lpc на alpc, всё та же CsrApiRequestThread(): NtAlpcSendWaitReceivePort, w10. Не вижу смысла в осевые сервисы лезть.

    По lsass были очень давно утечки сурков, не знаю есть ли это в сурках xp.)
     
    Marylin нравится это.
  5. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    воо, вроде правильное направление..
    https://xakep.ru/2011/06/09/55567/
     
    Ahimov нравится это.
  6. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    Не вы одни там баги искали) ;)

    Кстати csr отлаживался olly, но я не особо помню как туда отладчик цеплялся. Помню нужно было олли открыть ей же и что то менять, толи создание тредов скипать.. тут все это должно быть если поискать.
     
    Последнее редактирование: 20 мар 2025
    Marylin нравится это.
  7. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    С api csrss вроде что-то проясняется, но это далеко от alpc-портов. Да и помимо него есть другие серверы типа lsass\smss.
    Мне интересно разобраться именно с форматом сообщений, чтобы заставить системный сервак реагировать на посылаемые мною мессаги. Сейчас-же он тупо проглатывает\игнорирует их, при этом моя функция отправки возвращает ОК, а не ошибку.

    В дизасм листингах lsass есть кое-что, но управление передаётся через call qword ptr [rax] (см.строку 2с92 ниже), и хз куда двигаться дальше. Если только подключать WinDbg шнурком и дебажить в реалтайме..

    Код (Text):
    1.  
    2. .text:0000000100002BAB ; ---------------------------------------------------------------------------
    3. .text:0000000100002BAC                 align 20h
    4. .text:0000000100002BC0 ; =============== S U B R O U T I N E =======================================
    5. .text:0000000100002BC0
    6. .text:0000000100002BC0 ; Attributes: noreturn
    7. .text:0000000100002BC0
    8. .text:0000000100002BC0 ; ULONG __stdcall LsapRmServerThread(PVOID Parameter)
    9. .text:0000000100002BC0 LsapRmServerThread proc near            ; DATA XREF: LsapRmInitializeServer+1D1
    10. .text:0000000100002BC0                                         ; .pdata:00000001000091BC ...
    11. .text:0000000100002BC0
    12. .text:0000000100002BC0 var_418         = word ptr -418h
    13. .text:0000000100002BC0 var_416         = word ptr -416h
    14. .text:0000000100002BC0 var_414         = dword ptr -414h
    15. .text:0000000100002BC0 var_3F0         = dword ptr -3F0h
    16. .text:0000000100002BC0 ReceiveMessage  = _PORT_MESSAGE ptr -218h
    17. .text:0000000100002BC0 var_18          = qword ptr -18h
    18. .text:0000000100002BC0 arg_0           = qword ptr  8
    19. .text:0000000100002BC0
    20. .text:0000000100002BC0 ; __unwind { // __GSHandlerCheck
    21. .text:0000000100002BC0                 mov     [rsp+arg_0], rbx
    22. .text:0000000100002BC5                 push    rdi
    23. .text:0000000100002BC6                 sub     rsp, 430h
    24. .text:0000000100002BCD                 mov     rax, cs:__security_cookie
    25. .text:0000000100002BD4                 xor     rax, rsp
    26. .text:0000000100002BD7                 mov     [rsp+438h+var_18], rax
    27. .text:0000000100002BDF                 mov     edi, 200h
    28. .text:0000000100002BE4                 mov     eax, 1D8h
    29. .text:0000000100002BE9                 mov     [rsp+438h+var_414], 0
    30. .text:0000000100002BF1                 mov     [rsp+438h+var_416], di
    31. .text:0000000100002BF6                 mov     [rsp+438h+var_418], ax
    32. .text:0000000100002BFB
    33. .text:0000000100002BFB loc_100002BFB:                          ; CODE XREF: LsapRmServerThread+6B
    34. .text:0000000100002BFB                                         ; LsapRmServerThread+7F ...
    35. .text:0000000100002BFB                 xor     ebx, ebx
    36. .text:0000000100002BFD
    37. .text:0000000100002BFD loc_100002BFD:                                             ; CODE XREF: LsapRmServerThread+F3
    38. .text:0000000100002BFD                 lea     rcx, [rsp+438h+ReceiveMessage]     ; void *
    39. .text:0000000100002C05                 mov     r8, rdi                            ; Size
    40. .text:0000000100002C08                 xor     edx, edx                           ; Val
    41. .text:0000000100002C0A                 call    memset_0
    42. .text:0000000100002C0F                 mov     rcx, cs:gLsapCommandPortHandle     ; PortHandle
    43. .text:0000000100002C16                 lea     r9, [rsp+438h+ReceiveMessage]      ; ReceiveMessage
    44. .text:0000000100002C1E                 mov     r8, rbx                            ; ReplyMessage
    45. .text:0000000100002C21                 xor     edx, edx                           ; PortContext
    46. .text:0000000100002C23                 call    cs:__imp_NtReplyWaitReceivePort
    47. .text:0000000100002C29                 test    eax, eax
    48. .text:0000000100002C2B                 js      short loc_100002BFB
    49. .text:0000000100002C2D                 movzx   ecx, word ptr [rsp+438h+ReceiveMessage.u2]
    50. .text:0000000100002C35                 cmp     cx, 1
    51. .text:0000000100002C39                 jz      short loc_100002C41
    52. .text:0000000100002C3B                 cmp     cx, 3
    53. .text:0000000100002C3F                 jnz     short loc_100002BFB
    54. .text:0000000100002C41
    55. .text:0000000100002C41 loc_100002C41:                                             ; CODE XREF: LsapRmServerThread+79
    56. .text:0000000100002C41                 lea     rdx, [rsp+438h+ReceiveMessage]
    57. .text:0000000100002C49                 lea     r8, [rsp+438h+var_418]
    58. .text:0000000100002C4E                 lea     rbx, [rsp+438h+var_418]
    59. .text:0000000100002C53                 mov     rax, [rdx]
    60. .text:0000000100002C56                 mov     [r8], rax
    61. .text:0000000100002C59                 mov     rax, [rdx+8]
    62. .text:0000000100002C5D                 mov     [r8+8], rax
    63. .text:0000000100002C61                 mov     rax, [rdx+10h]
    64. .text:0000000100002C65                 mov     [r8+10h], rax
    65. .text:0000000100002C69                 mov     rax, [rdx+18h]
    66. .text:0000000100002C6D                 mov     [r8+18h], rax
    67. .text:0000000100002C71                 mov     rax, [rdx+20h]
    68. .text:0000000100002C75                 mov     [r8+20h], rax
    69. .text:0000000100002C79                 mov     rax, cs:gLsapRmExtension
    70. .text:0000000100002C80                 test    rax, rax
    71. .text:0000000100002C83                 jz      short loc_100002CA9
    72. .text:0000000100002C85                 lea     rdx, [rsp+438h+var_418]
    73. .text:0000000100002C8A                 lea     rcx, [rsp+438h+ReceiveMessage]
    74. .text:0000000100002C92   ------->>>    call    qword ptr [rax]
    75. .text:0000000100002C94                 cmp     eax, 103h
    76. .text:0000000100002C99                 jz      loc_100002BFB
    77. .text:0000000100002C9F                 mov     cx, word ptr [rsp+438h+ReceiveMessage.u2]
    78. .text:0000000100002CA7                 jmp     short loc_100002CAB
    79. .text:0000000100002CA9 ; ---------------------------------------------------------------------------
    80. .text:0000000100002CA9 loc_100002CA9:                                      ; CODE XREF: LsapRmServerThread+C3
    81. .text:0000000100002CA9                 xor     eax, eax
    82. .text:0000000100002CAB loc_100002CAB:                                      ; CODE XREF: LsapRmServerThread+E7
    83. .text:0000000100002CAB                 mov     [rsp+438h+var_3F0], eax
    84. .text:0000000100002CAF                 cmp     cx, 3
    85. .text:0000000100002CB3                 jnz     loc_100002BFD
    86. .text:0000000100002CB9                 jmp     loc_100002BFB
    87. .text:0000000100002CB9 ; ---------------------------------------------------------------------------
    88. .text:0000000100002CBE                 db 12h dup(90h)
    89. .text:0000000100002CBE ; }
    90. .text:0000000100002CBE LsapRmServerThread endp
    91.  
     
  8. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    Ну вот допустим. Немного изменилось, но gLsapRmExtension" это не индексный указатель, там далее видимо:

    Код (Text):
    1. Status = (LsapCommandDispatch[CommandMessage->CommandNumber])(
    2.                          CommandMessage,
    3.                          Reply);
    Аргументы rcx:rdx a0, a1. Просто посмотреть что в [gLsapRmExtension].

    Это ведь юзермод, зачем вд?
    Он же очень не удобный в плане навигации.
     
    Последнее редактирование: 20 мар 2025
  9. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    чёто я совсем запутался..
    где и каким образом я должен это посмотреть?
     
  10. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    Значение переменной, указателя, куда он ссылается. Тем более есть у вас дебаг символы. Вот я не совсем понимаю что вам не понятно. Значение по адресу gLsapRmExtension прочитать.
    А есчо этот cs:.. не двусмысленно намекает что указатель запротекчен от перезаписи.
     
  11. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    Листинг выше - это дизасм в офлайне скопированного lsass из папки Win.
    Чтобы взять переменную gLsapRmExtension, нужно приатачиться к нему, но при попытке система уходит в ребут. Да хоть я и найду эту переменную, нужно всё-равно будет трейсить lsass дальше, что сделать на работающей Win нереально.
    Код (Text):
    1. CommandLine: "F:\Install\DEBUG\Win7\lsass.exe"
    2. Symbol search path is: srv*c:\Symbols*http://msdl.microsoft.com/download/symbols
    3. Executable search path is:
    4. ModLoad: 00000000`ff860000  00000000`ff86c000   lsass.exe
    5. ModLoad: 00000000`77a60000  00000000`77bff000   ntdll.dll
    6. ModLoad: 00000000`77940000  00000000`77a5f000   C:\Windows\system32\kernel32.dll
    7. ModLoad: 000007fe`fd580000  000007fe`fd5e7000   C:\Windows\system32\KERNELBASE.dll
    8. ModLoad: 000007fe`fef40000  000007fe`fefdf000   C:\Windows\system32\msvcrt.dll
    9. ModLoad: 000007fe`ff170000  000007fe`ff295000   C:\Windows\system32\RPCRT4.dll
    10. ModLoad: 000007fe`fd200000  000007fe`fd20b000   C:\Windows\system32\SspiSrv.dll
    11.  
    12. (580.64c): Break instruction exception - code 80000003 (first chance)
    13. ntdll!LdrpDoDebuggerBreak+0x30:
    14. 00000000`77b05c90 cc              int     3
    15.  
    16. 0:000> ln gLsapRmExtension
    17. (00000000`ff868758)   lsass!gLsapRmExtension  |  (00000000`ff868760)   lsass!gLsapExtensionList
    18.  
    19. 0:000> dps 00000000`ff868758
    20. 00000000`ff868758  00000000`00000000  <----- Значение переменной
    21. 00000000`ff868760  00000000`00000000
    22. 00000000`ff868768  00000000`00000000
    23. 00000000`ff868770  00000000`00000000
    24. 00000000`ff868778  00000000`00000000
    25. 00000000`ff868780  00000000`00000000
    26. 00000000`ff868788  00000000`00000000
    27. 00000000`ff868790  00000000`00000000
    Поэтому я и говорю, что WinDbg со-шнурком наше всё. Просто я думал в дизасме поймать тупые проверки cmp xx на константы, но как оказалось их там нет. В общем вернусь к структуре KALPC_MESSAGE в WinDbg - может чё получится.
    --- Сообщение объединено, 20 мар 2025 ---
    Кстати вот что периодически посылает в порт lsass его клиент svchost.exe:
    Код (Text):
    1. 1: kd> !alpc /m 5f8
    2.  
    3. Message @ fffff8a00504f030
    4.   MessageID             : 0x05F8 (1528)
    5.   CallbackID            : 0x13E1E (81438)
    6.   SequenceNumber        : 0x00000014 (20)
    7.   Type                  : LPC_REQUEST
    8.   DataLength            : 0x005C (92)
    9.   TotalLength           : 0x0084 (132)
    10. .......
    11.   OwnerPort             : fffffa8004d9f950 [ALPC_CLIENT_COMMUNICATION_PORT]
    12.   WaitingThread         : 0000000000000000
    13.   QueueType             : ALPC_MSGQUEUE_PENDING
    14.   QueuePort             : fffffa8005796090 [ALPC_CONNECTION_PORT]
    15.   QueuePortOwnerProcess : fffffa8005768b00 (svchost.exe)
    16.   ServerThread          : fffffa8004e1cb50
    17. .......
    18.   ClientContext         : 0000000001d30920
    19.   ServerContext         : 0000000000000000
    20.   PortContext           : 0000000001c6a2d0
    21.   SecurityData          : fffff8a0051b0f90
    22.  
    23. 1: kd> db fffff8a00504f030+100 L5c
    24.  
    25. fffff8a0`0504f130  00 00 00 00 00 00 00 00-00 00 00 00 13 00 00 00  ................
    26. fffff8a0`0504f140  01 00 00 00 01 00 00 00-00 00 00 00 00 00 00 00  ................
    27. fffff8a0`0504f150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    28. fffff8a0`0504f160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
    29. fffff8a0`0504f170  00 00 00 00 85 a9 08 53-57 af 3f 4f 8a b5 9c 2f  .......SW.?O.../
    30. fffff8a0`0504f180  31 aa e6 a2 0a 00 00 00-00 00 00 00              1...........
     
  12. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    Marylin,

    Три минуты, ida:

    Код (Text):
    1. .text:00000001400047C0 ; Exported entry   3. LsaRegisterExtension
    2. .text:00000001400047C0
    3. .text:00000001400047C0 ; =============== S U B R O U T I N E =======================================
    4. .text:00000001400047C0
    5. .text:00000001400047C0
    6. .text:00000001400047C0                 public LsaRegisterExtension
    7. .text:00000001400047C0 LsaRegisterExtension proc near          ; DATA XREF: .rdata:000000014000896C↓o
    8. .text:00000001400047C0                                         ; .rdata:off_14000B578↓o
    9. .text:00000001400047C0                 test    ecx, ecx
    10. .text:00000001400047C2                 jz      short loc_1400047D9
    11. .text:00000001400047C4                 cmp     ecx, 2
    12. .text:00000001400047C7                 jz      short loc_1400047E4
    13. .text:00000001400047C9                 cmp     ecx, 3
    14. .text:00000001400047CC                 jnz     short loc_1400047EF
    15. .text:00000001400047CE                 mov     cs:gLsapLookupExtension, rdx
    16. .text:00000001400047D5                 xor     eax, eax
    17. .text:00000001400047D7                 retn
    18. .text:00000001400047D7 ; ---------------------------------------------------------------------------
    19. .text:00000001400047D8                 db 0CCh
    20. .text:00000001400047D9 ; ---------------------------------------------------------------------------
    21. .text:00000001400047D9
    22. .text:00000001400047D9 loc_1400047D9:                          ; CODE XREF: LsaRegisterExtension+2↑j
    23. .text:00000001400047D9                 mov     cs:gLsapRmExtension, rdx
    24. .text:00000001400047E0                 xor     eax, eax
    25. .text:00000001400047E2                 retn
    Теперь бы я посмотрел что экспорт тащит..

    Вы это с таким успехом будите год разбирать всякими кернелдебаг :sarcastic:

    lsasrv:

    Код (Text):
    1. .text:000000018006F457                 lea     rdx, LsapIdProvExtIfTable
    2. .text:000000018006F45E                 mov     ecx, 3EBh
    3. .text:000000018006F463                 call    cs:__imp_LsaRegisterInterface
    LsapGetIdProvCertFromCred() ваши хэндлеры)
    --- Сообщение объединено, 20 мар 2025 ---
    > что сделать на работающей Win нереально.

    Полнейшая чушь. Вот посмотрел(attach), x64dbg:

    lsa.png
     
    Последнее редактирование: 20 мар 2025
  13. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    статические логи не несут полезной информации - нужна динамика.
    ну пересылается в переменную значение из rdx, и что с того?
    по логам !alpc /m видно, что размер данных 5с-байт - меня это интересует.
    я думаю есть какой-то заголовок (типа кода команды), за которым уже следуют данные.
     
  14. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    Marylin,

    Останов в отладчике на серверные сервисные апи. Ёлки у меня терпение всё, удачи с отладкой.)
     
  15. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    походу не терпенье всё, а идеи всё.
    К чему этот дизасм в x64dbg, если и шага в нём нельзя сделать? (а как закроешь, так вообще ребут).
    И в каком отладчике мне нужно ставить бряки на сервисы?
    Короче лишь-бы что-то сказать... с таким подходом вы потратите год на поиски.
     
  16. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    180
    > если и шага в нём нельзя сделать?

    Наверно нужно попробовать ??

    Обычная юзер отладка. С чего это падать будет ?

    Вообще юзер отладчик видали ?

    csr виснет из за рекурсии, при попытке аттача в него идут сообщения, а он остановлен отладчиком.
    --- Сообщение объединено, 20 мар 2025 ---
    Если в лсасс останов поставить на NtRequest* то при нажатии win+L всё виснет из за срабатывания останова. Если не фуллскрин запрос то будет останов как в любом обычном приложении.
     
  17. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    ..так если не пробовал, то не говорил-бы наверное. Короче фигня это всё..
    Гораздо эффективней написать скрипт для WinDbg, который похукает овер 1000 alpc-сообщений, после чего сравнив, выделить из них штамы\сигнатуры. Нах мне изучать дизасм-листинги недокументированных сервисов, когда есть уже готовые мессаги? То-есть у меня уже на руках то, что создаёт и отправляет вся эта свора api из lsasrv.dll. Просто разобраться в содержимом, и посылать сервакам аналогичные данные из своего клиента. Если вернётся что-то вразумительное, значит гуд и смотреть на реакцию.
     
  18. algent

    algent Active Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    106
    Marylin, можно что-то вроде:
    bp address "r rax; bd 0; g"

    как вариант, вместо r - db или dd
     
  19. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    292
    algent, это для чего? на какой адрес ставится bp?
     
  20. algent

    algent Active Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    106
    Ну подробно в сабж я не вникал.... Вы ведь вроде хотите "не останавливая поток сообщений", а иначе система уходит в ребут, хотите считать переменную(адрес перехода содержащийся в rax)? Я решил на всякий случай, напомнить про брэкпойнт с "CommandString"+Go, тип bp, который по сути не останавливает процессор.
     
    Marylin нравится это.