Сейчас на форуме: _MBK_, asfa (+5 невидимых)

 eXeL@B —› Вопросы новичков —› API перехват и подмена GetVersionExA
Посл.ответ Сообщение

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2009 07:02
· Личное сообщение · #1

Добрый день. Я на самом деле новичёк в отладке приложений, но всё-таки, каждый когда то был новичком

У меня возник вопрос: есть некое приложение, которое вызывает апи-функцию GetVersionExA для получения версии ОС. Насколько я понимаю, она возвращает указатель на Структуру содержащую сведения об ОС-и.
Также, как я понимаю для перехвата GetVersionExA надо в Оле установик бряк bp GetVersionExA

Но, вот не могу никак сообразить, как попасть на кусок кода с самой структурой, чтобы её изменить?

Заранее спасибо



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2009 07:43
· Личное сообщение · #2

точнее она возвращает: успешно или нет. А структуру пишет по входному параметру
думаю, я ясно выразился

п.с. Как в дельфе хуком перехватить и подменить я знаю, а как в оле отследить сабж незнаю




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 27 марта 2009 10:52 · Поправил: Coderess
· Личное сообщение · #3

Code:
  1. int main(int argc, char* argv[])
  2. {
  3. __asm int 3
  4.          
  5.          OSVERSIONINFO osvi;
  6.     BOOL bIsWindowsXPorLater;
  7.     ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
  8.     osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  9.     GetVersionEx(&osvi);
  10.     bIsWindowsXPorLater = 
  11.        ( (osvi.dwMajorVersion > 5) ||
  12.        ( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) ));
  13.     if(bIsWindowsXPorLater)
  14.         printf("The system meets the requirements.\n");
  15.     else printf("The system does not meet the requirements.\n");
  16. }
  17. 0040B535  cmp     dword ptr ss:[ebp-90], 5
  18. 0040B53C  ja      short dddddddd.0040B55C
  19. 0040B53E  cmp     dword ptr ss:[ebp-90], 5
  20. 0040B545  jnz     short dddddddd.0040B550
  21. 0040B547  cmp     dword ptr ss:[ebp-8C], 1
  22. 0040B54E  jnb     short dddddddd.0040B55C
  23. 0040B550  mov     dword ptr ss:[ebp-9C], 0
  24. 0040B55A  jmp     short dddddddd.0040B566
  25. 0040B55C  mov     dword ptr ss:[ebp-9C], 1
  26. 0040B566  mov     edx, dword ptr ss:[ebp-9C]
  27. 0040B56C  mov     dword ptr ss:[ebp-98], edx
  28. 0040B572  cmp     dword ptr ss:[ebp-98], 0
  29. 0040B579  je      short dddddddd.0040B58A
  30. 0040B57B  push    dddddddd.0041FF68                ;"The system meets the requirements.
  31. 0040B580  call    dddddddd.printf                  ; \printf
  32. 0040B585  add     esp, 4
  33. 0040B588  jmp     short dddddddd.0040B597
  34. 0040B58A  push    dddddddd.0041FF3C                ; "The system does not meet the requirements.
  35. 0040B58F  call    dddddddd.printf                  ; \printf


ss:[ebp-94] = это заполненая структура типа OSVERSIONINFO

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2009 12:10
· Личное сообщение · #4

Code:
  1. 0045C2CE   . E8 05A6FAFF    CALL <JMP.&kernel32.GetVersionExA>       ; \GetVersionExA
  2. 0045C2D3   . 83F8 01        CMP EAX,1
  3. 0045C2D6   . 1BDB           SBB EBX,EBX
  4. 0045C2D8   . 43             INC EBX
  5. 0045C2D9   . 33C0           XOR EAX,EAX
  6. 0045C2DB   . 5A             POP EDX
  7. 0045C2DC   . 59             POP ECX
  8. 0045C2DD   . 59             POP ECX
  9. 0045C2DE   . 64:8910        MOV DWORD PTR FS:[EAX],EDX
  10. 0045C2E1   . EB 26          JMP SHORT Project1.0045C309
  11. 0045C2E3   .^E9 1C7CFAFF    JMP Project1.00403F04
  12. 0045C2E8   . C785 5CFFFFFF >MOV DWORD PTR SS:[EBP-A4],94
  13. 0045C2F2   . 8D85 5CFFFFFF  LEA EAX,DWORD PTR SS:[EBP-A4]
  14. 0045C2F8   . 50             PUSH EAX                                 ; /pVersionInformation
  15. 0045C2F9   . E8 DAA5FAFF    CALL <JMP.&kernel32.GetVersionExA>       ; \GetVersionExA
  16. 0045C2FE   . 83F8 01        CMP EAX,1
  17. 0045C301   . 1BDB           SBB EBX,EBX
  18. 0045C303   . 43             INC EBX
  19. 0045C304   . E8 0B80FAFF    CALL Project1.00404314
  20. 0045C309   > 84DB           TEST BL,BL
  21. 0045C30B   . 75 0A          JNZ SHORT Project1.0045C317
  22. 0045C30D   . 807D F7 00     CMP BYTE PTR SS:[EBP-9],0
  23. 0045C311   . 0F84 13030000  JE Project1.0045C62A
  24. 0045C317   > 8D95 C0FEFFFF  LEA EDX,DWORD PTR SS:[EBP-140]
  25. 0045C31D   . 8D85 5CFFFFFF  LEA EAX,DWORD PTR SS:[EBP-A4]
  26. 0045C323   . B9 94000000    MOV ECX,94
  27. 0045C328   . E8 136DFAFF    CALL Project1.00403040
  28. 0045C32D   . 8B85 D0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-130]
  29. 0045C333   . 83E8 01        SUB EAX,1                                ; Switch (cases 0..2)

вот тут у меня вызов GetVersionEx перед case-ом. не могу понять как в памяти найти эту самую структуру



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2009 12:20 · Поправил: OzZz
· Личное сообщение · #5

0012F3D0 для моего случая?
полученный петём перехода в мемори адрес в дампе из строчки
Code:
  1. 0045C32D   . 8B85 D0FEFFFF  MOV EAX,DWORD PTR SS:[EBP-130]

так получается?

заранее спс



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2009 12:38
· Личное сообщение · #6

и заодно, чтобы не плодить темы, как можно case с n-вариантами
заменить на 1 безусловный переход?




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 27 марта 2009 16:02
· Личное сообщение · #7

Вот-же,

LEA EAX,DWORD PTR SS:[EBP-A4] ; В Eax - указатель на структуру
PUSH EAX ; Кладем в стек указатель
CALL GetVersionExA ; вызываем API

и заодно, чтобы не плодить темы, как можно case с n-вариантами
заменить на 1 безусловный переход?


пример можно?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2009 17:15
· Личное сообщение · #8

2 Coderess: спс
с кэйзом разобрался сам =)


 eXeL@B —› Вопросы новичков —› API перехват и подмена GetVersionExA
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати