Использование SecLookupAccountSid

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

  1. Drinkerq

    Drinkerq New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    3
    Здравствуйте.

    я хочу получить имя пользователя запустившего процесс посредством SecLookupAccountSid. делаю следующее:

    Код (Text):
    1.     NTSTATUS Status;
    2.  
    3.     ULONG SizeOfUserToken = 0;
    4.     HANDLE hToken;
    5.  
    6.     HANDLE ProcessHandle;
    7.     OBJECT_ATTRIBUTES ObjectAttributes;
    8.     CLIENT_ID cid;
    9.  
    10.     InitializeObjectAttributes(&ObjectAttributes,
    11.                                 (PUNICODE_STRING)NULL,
    12.                                 OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE,
    13.                                 NULL,
    14.                                 NULL);
    15.     cid.UniqueProcess = (HANDLE)ProcessId;
    16.     cid.UniqueThread  = (HANDLE)0;
    17.    
    18.     Status = ZwOpenProcess(&ProcessHandle,PROCESS_ALL_ACCESS, &ObjectAttributes, &cid);
    19.     if (!NT_SUCCESS(Status))
    20.     {
    21.         return Status;
    22.     }
    23.  
    24.     Status = ZwOpenProcessToken(ProcessHandle,TOKEN_QUERY,&hToken);
    25.     if (!NT_SUCCESS(Status))
    26.     {
    27.         return Status;
    28.     }
    29.  
    30.     Status = ZwQueryInformationToken(hToken,
    31.                             TokenUser,
    32.                             NULL,
    33.                             0,
    34.                             &SizeOfUserToken);
    35.     if (Status == STATUS_BUFFER_TOO_SMALL)
    36.     {
    37.         ULONG NameSize = 0;
    38.         ULONG DomainNameSize = 0;
    39.        
    40.         PTOKEN_USER pTokenUser;
    41.         SID_NAME_USE NameUse;
    42.  
    43.         pTokenUser = (PTOKEN_USER)ExAllocatePool (NonPagedPool,SizeOfUserToken);
    44.         if (pTokenUser == NULL)
    45.         {
    46.             ZwClose(hToken);
    47.             return STATUS_INSUFFICIENT_RESOURCES;
    48.         }
    49.  
    50.         Status = ZwQueryInformationToken(hToken,
    51.                                             TokenUser,
    52.                                             pTokenUser,
    53.                                             SizeOfUserToken,
    54.                                             &SizeOfUserToken);
    55.         if(!NT_SUCCESS(Status))
    56.         {
    57.             ZwClose(hToken);
    58.             ExFreePool(pTokenUser);
    59.             return Status;
    60.         }
    61.         ZwClose(hToken);
    62.  
    63.  
    64.         UserName.Buffer = ExAllocatePool (NonPagedPool,128);
    65.         if (UserName.Buffer == NULL)
    66.         {
    67.             ExFreePool(pTokenUser);
    68.             return STATUS_INSUFFICIENT_RESOURCES;
    69.         }
    70.         UserName.MaximumLength = 128;
    71.         UserName.Length = 0;
    72.  
    73.         DomainName.Buffer = ExAllocatePool (NonPagedPool,128);
    74.         if (DomainName.Buffer == NULL)
    75.         {
    76.             ExFreePool(pTokenUser);
    77.             ExFreePool(UserName.Buffer);
    78.             return STATUS_INSUFFICIENT_RESOURCES;
    79.         }
    80.         DomainName.MaximumLength = 128;
    81.         DomainName.Length = 0;
    82.  
    83.         Status = SecLookupAccountSid(pTokenUser->User.Sid,
    84.                                 &NameSize,
    85.                                 &UserName,
    86.                                 &DomainNameSize,
    87.                                 &DomainName,
    88.                                 &NameUse);
    89.         if (Status == STATUS_BUFFER_TOO_SMALL)
    90.         {
    91.             ...
    92.         }
    93.  
    94.         ExFreePool(pTokenUser);
    95.     }
    В результате или набитые всегда одним и тем же мусором строчки или (что чаще) BSOD.
    Код (Text):
    1. kd> !analyze -v
    2. *******************************************************************************
    3. *                                                                             *
    4. *                        Bugcheck Analysis                                    *
    5. *                                                                             *
    6. *******************************************************************************
    7.  
    8. PAGE_FAULT_IN_NONPAGED_AREA (50)
    9. Invalid system memory was referenced.  This cannot be protected by try-except,
    10. it must be protected by a Probe.  Typically the address is just plain bad or it
    11. is pointing at freed memory.
    12. Arguments:
    13. Arg1: f9b142ca, memory referenced.
    14. Arg2: 00000000, value 0 = read operation, 1 = write operation.
    15. Arg3: 804ecba1, If non-zero, the instruction address which referenced the bad memory
    16.     address.
    17. Arg4: 00000000, (reserved)
    18.  
    19. Debugging Details:
    20. ------------------
    21.  
    22.  
    23. READ_ADDRESS:  f9b142ca
    24.  
    25. FAULTING_IP:
    26. nt!RtlCopyUnicodeString+34
    27. 804ecba1 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
    28.  
    29. MM_INTERNAL_CODE:  0
    30.  
    31. DEFAULT_BUCKET_ID:  CODE_CORRUPTION
    32.  
    33. BUGCHECK_STR:  0x50
    34.  
    35. PROCESS_NAME:  System
    36.  
    37. TRAP_FRAME:  f9a3da3c -- (.trap 0xfffffffff9a3da3c)
    38. ErrCode = 00000000
    39. eax=0000001e ebx=0000001e ecx=00000007 edx=f9a3dc70 esi=f9b142ca edi=80d22588
    40. eip=804ecba1 esp=f9a3dab0 ebp=f9a3dabc iopl=0         nv up ei pl nz na po cy
    41. cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010203
    42. nt!RtlCopyUnicodeString+0x34:
    43. 804ecba1 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
    44. Resetting default scope
    45.  
    46. LAST_CONTROL_TRANSFER:  from 8053273f to 804e3592
    47.  
    48. STACK_TEXT:  
    49. f9a3d58c 8053273f 00000003 f9b142ca 00000000 nt!RtlpBreakWithStatusInstruction
    50. f9a3d5d8 80533216 00000003 806ef03c c03e6c50 nt!KiBugCheckDebugBreak+0x19
    51. f9a3d9b8 80533806 00000050 f9b142ca 00000000 nt!KeBugCheck2+0x574
    52. f9a3d9d8 805241a0 00000050 f9b142ca 00000000 nt!KeBugCheckEx+0x1b
    53. f9a3da24 804e1718 00000000 f9b142ca 00000000 nt!MmAccessFault+0x6f5
    54. f9a3da24 804ecba1 00000000 f9b142ca 00000000 nt!KiTrap0E+0xcc
    55. f9a3dabc fc2a33ed 80d22588 f9a3dbdc 00000000 nt!RtlCopyUnicodeString+0x34
    56. f9a3dbe4 fc29d98f 00000000 f9a3dc44 f9a3dc38 KSecDD!SecpLookupAccountSid+0x187
    57. f9a3dc14 f9099b55 ffa7efe0 f9a3dc38 f9a3dc44 KSecDD!SecLookupAccountSid+0x59
    58. f9a3dc84 f909a299 00000194 f9a3dcec f9a3dcb0 DCPEXAMPLE!GetProcessUserName+0x1a5 [e:\drivers\drivertest\drivertovmmdev\projectfordriver\drivertest\soursfiles\process_info.c @ 479]
    59. f9a3dd3c f9099e4e ff9b4000 0000fff3 f9a3dd9c DCPEXAMPLE!ProcessHostCommand+0x399 [e:\drivers\drivertest\drivertovmmdev\projectfordriver\drivertest\soursfiles\zombie.c @ 440]
    60. f9a3ddac 8057c9da ffab3970 00000000 00000000 DCPEXAMPLE!RequestHostCommand+0x14e [e:\drivers\drivertest\drivertovmmdev\projectfordriver\drivertest\soursfiles\zombie.c @ 169]
    61. f9a3dddc 804f88ea f9099d00 ffab3970 00000000 nt!PspSystemThreadStartup+0x34
    62. 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
    63.  
    64.  
    65. STACK_COMMAND:  kb
    66.  
    67. CHKIMG_EXTENSION: !chkimg -lo 50 -d !nt
    68.     804d8f94-804d8f98  5 bytes - nt!KiXMMIZeroPage+30
    69.     [ fa f7 80 0c 02:e9 ef 0a 1e 7b ]
    70.     804d93b6-804d93ba  5 bytes - nt!ExAcquireResourceSharedLite+10 (+0x422)
    71.     [ fa 8b 75 08 33:e9 05 56 1b 7b ]
    72.     804da72e-804da732  5 bytes - nt!KiChainedDispatch+28 (+0x1378)
    73.     [ fa ff 15 08 76:e9 9d 26 1f 7b ]
    74.     804db65b-804db65f  5 bytes - nt!ExReleaseResourceLite+b (+0xf2d)
    75.     [ fa 66 8b 51 0e:e9 00 1f 1b 7b ]
    76.     804db880-804db884  5 bytes - nt!KiDispatchInterrupt+c (+0x225)
    77.     [ fa 3b 00 74 1d:e9 cb 76 1d 7b ]
    78.     804db954-804db958  5 bytes - nt!SwapContext+30 (+0xd4)
    79.     [ fa 89 67 28 8b:e9 df 17 1b 7b ]
    80.     804dbb3a-804dbb3b  2 bytes - nt!KiIdleLoop+13 (+0x1e6)
    81.     [ fa 3b:e9 79 ]
    82.     804dbb3d-804dbb3e  2 bytes - nt!KiIdleLoop+16 (+0x03)
    83.     [ 00 74:1d 7b ]
    84.     804dbbdb-804dbbdf  5 bytes - nt!KiRetireDpcList+4d (+0x9e)
    85.     [ fa 3b 6d 00 75:e9 f8 70 1d 7b ]
    86.     804dbc69-804dbc6d  5 bytes - nt!Ki386AdjustEsp0+1e (+0x8e)
    87.     [ fa 8b 15 40 f0:e9 d2 f9 1a 7b ]
    88.     804dbc7d-804dbc81  5 bytes - nt!KiSetDebugActive+6 (+0x14)
    89.     [ fa 88 48 2c 88:e9 b6 38 1b 7b ]
    90.     804de7fd-804de801  5 bytes - nt!KiServiceExit (+0x2b80)
    91.     [ fa f7 45 70 00:e9 ee ce 1a 7b ]
    92.     804de85f - nt!KiServiceExit+62 (+0x62)
    93.     [ fa:cc ]
    94.     804de9a4-804de9a8  5 bytes - nt!KiServiceExit2 (+0x145)
    95.     [ fa f7 45 70 00:e9 2f 44 1f 7b ]
    96.     804de9e4 - nt!KiServiceExit2+40 (+0x40)
    97.     [ fa:cc ]
    98.     804df05c-804df060  5 bytes - nt!KiExceptionExit (+0x678)
    99.     [ fa f7 45 70 00:e9 87 05 1b 7b ]
    100.     804df09c - nt!Kei386EoiHelper+40 (+0x40)
    101.     [ fa:cc ]
    102.     804e0dc3 - nt!VdmFixEspEbp+3 (+0x1d27)
    103.     [ 0f:cc ]
    104.     804e1f22-804e1f26  5 bytes - nt!KiFlushNPXState+4 (+0x115f)
    105.     [ fa 8b 3d 1c f0:e9 69 d4 1a 7b ]
    106.     804e2b6c-804e2b70  5 bytes - nt!KiCallUserMode+54 (+0xc4a)
    107.     [ fa 8b 0e 89 0c:e9 df 23 1f 7b ]
    108.     804e2c5a-804e2c5e  5 bytes - nt!KeSwitchKernelStack+3e (+0xee)
    109.     [ fa 89 8a 68 01:e9 09 bc 1a 7b ]
    110.     804e2cef-804e2cf3  5 bytes - nt!NtCallbackReturn+3b (+0x95)
    111.     [ fa 8b 35 04 f0:e9 04 24 1f 7b ]
    112.     804e2e11-804e2e15  5 bytes - nt!ExfInterlockedAddUlong+1 (+0x122)
    113.     [ fa 8b 01 01 11:e9 32 da 1e 7b ]
    114.     804e2e1d-804e2e21  5 bytes - nt!ExfInterlockedInsertHeadList+1 (+0x0c)
    115.     [ fa 8b 01 89 02:e9 b6 f8 1c 7b ]
    116.     804e2e35-804e2e39  5 bytes - nt!ExfInterlockedInsertTailList+1 (+0x18)
    117.     [ fa 8b 41 04 89:e9 86 f0 1c 7b ]
    118.     804e2e51-804e2e55  5 bytes - nt!ExfInterlockedRemoveHeadList+1 (+0x1c)
    119.     [ fa 8b 01 3b c1:e9 fa 58 1e 7b ]
    120.     804e32a5-804e32a9  5 bytes - nt!KeUpdateSystemTime+e6 (+0x454)
    121.     [ fa ff 81 70 08:e9 5e 40 1d 7b ]
    122.     804e32f6-804e32fa  5 bytes - nt!KeUpdateSystemTime+137 (+0x51)
    123.     [ fa ff 15 08 76:e9 8d 19 1d 7b ]
    124.     804e35e3-804e35e7  5 bytes - nt!ExAcquireResourceExclusiveLite+f (+0x2ed)
    125.     [ fa 8b 75 08 eb:e9 b8 9c 1a 7b ]
    126.     804e8910-804e8914  5 bytes - nt!ExIsResourceAcquiredExclusiveLite+b (+0x532d)
    127.     [ fa 8b 4d 08 32:e9 7b 9e 1c 7b ]
    128.     804e8a15-804e8a19  5 bytes - nt!ExAcquireSharedWaitForExclusive+10 (+0x105)
    129.     [ fa 8b 75 08 33:e9 66 1a 1d 7b ]
    130.     804ed38c-804ed390  5 bytes - nt!CcGetActiveVacb+5 (+0x4977)
    131.     [ fa 8b 45 08 8b:e9 9f 48 1c 7b ]
    132.     804ee3c2-804ee3c6  5 bytes - nt!ExIsResourceAcquiredSharedLite+c (+0x1036)
    133.     [ fa 8b 4d 08 39:e9 71 41 1c 7b ]
    134.     804efade-804efadf  2 bytes - nt!ExReleaseResourceForThreadLite+8 (+0x171c)
    135.     [ fa 8b:e9 75 ]
    136.     804efae1-804efae2  2 bytes - nt!ExReleaseResourceForThreadLite+b (+0x03)
    137.     [ 08 66:1d 7b ]
    138.     804efe58-804efe5c  5 bytes - nt!ExDisableResourceBoostLite+5 (+0x377)
    139.     [ fa 8b 45 08 80:e9 1b 21 1c 7b ]
    140.     804f0288 - nt!ExAcquireSharedStarveExclusive+f (+0x430)
    141.     [ fa:cc ]
    142.     804f0439-804f043d  5 bytes - nt!ExSetResourceOwnerPointer+c (+0x1b1)
    143.     [ fa 8b 75 08 f6:e9 82 41 1d 7b ]
    144.     804f0be0-804f0be4  5 bytes - nt!ExpAllocateExclusiveWaiterEvent+65 (+0x7a7)
    145.     [ fa 5f 5e 5b c9:e9 d3 ce 19 7b ]
    146.     804f0d01-804f0d05  5 bytes - nt!KeRestoreFloatingPointState+79 (+0x121)
    147.     [ fa f6 03 01 0f:e9 22 3c 1e 7b ]
    148.     804f0ddb-804f0ddf  5 bytes - nt!KeSaveFloatingPointState+9f (+0xda)
    149.     [ fa 0f 20 c0 8b:e9 50 3d 1e 7b ]
    150.     804f134c-804f1350  5 bytes - nt!CcSetActiveVacb+7 (+0x571)
    151.     [ fa 8b 45 08 83:e9 67 34 1d 7b ]
    152.     804fae39-804fae3d  5 bytes - nt!ExpFindCurrentThread+10d (+0x9aed)
    153.     [ fa 8b 75 f8 8b:e9 9a 40 19 7b ]
    154.     804faea3 - nt!ExpFindCurrentThread+187 (+0x6a)
    155.     [ fa:cc ]
    156.     804faf07-804faf0b  5 bytes - nt!ExpAllocateSharedWaiterSemaphore+5e (+0x64)
    157.     [ fa 5f 5e c9 c2:e9 44 43 19 7b ]
    158.     804fb5e8-804fb5ec  5 bytes - nt!ExConvertExclusiveToSharedLite+5 (+0x6e1)
    159.     [ fa 8b 45 08 66:e9 d3 f5 1b 7b ]
    160.     805038af-805038b3  5 bytes - nt!KeRemoveQueueDpc+6 (+0x82c7)
    161.     [ fa 8b 45 08 8b:e9 ec 19 1d 7b ]
    162.     805073df-805073e3  5 bytes - nt!IoStartTimer+17 (+0x3b30)
    163.     [ fa 66 83 78 02:e9 14 7f 1b 7b ]
    164.     8050939e-805093a2  5 bytes - nt!Ki386SetupAndExitToV86Code+a3 (+0x1fbf)
    165.     [ fa 51 8b 73 04:e9 4d ba 1c 7b ]
    166.     8050ba6b-8050ba6f  5 bytes - nt!Ki386VdmEnablePentiumExtentions+5 (+0x26cd)
    167.     [ fa 0f 20 e0 f7:e9 00 6e 1c 7b ]
    168. WARNING: !chkimg output was truncated to 50 lines. Invoke !chkimg without '-lo [num_lines]' to view  entire output.
    169. 236 errors : !nt (804d8f94-80545fee)
    170.  
    171. MODULE_NAME: memory_corruption
    172.  
    173. IMAGE_NAME:  memory_corruption
    174.  
    175. FOLLOWUP_NAME:  memory_corruption
    176.  
    177. DEBUG_FLR_IMAGE_TIMESTAMP:  0
    178.  
    179. MEMORY_CORRUPTOR:  LARGE
    180.  
    181. FAILURE_BUCKET_ID:  MEMORY_CORRUPTION_LARGE
    182.  
    183. BUCKET_ID:  MEMORY_CORRUPTION_LARGE
    184.  
    185. Followup: memory_corruption
    186. ---------
    Что здесь не так?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Drinkerq
    Судя по багчеку вы передали инвалидную ссылку. Может это юникодовская строка, может есчо что. Не вооружённым глазом трудно сказать.
     
  3. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Ставите бряк на RtlCopyUnicodeString, и смотрите что и куда у вас пытается скопироваться.

    offtop: как же тяжело читать код без венгерской нотации, нифига не понятно где какие переменные))