Раздел реестра SAM - сбор информации

Тема в разделе "FASM", создана пользователем Marylin, 19 май 2026 в 19:48.

Метки:
  1. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    333
    Всем привет!
    В общем мне нужно программно собрать сведения из куста SAM о всех учётных записях. Доступ ко вложенным ключам под админом я получил, но проблема в том, что ни одно из найденных в сети описаний структур F и V не совпадает с моим дампом - видимо это устаревшие прототипы для WinXP. Ключ "BootKey" для расшифровки хэшей NTLM я тоже собрал из ветки System\Lsa, и он совпадает с выхлопом mimikatz и прочих утилит. Мне нужны сведения как на этом скрине.

    sam.png
     
    Mikl___ нравится это.
  2. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    333
    Нашёл я всё-таки доку по недокументированным структурам куста SAM.
    Если коротко, то по пути HKLM\SAM\SAM\Domains\Account\Users\<rid> имеем 2 параметра F и V. В первом лежит инфа о состоянии учётной записи, а во-втором 17 атрибутов с деталями типа SID, UserName, NTLM Hash, и многое другое. Я наложил найденную структуру на параметр(V), и сбоксил всю нарытую инфу в статики диалогового окна.

    В результате получился такой софт для сбора сведений обо всех учётных записях на лок.узле. Тестировал на Win7/10 и вроде всё работает правильно. Если кто найдёт ошибки - буду благодарен. В скрепке экзе для тестов, и сама дока pdf. 13 из 72 аверов на вирустотал шумят, но это нормально для софта с таким функционалом. Можно конечно снизить порог зашифровав строки и звать апи чз GetProcAddress(), но мне было лень заниматься этим. Запускать правой клавишей мыши от имени админа. Здесь лежит статья по теме.

    Код (ASM):
    1. format   pe gui 6.0
    2. entry    start
    3. include 'win32ax.inc'
    4. include 'equates\reghive.inc'
    5. include 'encoding\win1251.inc'
    6. ;//-------------------
    7. .data
    8. ID_LV       =   1000
    9. ID_JD       =   1001
    10. ID_SK       =   1002
    11. ID_GB       =   1003
    12. ID_DT       =   1004
    13. ID_Key      =   1005
    14. ID_File     =   1006
    15. ID_Fsize    =   1007
    16. ID_Sam      =   1008
    17. ID_Win      =   1009
    18. ID_Stat     =   1010
    19. ID_Time     =   1011
    20. ID_Pass     =   1012
    21. ID_Bad      =   1013
    22. ID_Lcnt     =   1014
    23. ID_Bcnt     =   1015
    24. ID_NHash    =   1016
    25. ID_Sid      =   1017
    26. ID_Save     =   1018
    27. ID_Clear    =   1019
    28.  
    29. RRF_RT_ANY         =  0xffff
    30. RRF_RT_REG_BINARY  =  0x0008
    31.  
    32. hLV         dd  0
    33. hModule     dd  0
    34. hDlg        dd  0
    35. hReg        dd  0
    36. hToken      dd  0
    37. hSamBackup  dd  0
    38. hSamUsers   dd  0
    39. hSamNames   dd  0
    40. hUserRid    dd  0
    41. index       dd  0
    42. osFlag      dd  0
    43. hMyBrush    dd  0    ;// дескриптор кисти для фона Static
    44.  
    45. lpClass     dq  0,0,0,0,0
    46. lpcClass    dd  0
    47. pcbBinary   dd  16
    48. pDataSize   dd  0
    49. ridBuff     dd  0,0
    50. pdwType     dd  0
    51. f_Buff      rd  80   ;//<--- Буфер (fixed)
    52.  
    53. align 16
    54. sysKey      db  'SYSTEM\CurrentControlSet\Control\Lsa\',0,0,0,0,0,0,0,0
    55. subKey      db  'JD',0,0,0,0
    56.             db  'Skew1',0
    57.             db  'GBG',0,0,0
    58.             db  'Data',0,0
    59. subKeyName  rb  16
    60.  
    61. align 16
    62. usersPath   db  'SAM\SAM\Domains\Account\Users\',0
    63. users       db  64 dup(0)
    64.  
    65. align 16
    66. namesPath   db  'SAM\SAM\Domains\Account\Users\Names\',0
    67. names       db  64 dup(0)
    68.  
    69. userOn      db  'Активна',0
    70. userOff     db  'Отключена',0
    71.  
    72. ;//ShiftArray  db  8,5,4,2,11,9,13,3,0,6,1,12,14,10,15,7
    73. shiftArray  db  16,10,8,4,22,18,26,6,0,12,2,24,28,20,30,14
    74. hexKey      dd  0,0,0,0,0,0,0,0
    75.  
    76. align 16
    77. struct TOKEN_PRIVILEGES
    78.    PrivilegeCount  dd  1   ;// Счётчик добавляемых привилегий
    79.    BckpLuid        dq  0   ;// Место под Backup_LUID
    80.    BckpPrivileges  dd  2   ;// SE_PRIVILEGE_ENABLED
    81. ends
    82. tp     TOKEN_PRIVILEGES
    83.  
    84. lvi    LV_ITEM
    85. lvc    LV_COLUMN
    86. stm    SYSTEMTIME
    87. nmlv   NM_LISTVIEW
    88.  
    89. colName0    db  'Учётная запись',0
    90. colName1    db  'RID',0
    91.  
    92. align 16
    93. buff        rb  2048
    94.  
    95. ;//-------------------
    96. .code
    97. start:    invoke  IsUserAnAdmin
    98.           or      eax,eax
    99.           jnz     @f
    100.           invoke  MessageBox,0,<'Ошибка! Требуются права админа.',0>,0,0x30
    101.           invoke  ExitProcess,1
    102.  
    103. ;// Включаем привилегию "Backup" для доступа к SAM
    104. @@:       invoke  GetCurrentProcess
    105.           invoke  OpenProcessToken,eax,0x28, hToken
    106.           lea     eax,[tp.BckpLuid]
    107.           invoke  LookupPrivilegeValue,0,<'SeBackupPrivilege',0>,eax
    108.           invoke  AdjustTokenPrivileges,[hToken],0,tp,0,0,0   ;// 1 = Ок!
    109.           invoke  CloseHandle,[hToken]
    110.  
    111.           invoke  InitCommonControls
    112.           invoke  GetModuleHandle,0
    113.           mov     [hModule],eax
    114.           invoke  DialogBoxParam, eax,100,0,DialogProc,0
    115.           invoke  ExitProcess, 0
    116.  
    117. proc  DialogProc hwnd, msg, wparam, lparam
    118.           mov     eax,[hwnd]
    119.           mov     [hDlg],eax
    120.  
    121.           cmp     [msg],WM_INITDIALOG
    122.           je      @init
    123.           cmp     [msg],WM_COMMAND
    124.           je      @exit
    125.           cmp     [msg],WM_CLOSE
    126.           je      @close
    127.           cmp     [msg],WM_NOTIFY
    128.           je      @notify
    129.           cmp     [msg],WM_CTLCOLORSTATIC
    130.           je      @strgb
    131.           jmp     @next
    132.  
    133. ;//***************************************************
    134. ;//****** Обработчик "WM_CTLCOLORSTATIC" *************
    135. ;//***************************************************
    136. ;// wParam = контекст устройства HDC
    137. ;// lParam = дескриптор элемента управления
    138. @strgb:   invoke  GetDlgCtrlID,[lparam]
    139.           mov     ecx,17
    140.           mov     ebx,1001
    141.  
    142. @@:       push    eax ebx ecx
    143.           cmp     eax,ebx
    144.           je      @f
    145.           pop     ecx ebx eax
    146.           inc     ebx
    147.           loop    @b
    148.           jmp     @next
    149.                                          ;5d260e
    150. @@:       invoke  SetTextColor,[wparam],0x080848    ;// 00BBGGRR
    151.           invoke  SetBkMode,[wparam],TRANSPARENT    ;// прозрачный фон
    152.           invoke  GetSysColorBrush,COLOR_BTNFACE    ;// обязательно возвратить стд.кисть!
    153.           ret
    154.  
    155. ;//***************************************************
    156. ;//****** Обработчик сообщения "WM_INITDIALOG" *******
    157. ;//***************************************************
    158. @init:    invoke  SetWindowText,[hwnd],<'SAM Hive Info v0.1. (Demo version)',0>
    159. ;//------ Версия Windows
    160.           mov     esi,[ fs:0x30]
    161.           mov     eax,[esi+0xA4]
    162.           mov     ebx,[esi+0xA8]
    163.           movzx   ecx,word[esi+0xAC]
    164.           movzx   edx,word[esi+0xAE]
    165.           shr     edx,8
    166.           mov     [osFlag],eax
    167.          cinvoke  wsprintf,buff,<'Microsoft Windows %d.%d.%d - SP%d',0>,eax,ebx,ecx,edx
    168.           invoke  SetDlgItemText,[hwnd],ID_Win,buff
    169.  
    170. ;//------ Отключить буттон "Сброс пароля"
    171.           invoke  GetDlgItem,[hwnd],ID_Clear
    172. ;          invoke  EnableWindow,eax,0
    173.  
    174. ;//------ Вставим иконку в окно
    175.           invoke  LoadIcon,[hModule],101
    176.           invoke  SendMessage,[hwnd],WM_SETICON,ICON_BIG,eax
    177.  
    178. ;//------ Получить дескриптор контрола ListView
    179.           invoke  GetDlgItem,[hwnd],ID_LV
    180.           mov     [hLV],eax
    181. ;//------ Установить для него расширенный стиль
    182.           invoke  SendMessage,eax,LVM_SETEXTENDEDLISTVIEWSTYLE,0,\
    183.                                     LVS_EX_FULLROWSELECT + LVS_EX_GRIDLINES
    184.  
    185. ;//------ Вставить столбцы "LV_COLUMN" в список
    186.           mov     [lvc.mask],LVCF_TEXT + LVCF_WIDTH + LVCF_FMT
    187.  
    188.           mov     [lvc.cx],140
    189.           mov     [lvc.pszText],colName0
    190.           invoke  SendMessage,[hLV], LVM_INSERTCOLUMN, 0, lvc
    191.  
    192.           mov     [lvc.cx],75
    193.           mov     [lvc.pszText],colName1
    194.           mov     [lvc.fmt],LVCFMT_CENTER
    195.           invoke  SendMessage,[hLV], LVM_INSERTCOLUMN, 1, lvc
    196.  
    197. ;//------ Читаем в цикле классы ..\LSA\JD-Skew1-GBG-Data
    198.           mov     ebx,lpClass
    199.           mov     esi,subKey
    200.           mov     edi,sysKey+37
    201.           mov     ecx,4
    202. @@:       push    ecx esi edi ebx ebx
    203.           mov     ecx,6
    204.           rep     movsb
    205.  
    206.           mov     [lpcClass],16
    207.           invoke  RegOpenKeyEx,HKEY_LOCAL_MACHINE,sysKey,0,KEY_QUERY_VALUE,hReg
    208.           pop     ebx
    209.           invoke  RegQueryInfoKey,[hReg],ebx,lpcClass,0,0,0,0,0,0,0,0,0
    210.           invoke  RegCloseKey,[hReg]
    211.  
    212.           pop     ebx edi esi ecx
    213.           add     esi,6
    214.           add     ebx,8
    215.           loop    @b
    216.  
    217. ;//------ Вывод имён классов в статики
    218. @@:       mov     eax,subKey
    219.           mov     esi,lpClass
    220.           mov     edi,subKeyName
    221.           mov     ecx,4
    222.           mov     ebx,ID_JD
    223. @@:       push    eax ebx esi edi ecx
    224.           mov     ecx,8
    225.           rep     movsb
    226.  
    227.          stdcall  UpperCase,subKeyName,8
    228.           invoke  SetDlgItemText,[hwnd],ebx,subKeyName
    229.  
    230.           pop     ecx edi esi ebx eax
    231.           add     esi,8
    232.           add     eax,6
    233.           inc     ebx     ;// ID_JD..SK\GB\DT
    234.           loop    @b
    235.  
    236. ;//------ Формируем ключ "BootKey" из имён классов LSA
    237.           mov     esi,lpClass
    238.           mov     edi,buff
    239.           mov     ecx,16
    240.           mov     edx,shiftArray
    241. @@:       movzx   ebx,byte[edx]
    242.           mov     ax,word[esi+ebx]
    243.           stosw
    244.           inc     edx
    245.           loop    @b
    246.          stdcall  UpperCase,buff,32
    247.           invoke  SetDlgItemText,[hwnd],ID_Key,buff
    248.  
    249. ;//------ Строка в НЕХ-число для записи в файл
    250.           invoke  CryptStringToBinary,buff,32,4,\  ;//<-- CRYPT_STRING_HEX
    251.                           hexKey,pcbBinary,0,0
    252.  
    253.           invoke  _lcreat,<'BootKey.bin',0>,0     ;// Запись ключа в файл!
    254.           push    eax
    255.           invoke  _lwrite,eax,hexKey,16
    256.           pop     eax
    257.           invoke  _lclose,eax
    258.  
    259.           invoke  SetDlgItemText,[hwnd],ID_File, <'BootKey.bin',0>
    260.           invoke  SetDlgItemText,[hwnd],ID_Fsize,<'16 byte',0>
    261.  
    262.  
    263. ;//*******************************************
    264. ;//------ Пытаемся открыть куст SAM
    265. ;//*******************************************
    266.           invoke  RegCreateKeyEx,HKEY_LOCAL_MACHINE,\  ;//<------------- 0 = OK!
    267.                              <'SAM\SAM\Domains\Account\Users\Names',0>,0,0,\
    268.                              REG_OPTION_BACKUP_RESTORE, KEY_READ,0,hSamNames,0
    269.           or      eax,eax
    270.           jz      @f
    271.           invoke  MessageBox,0,<'Ошибка!',10,\
    272.                                 'Не удалось получить доступ к разделу SAM.',0>,\
    273.                                <'SAM Hive Info v0.1.',0>,0x10
    274.           jmp     @close
    275. @@:       invoke  SetDlgItemText,[hwnd],ID_Sam,\
    276.                                <'HKLM\SAM\SAM\Domains\Account\Users\',0>
    277.  
    278. ;// Цикл заполнения ListView...
    279. @listViewRow:
    280.           mov     dword[pDataSize],64
    281.           invoke  RegEnumKeyEx,[hSamNames],[index],buff,pDataSize,0,0,0,0
    282.           cmp     eax,259        ;//<------ ERROR_NO_MORE_ITEMS
    283.           jz      @f
    284.  
    285.           mov     eax,[index]
    286.           mov     [lvi.mask],LVIF_TEXT
    287.           mov     [lvi.pszText],buff
    288.           mov     [lvi.iItem],eax
    289.           mov     [lvi.lParam],eax
    290.           mov     [lvi.iSubItem],0
    291.           invoke  SendMessage,[hLV],LVM_INSERTITEM,0,lvi
    292.  
    293.          stdcall  ClearBuff,names,64
    294.           invoke  lstrcat,namesPath,buff
    295.           invoke  RegCreateKeyEx,HKEY_LOCAL_MACHINE,namesPath,0,0,\
    296.                                  REG_OPTION_BACKUP_RESTORE, KEY_READ,0,hSamUsers,0
    297.  
    298.           mov     [pDataSize],8
    299.           mov     [ridBuff],0
    300.           invoke  RegGetValue,[hSamUsers],0,0,\
    301.                               RRF_RT_ANY,pdwType,ridBuff,pDataSize
    302.          cinvoke  wsprintf,buff,<'%08X',0>,[pdwType]
    303.  
    304.           mov     [lvi.mask],LVIF_TEXT
    305.           mov     [lvi.pszText], buff
    306.           mov     [lvi.iSubItem],1
    307.           invoke  SendMessage,[hLV],LVM_SETITEM,0,lvi
    308.  
    309.           inc     [index]
    310.           jmp     @listViewRow
    311.  
    312. @@:       invoke  RegCloseKey,[hSamNames]
    313.           invoke  RegCloseKey,[hSamUsers]
    314.           jmp     @next
    315.  
    316. ;//********************************************************
    317. ;//****** Обработчик "WM_NOTIFY" (клик в строке ListView)
    318. ;//********************************************************
    319. @notify:  mov     esi,[lparam]
    320.           mov     ebx,[esi+NMHDR.code]
    321.           cmp     ebx,NM_CLICK
    322.           jne     @exit
    323.    
    324.           mov     ecx,[esi+NM_ITEMACTIVATE.iItem]
    325.           cmp     ecx,-1
    326.           je      @exit
    327.  
    328.           mov     [lvi.iItem],ecx
    329.           mov     [lvi.iSubItem],1
    330.           mov     [lvi.pszText],buff
    331.           mov     [lvi.cchTextMax],16
    332.           invoke  SendMessage,[hLV],LVM_GETITEMTEXT,ecx,lvi
    333.  
    334.           call    ParseFVkey
    335.           jmp     @next
    336.  
    337. ;//********************************************************
    338. ;//****** Обработчики сообщений "WM_CLOSE/COMMAND" ********
    339. ;//********************************************************
    340. @exit:    cmp     [wparam],BN_CLICKED shl 16 + ID_Save
    341.           jne     @f
    342.           invoke  RegCreateKeyEx,HKEY_LOCAL_MACHINE,<'SAM',0>,0,0,\
    343.                                  REG_OPTION_BACKUP_RESTORE, KEY_READ,0,hSamBackup,0
    344.           invoke  RegSaveKeyEx,[hSamBackup],<'BackupSAM.regf',0>,0,2
    345.           invoke  RegCloseKey, [hSamBackup]
    346.           invoke  MessageBox,0,<'Раздел реестра успешно сохранён в файле "BackupSAM.regf"!',0>,\
    347.                                <'SAM Hive Info v0.1',0>,0x40
    348.           jmp     @next
    349.  
    350. @@:       cmp     [wparam],BN_CLICKED shl 16 + ID_Clear
    351.           jne     @f
    352.           invoke  MessageBox,0,<'Функционал не реализован в данной версии!',0>,\
    353.                                <'SAM Hive Info v0.1',0>,0x40
    354.  
    355. @@:       cmp     [wparam],BN_CLICKED shl 16 + IDCANCEL
    356.           jne     @next
    357. @close:   invoke  EndDialog,[hwnd], 0
    358. @next:    xor     eax,eax
    359. @return:  ret
    360. endp
    361.  
    362. ;//============= ПРОЦЕДУРЫ ================
    363. ;//------ Перевод строки в верхний рестр
    364. align 8
    365. proc  UpperCase   Addr,Size
    366.           mov     edi,[Addr]
    367.           mov     ecx,[Size]
    368. @upper:   cmp     byte[edi],'a'
    369.           jb      @fuck
    370.           cmp     byte[edi],'f'
    371.           ja      @fuck
    372.           and     byte[edi],0xDF
    373. @fuck:    inc     edi
    374.           loop    @upper
    375.           ret
    376. endp
    377. ;//------ Очищает буферы для сл.операций
    378. align 8
    379. proc  ClearBuff   Offset,Size
    380.           mov     edi,[Offset]
    381.           mov     ecx,[Size]
    382.           xor     eax,eax
    383.           rep     stosb
    384.           mov     eax,[Offset]
    385.           dec     eax
    386.           mov     byte[eax],0
    387.           ret
    388. endp
    389. ;//------ Парсит ключи F и V учётных записей
    390. ;// На входе: в "buff" лежит строка RID выбранного юзера
    391. align 8
    392. proc  ParseFVkey
    393.           pusha
    394.          stdcall  ClearBuff,users,64
    395.           invoke  lstrcat,usersPath,buff
    396.           invoke  RegCreateKeyEx,HKEY_LOCAL_MACHINE,usersPath,0,0,\
    397.                                  REG_OPTION_BACKUP_RESTORE,KEY_READ,0,hUserRid,0
    398.           or      eax,eax
    399.           jz      @f
    400.           invoke  MessageBox,0,<'Ошибка!',10,\
    401.                                 'Не удалось открыть \Account\Users\RID*',0>,\
    402.                                <'SAM Hive Info v0.1',0>,0x10
    403.           popa
    404.           ret
    405. ;// Вывод инфы из ключа "F" (fixed)
    406. @@:      stdcall  ClearBuff,f_Buff,80
    407.           mov     [pDataSize],80
    408.           invoke  RegGetValue,[hUserRid],0,<'F',0>,RRF_RT_ANY,pdwType,f_Buff,pDataSize
    409.  
    410.           mov     esi,f_Buff
    411.           mov     eax,[esi+SAM_F.ACB]  ;//<----- состояние учётной записи
    412.           mov     ebx,userOff
    413.           bt      eax,0                ;// 0x01 = отключена
    414.           jc      @f
    415.           mov     ebx,userOn
    416. @@:       invoke  SetDlgItemText,[hDlg],ID_Stat,ebx
    417.  
    418.           mov     esi,f_Buff
    419.           lea     eax,[esi+SAM_F.LastLogon]
    420.           invoke  FileTimeToSystemTime,eax,stm
    421.           movzx   eax,[stm.wDay]
    422.           movzx   ebx,[stm.wMonth]
    423.           movzx   ecx,[stm.wYear]
    424.          cinvoke  wsprintf,buff,<'%02d.%02d.%d',0>,eax,ebx,ecx
    425.           invoke  SetDlgItemText,[hDlg],ID_Time,buff
    426.  
    427.           mov     esi,f_Buff
    428.           lea     eax,[esi+SAM_F.PassLastSet]
    429.           invoke  FileTimeToSystemTime,eax,stm
    430.           movzx   eax,[stm.wDay]
    431.           movzx   ebx,[stm.wMonth]
    432.           movzx   ecx,[stm.wYear]
    433.          cinvoke  wsprintf,buff,<'%02d.%02d.%d',0>,eax,ebx,ecx
    434.           invoke  SetDlgItemText,[hDlg],ID_Pass,buff
    435.  
    436.           mov     esi,f_Buff
    437.           lea     eax,[esi+SAM_F.LastBadPass]
    438.           invoke  FileTimeToSystemTime,eax,stm
    439.           movzx   eax,[stm.wDay]
    440.           movzx   ebx,[stm.wMonth]
    441.           movzx   ecx,[stm.wYear]
    442.          cinvoke  wsprintf,buff,<'%02d.%02d.%d',0>,eax,ebx,ecx
    443.           invoke  SetDlgItemText,[hDlg],ID_Bad,buff
    444.  
    445.           mov     esi,f_Buff
    446.           movzx   eax,[esi+SAM_F.LogonCount]
    447.          cinvoke  wsprintf,buff,<'%d',0>,eax
    448.           invoke  SetDlgItemText,[hDlg],ID_Lcnt,buff
    449.  
    450.           mov     esi,f_Buff
    451.           movzx   eax,[esi+SAM_F.BadPassCount]
    452.          cinvoke  wsprintf,buff,<'%d',0>,eax
    453.           invoke  SetDlgItemText,[hDlg],ID_Bcnt,buff
    454.  
    455. ;// Вывод инфы из ключа "V" (variable)
    456.          stdcall  ClearBuff,buff,2048
    457.           mov     [pDataSize],2048
    458.           invoke  RegGetValue,[hUserRid],0,<'V',0>,RRF_RT_ANY,pdwType,buff,pDataSize
    459.           or      eax,eax
    460.           jz      @f
    461.           invoke  MessageBox,0,<'Ошибка!',10,'Не удалось прочитать ключ(V)',0>,0,0x10
    462.           popa
    463.           ret
    464.  
    465. @@:       invoke  SetDlgItemText,[hDlg],ID_NHash,<'Не найден',0>
    466.           invoke  SetDlgItemText,[hDlg],ID_Sid,<'Учётная запись зарегистрированного пользователя',0>
    467.  
    468.           mov     esi,buff
    469.           push    [esi+SAM_V.Comment.Offset]
    470.           push    [esi+SAM_V.Comment.Size]
    471.  
    472.           mov     ebx,[esi+SAM_V.NTHash.Offset]
    473.           add     ebx,0xCC+4
    474.           add     ebx,buff
    475.           cmp     [osFlag],10
    476.           jnz     @win7
    477.           add     ebx,4
    478.  
    479. @win7:    mov     eax,[esi+SAM_V.NTHash.Size]
    480.           cmp     eax,4
    481.           ja      @ntOk
    482.           jmp     @comment
    483. @ntOk:    mov     eax,[ebx]
    484.           mov     ecx,[ebx+4]
    485.           mov     edx,[ebx+8]
    486.           mov     ebx,[ebx+12]
    487.           bswap   eax
    488.           bswap   ecx
    489.           bswap   edx
    490.           bswap   ebx
    491.          cinvoke  wsprintf, buff,<'%X%X%X%X',0>,eax,ecx,edx,ebx
    492.           invoke  SetDlgItemText,[hDlg],ID_NHash,buff
    493.  
    494. @comment: pop     ecx esi
    495.           add     esi,0xCC
    496.           add     esi,buff
    497.           or      ecx,ecx
    498.           jz      @end
    499.           mov     edi,buff+1024
    500.           shr     ecx,1
    501. @@:       lodsw
    502.           stosw
    503.           loop    @b
    504.           mov     dword[edi],0
    505.           invoke  SetDlgItemTextW,[hDlg],ID_Sid,buff+1024
    506.  
    507. @end:     invoke  RegCloseKey,[hUserRid]
    508.           popa
    509.           ret
    510. endp
    511.  
    512. ;//------------------
    513. section '.idata' import data readable writeable
    514. library  kernel32,'kernel32.dll',shell32,'shell32.dll',user32,'user32.dll',\
    515.          advapi32,'advapi32.dll',crypt32,'crypt32.dll',comctl32,'comctl32.dll',gdi32,'gdi32.dll'
    516. include  'api\user32.inc'
    517. include  'api\crypt32.inc'
    518. include  'api\shell32.inc'
    519. include  'api\kernel32.inc'
    520. include  'api\advapi32.inc'
    521. include  'api\comctl32.inc'
    522. include  'api\gdi32.inc'
    523.  
    524. ;//------------------
    525. section '.rsrc' data resource readable
    526. directory  RT_DIALOG, dialogs,\
    527.            RT_GROUP_ICON, Icons,\
    528.            RT_ICON, my_icon
    529.  
    530. resource dialogs, 100, LANG_ENGLISH + SUBLANG_DEFAULT, mainform
    531. resource Icons,   101, LANG_NEUTRAL, myicons
    532. resource my_icon, 102, LANG_NEUTRAL, myicon
    533.  
    534. dialog mainform,'',0,0,400,240, DS_3DLOOK+WS_CAPTION+WS_SYSMENU+DS_CENTER,,,'Verdana',8
    535.   dialogitem 'Button',' Коды классов в ветке LSA ',\
    536.                                      -1,010,010,125,079, WS_VISIBLE+BS_GROUPBOX+BS_CENTER
    537.   dialogitem 'Static',' Ключ JD',    -1,015,028,060,010, WS_VISIBLE+WS_GROUP
    538.   dialogitem 'Static',' Ключ Skew1', -1,015,042,060,010, WS_VISIBLE+WS_GROUP
    539.   dialogitem 'Static',' Ключ GBG',   -1,015,056,060,010, WS_VISIBLE+WS_GROUP
    540.   dialogitem 'Static',' Ключ Data',  -1,015,070,060,010, WS_VISIBLE+WS_GROUP
    541.   dialogitem 'Static','',ID_JD, 068,028,060,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    542.   dialogitem 'Static','',ID_SK, 068,042,060,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    543.   dialogitem 'Static','',ID_GB, 068,056,060,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    544.   dialogitem 'Static','',ID_DT, 068,070,060,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    545.  
    546.   dialogitem 'Button',' Раздел реестра SAM - общая информация ',\
    547.                                         -1,150,010,240,079, WS_VISIBLE+BS_GROUPBOX+BS_CENTER
    548.   dialogitem 'Static',' BootKey',       -1,155,028,060,010, WS_VISIBLE+WS_GROUP
    549.   dialogitem 'Static',' Сохранён в',    -1,155,042,060,010, WS_VISIBLE+WS_GROUP
    550.   dialogitem 'Static',' Доступна ветка',-1,155,056,060,010, WS_VISIBLE+WS_GROUP
    551.   dialogitem 'Static',' Версия ОС',     -1,155,070,060,010, WS_VISIBLE+WS_GROUP
    552.   dialogitem 'Static','',ID_Key,   215,028,167,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    553.   dialogitem 'Static','',ID_File,  215,042,118,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    554.   dialogitem 'Static','',ID_Fsize, 340,042,041,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    555.   dialogitem 'Static','',ID_Sam,   215,056,167,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    556.   dialogitem 'Static','',ID_Win,   215,070,167,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    557.  
    558.   dialogitem 'Button',' Свойства учётной записи ',\
    559.                                        -1,150,098,240,110, WS_VISIBLE+BS_GROUPBOX+BS_CENTER
    560.   dialogitem 'Static',' Состояние',    -1,155,116,060,010, WS_VISIBLE+WS_GROUP
    561.   dialogitem 'Static',' Дата входа',   -1,283,116,060,010, WS_VISIBLE+WS_GROUP
    562.   dialogitem 'Static',' Правка пароля',-1,155,131,060,010, WS_VISIBLE+WS_GROUP
    563.   dialogitem 'Static',' Неверный пасс',-1,270,131,060,010, WS_VISIBLE+WS_GROUP
    564.   dialogitem 'Static',' Всего входов в систему', -1,155,145,100,010, WS_VISIBLE+WS_GROUP
    565.   dialogitem 'Static',' Всего ошибок входа',     -1,270,145,100,010, WS_VISIBLE+WS_GROUP
    566.   dialogitem 'Static',' Raw NTLM Hash',-1,155,160,060,010, WS_VISIBLE+WS_GROUP
    567.   dialogitem 'Static',' Комментарий:', -1,155,174,060,010, WS_VISIBLE+WS_GROUP
    568.  
    569.   dialogitem 'Static','',ID_Stat, 215,116,050,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    570.   dialogitem 'Static','',ID_Time, 328,116,053,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    571.   dialogitem 'Static','',ID_Pass, 215,131,050,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    572.   dialogitem 'Static','',ID_Bad,  328,131,053,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    573.   dialogitem 'Static','',ID_Lcnt, 242,145,022,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    574.   dialogitem 'Static','',ID_Bcnt, 348,145,033,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    575.   dialogitem 'Static','',ID_NHash,215,160,166,010, WS_VISIBLE+SS_CENTER+SS_SUNKEN
    576.   dialogitem 'Static','',ID_Sid,  215,174,166,025, WS_VISIBLE+SS_CENTER+SS_EDITCONTROL
    577.  
    578.   dialogitem LISTVIEW_CLASS,'',ID_LV,  010,100,125,108, WS_VISIBLE+WS_BORDER +LVS_REPORT
    579.   dialogitem 'BUTTON','Выход',IDCANCEL,275,218,115,013, WS_VISIBLE+BS_DEFPUSHBUTTON
    580.   dialogitem 'BUTTON','Бэкап куста HKLM\SAM',\
    581.                               ID_Save, 150,218,120,013, WS_VISIBLE+BS_PUSHBUTTON
    582.   dialogitem 'BUTTON','Сбросить пароль',\
    583.                               ID_Clear,010,218,125,013, WS_VISIBLE+BS_PUSHBUTTON
    584. enddialog
    585.  
    586. icon myicons, myicon,'icon34.ico'

    w7.png
     

    Вложения:

    Research нравится это.
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    275
    Marylin, извиняюсь что скажу не в тему,я смотрю на GUI интерфейс твоих прог,ты пользуешься каким нибудь GUI билдером что-ли ? просто в GUI билдере можно всякие кнопочки и т.д расставить по координатам,потом вручную эти координаты вбить в код на ASM
     
  4. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    333
    Хотя для этих целей есть WinAsmStudio, я все ресурсы описываю вручную,
    т.е. создал один например статик, и дальше просто копирую его меняя лишь координату Х или Y.

    WinAsm.png