KiSharedUserData Универсально

Тема в разделе "WASM.WIN32", создана пользователем x0rum, 23 янв 2023.

  1. x0rum

    x0rum New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2021
    Сообщения:
    20
    Приветствую. С прошедшими праздничками!!) Не подскажет ли кто наиболее универсальный
    (т.е. чтобы работал на самых старых ОС, в идеале XP) и наиболее стабильный/простой способ
    получить адрес KiSharedUserData ?

    Пока придумал варианты. Возможно финальное решение будет их комбинацией.
    Вариант 1. Захардкодить адреса для каждой ОС, далее switch (GetVersionW ...)
    Вариант 2 (далее) - Взять адрес KiSharedUserData из кода API-шки kernelbase!GetSystemTimeAsFileTime, он вначале:

    на Win7 эта апишка выглядит так:

    Код (Text):
    1.  
    2. .text:000007FF38881740 ; void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
    3. .text:000007FF38881740  public GetSystemTimeAsFileTime
    4. .text:000007FF38881740 GetSystemTimeAsFileTime proc near  ; DATA XREF: .rdata:off_7FF388CAD00↓o
    5. .text:000007FF38881740
    6. .text:000007FF38881740 arg_0  = qword ptr  8
    7. .text:000007FF38881740
    8. .text:000007FF38881740 ; FUNCTION CHUNK AT .text:000007FF388A5513 SIZE 0000002A BYTES
    9. .text:000007FF38881740
    10. .text:000007FF38881740  mov  edx, ds:7FFE0018h   <<<<<<< чот из этого короче!!!!!!!!!!!!!
    11. .text:000007FF38881747  mov  r8d, ds:7FFE0014h
    12. .text:000007FF3888174F  mov  eax, ds:7FFE001Ch
    13. .text:000007FF38881756  mov  dword ptr [rsp+arg_0+4], edx
    14. .text:000007FF3888175A  mov  dword ptr [rsp+arg_0], r8d
    15. .text:000007FF3888175F  cmp  edx, eax
    16. .text:000007FF38881761  jnz  loc_7FF388A5513
    17. .text:000007FF38881767
    18. .text:000007FF38881767 loc_7FF38881767:  ; CODE XREF: GetSystemTimeAsFileTime+23DF8↓j
    19. .text:000007FF38881767  mov  rax, [rsp+arg_0]
    20. .text:000007FF3888176C  mov  [rcx], r8d
    21. .text:000007FF3888176F  shr  rax, 20h
    22. .text:000007FF38881773  mov  [rcx+4], eax
    23. .text:000007FF38881776  retn
    24. .text:000007FF38881776 GetSystemTimeAsFileTime endp
    25. .text:000007FF38881776
    26.  
    А на win10:

    Код (Text):
    1.  
    2. .text:000000018005F070 ; void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
    3. .text:000000018005F070  public GetSystemTimeAsFileTime
    4. .text:000000018005F070 GetSystemTimeAsFileTime proc near  ; CODE XREF: _time64+E↓p
    5. .text:000000018005F070  ; DATA XREF: .rdata:00000001801C811F↓o ...
    6. .text:000000018005F070  mov  eax, 7FFE0014h <<<<<<<<<<<<<от он наш родной!!!!!!!!!!!!!!!!
    7. .text:000000018005F075  mov  rax, [rax]
    8. .text:000000018005F078  mov  [rcx], eax
    9. .text:000000018005F07A  shr  rax, 20h
    10. .text:000000018005F07E  mov  [rcx+4], eax
    11. .text:000000018005F081  retn
    12. .text:000000018005F081 GetSystemTimeAsFileTime endp
    13.  
    Вобщем, мои пирожки, если делать через парсинг kernelbase, то придется очень много тестить
    разных kernelbase-ов (с разных ОС)

    Нужно немножко вашей магии lowlevel c0ding