Сплайсинг

Тема в разделе "WASM.WIN32", создана пользователем punxer, 31 май 2010.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Будет вам код, когда скажите что за первый параметр в strOut().
     
  2. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk Контекст устройства
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Контекст видимо второй параметр, вероятно его калбэк и возвращает. Загляните в свой код.
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    ; int __cdecl strOut(HDC, LPCSTR, LPCSTR)
     
  5. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    что за колбэк
     
  6. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    punxer

    0. Протрассируйте (своим обработчегом в SEH) первые 5 команд пролога процедуры начало которой вы хотите заменить на jmp. Таким образом вы выясните сколько и какие инструкции нужно будет выполнить перед возвратом в перехваченный код;

    1. Возьмите дизассемблер длин и сделайте то же самое;

    2. Небольшой байт-скан: прологи функций мало отличаются разнообразием: обычно это однобайтовые push reg32 (50h-57h), команды загрузки регистров из переданных параметров (mov reg32,[esp+XX] / mov reg32,[ebp+XX]), стандартное начало оформления локального фрейма push ebp/mov ebp, esp и некоторые немногие другие;

    3. После выполнения джампа на свой код [атомарно?] восстановите испорченные байты а также поменяйте в стеке адрес возврата на свою вторую процедуру, адрес запомните и после отработки функи прыгнете на него;

    4. Поиск первого call (e8 ?? ?? ?? ??) с фильтрацией на условные переходы используя техники выше для вычисления длин инструкций.

    5. И другие, числом бесконечные, методы...
     
  7. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    PSR1257

    Это все к теме топика. Понятно. Чем плох сплайсинг вообще? Чем лучше другие?
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    к сплайсингу можно тоже прикрутить дизассемблер длин...
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Калбэк это то, что вызывает код:
    Код (Text):
    1. .text:00552E54                 call    edx
    Вы должны его заменить в стуктуре, на которую передаются ссылки в вашу процедуру.
     
  10. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    punxer

    Я не силен в терминах - че у нас там такое "сплайсенг"? Трассировка/эмуляция перехватываемой функии до некоторого момента с целью внесения перехватывающей инструкции НЕ в самое начало?

    Что значит - плох или неплох? Какие цели? Если нет цели избежать детекта перехвата то простой джамп или колл в самое начало должен работать.
     
  11. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk
    PSR1257
    Ясно. Спасибо.

    Clerk
    это совсем непонятно хотя суть то метода ясна.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Пока особо делать нечего опишу кратко как перехватывать этот кодес. Первый параметр в strOut() это ссылка на переменную(тоесть адрес переменной, которая также может быть структурой), содержащую ссылку на какуюто структуру, условно назовём ENVIRONMENT:
    Код (Text):
    1. typedef struct _ENVIRONMENT {
    2.     ... ; Не известные поля.
    3.     PREFERENCE_NOTIFICATION_FUNCTION PreNotify; // +0x44, Reference routine ?
    4.     ...
    5.     PDEREFERENCE_NOTIFICATION_FUNCTION PostNotify; // +0x68, Dereference routine ?
    6.     ...
    7. } ENVIRONMENT, *PENVIRONMENT;
    8.  
    9. typedef VOID (*PREFERENCE_NOTIFICATION_ROUTINE)(
    10.    IN PENVIRONMENT Environment,
    11.    OUT PHANDLE hDC
    12.    );
    13.  
    14. typedef VOID (*PDEREFERENCE_NOTIFICATION_ROUTINE)(
    15.     IN PENVIRONMENT Environment,
    16.     IN HANDLE hDC
    17.     );
    Нужно заменить калбэк(для этого нужно знать где хранится ссылка на структуру или на переменную, содержащую ссылку на структуру ENVIRONMENT) например так:
    Код (Text):
    1. .data
    2. OldRoutine  PVOID ?
    3.  
    4. .code
    5. ReferenceRoutine proc uses ebx pEnv:PENVIRONMENT, hDC:PHANDLE
    6.     push hDC
    7.     push pEnv
    8.     Call OldRoutine
    9.     mov ebx,eax
    10.     ...
    11.     mov eax,ebx
    12.     ret
    13. ;   или вначале обрабатываем перехват и возвращаемся:
    14. ;   pop ebx
    15. ;   leave
    16. ;   jmp OldRoutine
    17. ReferenceRoutine endp
    18.  
    19. ; Устанавливаем перехват:
    20.  
    21. ; pEnv:PENVIRONMENT
    22.     mov eax,pEnv
    23.     lea ecx,ReferenceRoutine
    24.     lock xchg dword ptr [eax + 44H],ecx ; ENVIRONMENT.PreNotify
    25.     mov OldRoutine,ecx
    Используя технику IDP, делается не валидной ссылка на структуру в переменной:
    Код (Text):
    1. ; INIT
    2.     %CALLIDP IDP_INITIALIZE_ENGINE
    3.     %NTERR
    4. ; ADDVEH
    5.     %GET_GRAPH_ENTRY $VEH
    6.     push eax
    7.     push 0
    8.     %CALLIDP IDP_ADD_VEH
    9.     .if !Eax
    10.     mov eax,STATUS_INTERNAL_ERROR
    11.     %BREAK
    12.     .endif
    13. ; BADREF
    14.     push sizeof(ENVIRONMENT)
    15.     push Reference      ; адрес переменной, содержащей ссылку на ENVIRONMENT.
    16.     %CALLIDP IDP_ADD_REFERENCE
    17.     %NTERR
    Шаблон VEH:
    Код (Text):
    1.     $GET_GRAPH_REFERENCE
    2. $VEH:
    3.     %GET_CURRENT_GRAPH_ENTRY
    4. VEH proc uses ebx esi edi ExceptionPointers:PEXCEPTION_POINTERS
    5.     mov eax,ExceptionPointers
    6.     mov esi,EXCEPTION_POINTERS.ExceptionRecord[eax]
    7.     assume esi:PEXCEPTION_RECORD
    8.     mov edi,EXCEPTION_POINTERS.ContextRecord[eax]
    9.     assume edi:PCONTEXT
    10.     cmp [esi].ExceptionFlags,NULL
    11.     jnz Chain
    12.     cmp [esi].ExceptionCode,IDP_BREAKPOINT
    13.     je Load
    14.     cmp [esi].ExceptionCode,IDP_SINGLE_STEP
    15.     jne IsTrap
    16.     [...]
    17.     jmp Load
    18. IsTrap:
    19.     cmp [esi].ExceptionCode,STATUS_SINGLE_STEP
    20.     jne Chain
    21.     [...]
    22. Load:
    23.     mov eax,EXCEPTION_CONTINUE_EXECUTION
    24. Exit:
    25.     ret
    26. Chain:
    27.     xor eax,eax
    28.     jmp Exit
    29. VEH endp
    Собственно двиг:
    Код (Text):
    1. ; o IDP Engine v3.1
    2. ; o MI, UM.
    3.  
    4. IDP_INITIALIZE_ENGINE   equ 0
    5. ; typedef NTSTATUS (*PENTRY)(
    6. ;   );
    7.  
    8. IDP_ADD_REFERENCE       equ 1
    9. ; typedef NTSTATUS (*PENTRY)(
    10. ;    IN OUT PVOID *Reference
    11. ;   IN ULONG SpaceSize
    12. ;    );
    13.  
    14. ; typedef LONG (*PVECTORED_EXCEPTION_HANDLER)(
    15. ;    IN OUT PEXCEPTION_POINTERS *ExceptionInformation
    16. ;    );
    17.  
    18. IDP_ADD_VEH         equ 2
    19. ; typedef PVOID (*PENTRY)(
    20. ;    IN ULONG First,
    21. ;    IN PVECTORED_EXCEPTION_HANDLER Handler
    22. ;    );
    23.  
    24. IDP_REMOVE_VEH          equ 3
    25. ; typedef ULONG (*PENTRY)(
    26. ;   IN PVOID Handle
    27. ;   );
    28.  
    29. IDP_QUERY_ENTRY     equ 4
    30. ;typedef NTSTATUS (*PENTRY)(
    31. ;   IN PVOID ImageBase OPTIONAL,
    32. ;   IN PVOID HashOrFunctionName,
    33. ;   IN PCOMPUTE_HASH_ROUTINE HashRoutine OPTIONAL,
    34. ;   IN ULONG PartialCrc,
    35. ;   OUT *PVOID Entry
    36. ;   );
    37.  
    38. ;typedef ULONG (*PCOMPUTE_HASH_ROUTINE)(
    39. ;   IN ULONG UserParameter,
    40. ;   IN PVOID Buffer,
    41. ;   IN ULONG Length
    42. ;   );
    43.  
    44. IDP_QUERY_ENTRIES       equ 5
    45. ; typedef NTSTATUS (*PENTRY)(
    46. ;   IN PVOID ImageBase OPTIONAL,
    47. ;   IN ULONG PartialCrc,
    48. ;   IN PULONG Crc32List,
    49. ;   OUT *PVOID EntriesList
    50. ;   );
    51.  
    52. SEGMENT_ENTRY struct
    53. SegmentBase PVOID ?
    54. SegmentLimit    PVOID ?
    55. SegmentAddress  PVOID ?
    56. Reference       PVOID ?
    57. SEGMENT_ENTRY ends
    58. PSEGMENT_ENTRY typedef ptr SEGMENT_ENTRY
    59.  
    60. IDP_SEGMENT_ENTRY_OFFSET    equ (PAGE_SIZE - 4)
    61.  
    62. THREAD_STATE struct
    63. rEFlags DWORD ?
    64. Entry   PSEGMENT_ENTRY ?
    65. THREAD_STATE ends
    66. PTHREAD_STATE typedef ptr THREAD_STATE
    67.  
    68. IDP_THREAD_STATE_OFFSET equ (X86_PAGE_SIZE - 2*4)
    69.  
    70. IDP_BREAKPOINT      equ 80FE0001H
    71. IDP_SINGLE_STEP equ 80FE0002H
    72.  
    73. %CALLIDP macro Service
    74.     mov eax,Service
    75.     Call IDP
    76. endm
    77.  
    78. %GET_CURRENT_GRAPH_ENTRY macro
    79.     Call GetGraphReference
    80. endm
    81.  
    82. %GET_GRAPH_ENTRY macro PGET_CURRENT_GRAPH_ENTRY
    83.     Call PGET_CURRENT_GRAPH_ENTRY
    84. endm
    85.  
    86. $GET_GRAPH_REFERENCE macro
    87. GetGraphReference::
    88.     pop eax
    89.     ret
    90. endm
    91.  
    92. IDP::
    93. ; ~~~~~~~~~~~~~~~~~~ Autogenerated dump ~~~~~~~~~~~~~~~~~~~~~
    94. DB 085H, 0C0H, 00FH, 084H, 016H, 006H, 000H, 000H, 048H, 00FH
    95. DB 084H, 0BEH, 002H, 000H, 000H, 048H, 00FH, 084H, 03EH, 002H
    96. DB 000H, 000H, 048H, 00FH, 084H, 055H, 002H, 000H, 000H, 048H
    97. DB 00FH, 084H, 0ABH, 000H, 000H, 000H, 048H, 00FH, 084H, 0AAH
    98. DB 001H, 000H, 000H, 0B8H, 00DH, 000H, 000H, 0C0H, 0C3H, 059H
    99. DB 055H, 050H, 0E8H, 01FH, 000H, 000H, 000H, 050H, 064H, 0FFH
    100. DB 035H, 000H, 000H, 000H, 000H, 064H, 089H, 025H, 000H, 000H
    101. DB 000H, 000H, 0FFH, 0E1H, 059H, 064H, 08FH, 005H, 000H, 000H
    102. DB 000H, 000H, 08DH, 064H, 024H, 00CH, 0FFH, 0E1H, 0E8H, 012H
    103. DB 000H, 000H, 000H, 08BH, 044H, 024H, 004H, 08BH, 064H, 024H
    104. DB 008H, 08BH, 000H, 08BH, 06CH, 024H, 00CH, 0FFH, 064H, 024H
    105. DB 008H, 058H, 0C3H, 055H, 08BH, 0ECH, 08BH, 055H, 008H, 0B8H
    106. DB 07BH, 000H, 000H, 0C0H, 066H, 081H, 03AH, 04DH, 05AH, 075H
    107. DB 02AH, 003H, 052H, 03CH, 081H, 03AH, 050H, 045H, 000H, 000H
    108. DB 075H, 01FH, 066H, 081H, 07AH, 014H, 0E0H, 000H, 075H, 017H
    109. DB 066H, 081H, 07AH, 004H, 04CH, 001H, 075H, 00FH, 066H, 0F7H
    110. DB 042H, 016H, 000H, 001H, 074H, 007H, 08BH, 04DH, 00CH, 033H
    111. DB 0C0H, 089H, 011H, 0C9H, 0C2H, 008H, 000H, 055H, 08BH, 0ECH
    112. DB 053H, 08BH, 04DH, 008H, 08BH, 055H, 00CH, 033H, 0DBH, 08AH
    113. DB 004H, 00BH, 038H, 004H, 013H, 075H, 005H, 043H, 084H, 0C0H
    114. DB 075H, 0F3H, 05BH, 0C9H, 0C2H, 008H, 000H, 055H, 08BH, 0ECH
    115. DB 083H, 0C4H, 0F4H, 053H, 056H, 057H, 0E8H, 0D9H, 000H, 000H
    116. DB 000H, 0E8H, 04FH, 0FFH, 0FFH, 0FFH, 064H, 0A1H, 030H, 000H
    117. DB 000H, 000H, 08BH, 05DH, 008H, 08BH, 040H, 00CH, 085H, 0DBH
    118. DB 08BH, 040H, 00CH, 075H, 005H, 08BH, 000H, 08BH, 058H, 018H
    119. DB 08DH, 045H, 0F8H, 050H, 053H, 0E8H, 06DH, 0FFH, 0FFH, 0FFH
    120. DB 085H, 0C0H, 08BH, 055H, 0F8H, 00FH, 085H, 0B8H, 000H, 000H
    121. DB 000H, 08BH, 042H, 078H, 085H, 0C0H, 00FH, 084H, 0ADH, 000H
    122. DB 000H, 000H, 003H, 0C3H, 089H, 045H, 0FCH, 08BH, 070H, 020H
    123. DB 085H, 0F6H, 00FH, 084H, 0A4H, 000H, 000H, 000H, 08BH, 040H
    124. DB 018H, 085H, 0C0H, 00FH, 084H, 099H, 000H, 000H, 000H, 089H
    125. DB 045H, 0F4H, 003H, 0F3H, 033H, 0FFH, 0FCH, 08BH, 006H, 003H
    126. DB 0C3H, 083H, 07DH, 010H, 000H, 074H, 024H, 057H, 08BH, 0F8H
    127. DB 0B9H, 004H, 001H, 000H, 000H, 08BH, 0D7H, 033H, 0C0H, 0F2H
    128. DB 0AEH, 0F7H, 0D1H, 05FH, 081H, 0C1H, 004H, 001H, 000H, 000H
    129. DB 051H, 052H, 0FFH, 075H, 014H, 0FFH, 055H, 010H, 039H, 045H
    130. DB 00CH, 0EBH, 009H, 050H, 0FFH, 075H, 00CH, 0E8H, 03DH, 0FFH
    131. DB 0FFH, 0FFH, 075H, 030H, 08BH, 04DH, 0FCH, 08BH, 041H, 024H
    132. DB 003H, 0C3H, 00FH, 0B7H, 03CH, 078H, 00BH, 0FFH, 074H, 009H
    133. DB 03BH, 079H, 010H, 072H, 003H, 02BH, 079H, 010H, 047H, 08BH
    134. DB 071H, 01CH, 003H, 0F3H, 08BH, 00CH, 0BEH, 085H, 0C9H, 08BH
    135. DB 055H, 018H, 074H, 029H, 003H, 0CBH, 033H, 0C0H, 089H, 00AH
    136. DB 0EBH, 015H, 083H, 0C6H, 004H, 047H, 0FFH, 04DH, 0F4H, 075H
    137. DB 08EH, 0B8H, 07AH, 000H, 000H, 0C0H, 0EBH, 005H, 0E8H, 0B4H
    138. DB 0FEH, 0FFH, 0FFH, 0E8H, 08AH, 0FEH, 0FFH, 0FFH, 05FH, 05EH
    139. DB 05BH, 0C9H, 0C2H, 014H, 000H, 0B8H, 07BH, 000H, 000H, 0C0H
    140. DB 0EBH, 0EDH, 0B8H, 0FFH, 000H, 000H, 0C0H, 0EBH, 0E6H, 055H
    141. DB 08BH, 0ECH, 083H, 0C4H, 0ECH, 056H, 057H, 0E8H, 062H, 000H
    142. DB 000H, 000H, 0E8H, 04AH, 0FEH, 0FFH, 0FFH, 08DH, 04DH, 0FCH
    143. DB 033H, 0C0H, 051H, 08DH, 055H, 0ECH, 050H, 050H, 052H, 050H
    144. DB 02DH, 0AEH, 08BH, 093H, 0BCH, 089H, 045H, 0ECH, 005H, 01DH
    145. DB 0F9H, 003H, 032H, 089H, 045H, 0F0H, 035H, 01BH, 008H, 033H
    146. DB 007H, 089H, 045H, 0F4H, 035H, 017H, 056H, 071H, 072H, 089H
    147. DB 045H, 0F8H, 0E8H, 0B6H, 0FEH, 0FFH, 0FFH, 085H, 0C0H, 08BH
    148. DB 075H, 010H, 075H, 029H, 08BH, 07DH, 014H, 0ADH, 057H, 0FFH
    149. DB 075H, 00CH, 0FFH, 075H, 0FCH, 050H, 0FFH, 075H, 008H, 0E8H
    150. DB 09BH, 0FEH, 0FFH, 0FFH, 085H, 0C0H, 075H, 011H, 0ADH, 083H
    151. DB 0C7H, 004H, 085H, 0C0H, 075H, 0E4H, 033H, 0C0H, 0EBH, 005H
    152. DB 0E8H, 026H, 0FEH, 0FFH, 0FFH, 0E8H, 0FCH, 0FDH, 0FFH, 0FFH
    153. DB 05FH, 05EH, 0C9H, 0C2H, 010H, 000H, 033H, 0C0H, 064H, 08BH
    154. DB 00DH, 030H, 000H, 000H, 000H, 0F0H, 00FH, 0B1H, 081H, 0FCH
    155. DB 00FH, 000H, 000H, 075H, 008H, 0B8H, 001H, 000H, 000H, 0C0H
    156. DB 0C2H, 008H, 000H, 0FFH, 060H, 028H, 033H, 0C0H, 064H, 08BH
    157. DB 00DH, 030H, 000H, 000H, 000H, 0F0H, 00FH, 0B1H, 081H, 0FCH
    158. DB 00FH, 000H, 000H, 075H, 008H, 0B8H, 001H, 000H, 000H, 0C0H
    159. DB 0C2H, 008H, 000H, 0FFH, 060H, 02CH, 055H, 08BH, 0ECH, 08BH
    160. DB 045H, 008H, 08BH, 055H, 00CH, 08BH, 0C8H, 081H, 0E2H, 000H
    161. DB 000H, 00FH, 000H, 0C1H, 0E8H, 010H, 081H, 0E1H, 000H, 000H
    162. DB 000H, 0FFH, 025H, 0FFH, 000H, 000H, 000H, 08DH, 094H, 002H
    163. DB 000H, 0F2H, 0C0H, 000H, 00BH, 0D1H, 08BH, 045H, 00CH, 08BH
    164. DB 04DH, 008H, 025H, 0FFH, 0FFH, 000H, 000H, 0C1H, 0E1H, 010H
    165. DB 08DH, 00CH, 008H, 0C9H, 0C2H, 008H, 000H, 055H, 08BH, 0ECH
    166. DB 083H, 0C4H, 0F4H, 053H, 056H, 057H, 033H, 0C0H, 064H, 08BH
    167. DB 01DH, 030H, 000H, 000H, 000H, 0F0H, 00FH, 0B1H, 083H, 0FCH
    168. DB 00FH, 000H, 000H, 08BH, 0D8H, 075H, 00AH, 0B8H, 001H, 000H
    169. DB 000H, 0C0H, 0E9H, 0D0H, 000H, 000H, 000H, 08DH, 04BH, 034H
    170. DB 089H, 05DH, 0F8H, 051H, 0FFH, 053H, 020H, 08DH, 073H, 050H
    171. DB 08BH, 07DH, 008H, 08BH, 04BH, 04CH, 08BH, 03FH, 089H, 07DH
    172. DB 0FCH, 081H, 0FFH, 000H, 000H, 001H, 000H, 00FH, 086H, 0B3H
    173. DB 000H, 000H, 000H, 08BH, 0C7H, 08BH, 055H, 00CH, 081H, 0E7H
    174. DB 0FFH, 00FH, 000H, 000H, 085H, 0D2H, 00FH, 084H, 0A0H, 000H
    175. DB 000H, 000H, 003H, 0D7H, 089H, 075H, 0F4H, 0E3H, 037H, 081H
    176. DB 0F9H, 080H, 000H, 000H, 000H, 072H, 01AH, 0B8H, 09AH, 000H
    177. DB 000H, 0C0H, 0EBH, 07AH, 039H, 016H, 076H, 01FH, 081H, 0C7H
    178. DB 000H, 010H, 000H, 000H, 04AH, 074H, 0ECH, 08BH, 075H, 0F4H
    179. DB 08BH, 04BH, 04CH, 039H, 046H, 008H, 074H, 058H, 039H, 03EH
    180. DB 074H, 0E8H, 073H, 0E2H, 039H, 07EH, 004H, 073H, 0E1H, 083H
    181. DB 0C6H, 010H, 0E2H, 0EBH, 08BH, 045H, 0FCH, 0BAH, 0FFH, 0FFH
    182. DB 0FEH, 07FH, 056H, 02BH, 0D0H, 02BH, 075H, 0F4H, 02BH, 0C7H
    183. DB 0D1H, 0EEH, 025H, 000H, 0F0H, 0FFH, 0FFH, 0C1H, 0EAH, 00CH
    184. DB 08DH, 076H, 00FH, 052H, 050H, 0E8H, 002H, 0FFH, 0FFH, 0FFH
    185. DB 06AH, 000H, 06AH, 000H, 06AH, 000H, 052H, 051H, 056H, 0FFH
    186. DB 053H, 00CH, 05EH, 085H, 0C0H, 08BH, 04DH, 008H, 075H, 01AH
    187. DB 089H, 03EH, 089H, 04EH, 00CH, 089H, 039H, 0FFH, 075H, 0FCH
    188. DB 0FFH, 043H, 04CH, 08FH, 046H, 008H, 08BH, 055H, 00CH, 033H
    189. DB 0C0H, 003H, 0D7H, 089H, 056H, 004H, 08DH, 04BH, 034H, 050H
    190. DB 051H, 0FFH, 053H, 024H, 058H, 05FH, 05EH, 05BH, 0C9H, 0C2H
    191. DB 008H, 000H, 0B8H, 00DH, 000H, 000H, 0C0H, 0EBH, 0E9H, 055H
    192. DB 08BH, 0ECH, 083H, 0C4H, 0F0H, 053H, 056H, 057H, 08BH, 075H
    193. DB 008H, 033H, 0DBH, 0C7H, 045H, 0FCH, 011H, 000H, 000H, 000H
    194. DB 0C7H, 045H, 0F0H, 0F0H, 0F2H, 066H, 067H, 0C7H, 045H, 0F4H
    195. DB 0F3H, 02EH, 03EH, 036H, 0C7H, 045H, 0F8H, 026H, 064H, 065H
    196. DB 000H, 08DH, 055H, 0F0H, 0FFH, 04DH, 0FCH, 074H, 02BH, 0ACH
    197. DB 08BH, 0FAH, 0B9H, 00BH, 000H, 000H, 000H, 0F2H, 0AEH, 075H
    198. DB 00AH, 083H, 0F9H, 006H, 073H, 0EAH, 00FH, 0B6H, 0D8H, 0EBH
    199. DB 0E5H, 08BH, 0D0H, 02CH, 0A4H, 074H, 004H, 0FEH, 0C8H, 075H
    200. DB 00BH, 08BH, 0C2H, 08BH, 0CBH, 05FH, 05EH, 05BH, 0C9H, 0C2H
    201. DB 004H, 000H, 033H, 0C0H, 0EBH, 0F3H, 0E8H, 036H, 0FCH, 0FFH
    202. DB 0FFH, 055H, 08BH, 0ECH, 083H, 0C4H, 0FCH, 053H, 056H, 057H
    203. DB 08BH, 055H, 008H, 033H, 0C0H, 08BH, 032H, 08BH, 07AH, 004H
    204. DB 083H, 07EH, 004H, 000H, 064H, 08BH, 01DH, 030H, 000H, 000H
    205. DB 000H, 075H, 05EH, 0F0H, 00FH, 0B1H, 083H, 0FCH, 00FH, 000H
    206. DB 000H, 074H, 054H, 08BH, 0D8H, 08DH, 04BH, 034H, 051H, 0FFH
    207. DB 053H, 020H, 081H, 03EH, 005H, 000H, 000H, 0C0H, 00FH, 085H
    208. DB 0E1H, 000H, 000H, 000H, 083H, 07EH, 014H, 000H, 08BH, 046H
    209. DB 018H, 00FH, 095H, 0C1H, 083H, 07EH, 010H, 002H, 00FH, 0B6H
    210. DB 0C9H, 00FH, 085H, 093H, 000H, 000H, 000H, 089H, 04DH, 0FCH
    211. DB 03DH, 000H, 000H, 001H, 000H, 00FH, 083H, 085H, 000H, 000H
    212. DB 000H, 08BH, 04BH, 04CH, 08DH, 073H, 050H, 08BH, 0D0H, 0E3H
    213. DB 07BH, 039H, 006H, 077H, 005H, 039H, 046H, 004H, 077H, 00BH
    214. DB 083H, 0C6H, 010H, 0E2H, 0F2H, 0EBH, 06BH, 033H, 0C0H, 0EBH
    215. DB 072H, 02BH, 0D0H, 0FFH, 0B7H, 0C0H, 000H, 000H, 000H, 081H
    216. DB 08FH, 0C0H, 000H, 000H, 000H, 000H, 001H, 000H, 000H, 064H
    217. DB 08FH, 005H, 0F8H, 00FH, 000H, 000H, 064H, 089H, 035H, 0FCH
    218. DB 00FH, 000H, 000H, 08DH, 034H, 0D5H, 00FH, 000H, 000H, 000H
    219. DB 0FFH, 0B7H, 0B8H, 000H, 000H, 000H, 0E8H, 0E6H, 0FEH, 0FFH
    220. DB 0FFH, 085H, 0C0H, 075H, 01AH, 089H, 0B7H, 090H, 000H, 000H
    221. DB 000H, 089H, 0B7H, 08CH, 000H, 000H, 000H, 089H, 0B7H, 094H
    222. DB 000H, 000H, 000H, 089H, 0B7H, 098H, 000H, 000H, 000H, 0EBH
    223. DB 00CH, 083H, 07DH, 0FCH, 000H, 074H, 023H, 089H, 0B7H, 094H
    224. DB 000H, 000H, 000H, 08BH, 045H, 008H, 08BH, 000H, 0C7H, 000H
    225. DB 001H, 000H, 0FEH, 080H, 033H, 0C0H, 08DH, 04BH, 034H, 050H
    226. DB 051H, 0FFH, 053H, 024H, 058H, 05FH, 05EH, 05BH, 0C9H, 0C2H
    227. DB 004H, 000H, 085H, 0C9H, 089H, 0B7H, 098H, 000H, 000H, 000H
    228. DB 074H, 0D9H, 080H, 0F9H, 026H, 075H, 008H, 089H, 0B7H, 094H
    229. DB 000H, 000H, 000H, 0EBH, 0CCH, 089H, 0B7H, 090H, 000H, 000H
    230. DB 000H, 089H, 0B7H, 08CH, 000H, 000H, 000H, 0EBH, 0BEH, 081H
    231. DB 03EH, 004H, 000H, 000H, 080H, 00FH, 085H, 096H, 000H, 000H
    232. DB 000H, 08BH, 003H, 08BH, 04EH, 00CH, 085H, 0C0H, 08DH, 053H
    233. DB 004H, 074H, 029H, 083H, 0F8H, 001H, 074H, 006H, 03BH, 0C1H
    234. DB 075H, 020H, 0EBH, 00DH, 03BH, 0CAH, 072H, 007H, 083H, 0C2H
    235. DB 008H, 03BH, 0CAH, 072H, 09BH, 089H, 00BH, 081H, 0A7H, 0C0H
    236. DB 000H, 000H, 000H, 0FFH, 0FEH, 0FFH, 0FFH, 0B8H, 0FFH, 0FFH
    237. DB 0FFH, 0FFH, 0EBH, 08AH, 064H, 0A1H, 0F8H, 00FH, 000H, 000H
    238. DB 085H, 0C0H, 00FH, 084H, 07AH, 0FFH, 0FFH, 0FFH, 064H, 0C7H
    239. DB 005H, 0F8H, 00FH, 000H, 000H, 000H, 000H, 000H, 000H, 0C7H
    240. DB 006H, 002H, 000H, 0FEH, 080H, 025H, 000H, 001H, 000H, 000H
    241. DB 0C7H, 087H, 08CH, 000H, 000H, 000H, 000H, 000H, 000H, 000H
    242. DB 081H, 0A7H, 0C0H, 000H, 000H, 000H, 0FFH, 0FEH, 0FFH, 0FFH
    243. DB 0C7H, 087H, 090H, 000H, 000H, 000H, 03BH, 000H, 000H, 000H
    244. DB 0C7H, 087H, 094H, 000H, 000H, 000H, 023H, 000H, 000H, 000H
    245. DB 0C7H, 087H, 098H, 000H, 000H, 000H, 023H, 000H, 000H, 000H
    246. DB 009H, 087H, 0C0H, 000H, 000H, 000H, 0E9H, 027H, 0FFH, 0FFH
    247. DB 0FFH, 081H, 03EH, 096H, 000H, 000H, 0C0H, 00FH, 085H, 01BH
    248. DB 0FFH, 0FFH, 0FFH, 08DH, 043H, 00AH, 039H, 046H, 00CH, 00FH
    249. DB 085H, 00FH, 0FFH, 0FFH, 0FFH, 0FFH, 087H, 0B8H, 000H, 000H
    250. DB 000H, 0E9H, 06BH, 0FFH, 0FFH, 0FFH, 055H, 08BH, 0ECH, 083H
    251. DB 0C4H, 0A8H, 053H, 056H, 057H, 0E8H, 0EEH, 000H, 000H, 000H
    252. DB 0E8H, 000H, 0FAH, 0FFH, 0FFH, 033H, 0C0H, 064H, 08BH, 01DH
    253. DB 030H, 000H, 000H, 000H, 0F0H, 00FH, 0B1H, 083H, 0FCH, 00FH
    254. DB 000H, 000H, 08DH, 04DH, 0BCH, 074H, 00AH, 0B8H, 001H, 000H
    255. DB 000H, 0C0H, 0E9H, 0CEH, 000H, 000H, 000H, 051H, 033H, 0C0H
    256. DB 08DH, 07DH, 0BCH, 02DH, 0A5H, 0E0H, 068H, 0D6H, 057H, 0FCH
    257. DB 0ABH, 035H, 02FH, 0BAH, 0B7H, 0F1H, 0ABH, 005H, 060H, 080H
    258. DB 059H, 021H, 0ABH, 02DH, 030H, 02CH, 003H, 06CH, 0ABH, 035H
    259. DB 0F8H, 018H, 055H, 0EDH, 0ABH, 005H, 008H, 06FH, 0DBH, 0F8H
    260. DB 0ABH, 02DH, 013H, 031H, 007H, 0B9H, 0ABH, 035H, 059H, 01DH
    261. DB 053H, 025H, 0ABH, 005H, 02EH, 0FFH, 02CH, 044H, 0ABH, 033H
    262. DB 0C0H, 0ABH, 050H, 050H, 0E8H, 03CH, 0FBH, 0FFH, 0FFH, 085H
    263. DB 0C0H, 0C7H, 045H, 0A8H, 050H, 002H, 000H, 000H, 075H, 07BH
    264. DB 089H, 045H, 0ACH, 08DH, 04DH, 0ACH, 08DH, 055H, 0A8H, 06AH
    265. DB 040H, 068H, 000H, 010H, 000H, 000H, 052H, 06AH, 000H, 051H
    266. DB 06AH, 0FFH, 0FFH, 055H, 0C0H, 085H, 0C0H, 08DH, 055H, 0E4H
    267. DB 075H, 05BH, 052H, 0FFH, 055H, 0C8H, 085H, 0C0H, 075H, 06AH
    268. DB 0E8H, 063H, 0FDH, 0FFH, 0FFH, 050H, 06AH, 001H, 0FFH, 055H
    269. DB 0D8H, 085H, 0C0H, 0FCH, 074H, 04DH, 0B9H, 010H, 000H, 000H
    270. DB 000H, 089H, 045H, 0E0H, 08BH, 07DH, 0ACH, 08DH, 075H, 0B0H
    271. DB 033H, 0C0H, 08BH, 0D7H, 089H, 045H, 0B0H, 0C7H, 045H, 0B4H
    272. DB 068H, 000H, 001H, 000H, 0C7H, 045H, 0B8H, 000H, 09DH, 0F4H
    273. DB 0C3H, 0F3H, 0A5H, 0F0H, 00FH, 0B1H, 093H, 0FCH, 00FH, 000H
    274. DB 000H, 075H, 01EH, 033H, 0C0H, 08DH, 04AH, 004H, 0C7H, 002H
    275. DB 001H, 000H, 000H, 000H, 0FFH, 0D1H, 0EBH, 005H, 0E8H, 050H
    276. DB 0F9H, 0FFH, 0FFH, 0E8H, 026H, 0F9H, 0FFH, 0FFH, 05FH, 05EH
    277. DB 05BH, 0C9H, 0C3H, 08DH, 045H, 0E4H, 068H, 001H, 000H, 000H
    278. DB 0C0H, 050H, 0FFH, 055H, 0CCH, 058H, 050H, 08DH, 04DH, 0A8H
    279. DB 068H, 000H, 080H, 000H, 000H, 08DH, 055H, 0ACH, 051H, 052H
    280. DB 06AH, 0FFH, 0FFH, 055H, 0C4H, 058H, 0EBH, 0D3H
    281. ; ~~~~~~~~~~~~~~~~~~~~~~~~~ 0x74C ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    o Обработчик должен проверить откуда происходит вызов. Для этого нужно распарсить strOut(), определив адрес инструкции (.text:00552E54 call edx), если используется замена калбэка, либо определить места обращения к ENVIRONMENT из этой процедуры. Обработчик должен проверять адрес возврата и пропускать сторонние вызовы. С этим всё понятно думаю.
    o Если целевой код находится выше чем код, на котором обработчик получил управление. В этом случае следует выполнить трассировку. При трассировке определяется процедурное ветвление, если оно обнаружено, то ветвление выполняется, после чего адрес возврата из процедуры гдето сохраняется, заменяется на стаб, трассировка прекращается. При этом процедура отработает и при возврате управление получит стаб. Он должен сгенерировать #DB и выполнить переход на сохранённый адрес возврата. Таким образом все процедуры будут пропущены(не будут трассироваться). При достижении целевого кода трассировка прекращается, также как и при переходе на адрес возврата из strOut(). При использовании трассировки необходимо пофиксить трассировочный баг, иначе возникнет деадлок. В случае использования IDP движка он этот баг фиксит сам.
    o Использование IDP в данном случае не приемлимо, достаточно изменить ссылку на калбэк. Так как про структуру ENVIRONMENT ничего более не известно, то утверждать точно нельзя, возможно гдето есть проверки или ссылки на калбэки перезагружаются.
     
  13. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk
    может накатаешь статью? Интересно будет почитать и посмотреть рабочие примеры особенно на си. Сорри что такой назойливый) И как ИДП расшифровывается)
     
  14. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    С примером перехвата MessageBoxA\W
     
  15. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk
    Что такое и как ИДП я прозрел. Спасибо. Знал и ранее но до использования не доходило - задачи не те.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Intercept of the Destruction of Pointers. Какбэ так, мб криво но суть понятна. Как я назвал так назвал, это техника захвата кода разрушением ссылок. Альтернативы этому нет на данный момент.
    Статьй куча, используйте поиск. Единственный нуанс это проблема енума SFC, ваша процедура не формирует стековый фрейм. Енум их является проблемой. Данный вопрос будет рассмотрен на виртеке в виде статьи в ближайшее время.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Кстате как крутой пример можите посмотреть перехват соккетов. Тут гдето линк был.
     
  18. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk
    За линк буду очень признателен. И желательно статью с примерами на си
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    На асме всё. http://wasm.ru/forum/viewtopic.php?id=33357