Сейчас на форуме: rmn, exp50848 (+8 невидимых)

 eXeL@B —› Основной форум —› Опрос: какие точки останова вы используете и как?
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 22 апреля 2012 04:58
· Личное сообщение · #1

Возник данный вопрос и хотелось бы спросить мнение у сообщества.

Собственно варианты:

1. Аппаратные точки останова (hardware breakpoints).
а) "не использую, палятся любым протектором"
б) "если грамотно ставить и защищать DrX-регистры, то это хороший и мощный инструмент!"
в) "хе-хе, я ARM-реверсер)))"
1.1. Для тех, кто выбрал "б". Нужна ли возможность context-specific (бряк только на один поток или на все сразу по выбору)?
а) "я очень хочу использовать возможность context-specific бряков данного типа, мне интересно поймать нужное место в программе только на конкретном потоке"
б) "возможность использовать на конкретном потоке считаю абсурдной, более того, важно чтобы в потоках, создаваемых после установки точки останова, она появилась и там"
в) "в ольке все сделано как надо..."

2. Программные точки останова (software breakpoints/exception breakpoints)
а) "использую, но очень не хватает возможности context-specific бряков данного типа, например, хочу иметь возможность поймать вызов GetWindowTextA в потоке окна инструментов отлаживаемой программы"
б) "меня все устраивает, главное включить голову, а жалуются обычно не профессионалы"
в) "бесит обнаружение бряков этого типа, мгновенно перейду на отладчик, где точки останова данного типа скрываются от программы в 3-ем кольце"

3. Точки останова на память (memory regions hook)
а) "это чего такое вообще?"
б) "реализовано криво, так что вообще не использую"
в) "это очень нужная вещь, использую ольку хотя бы потому, что в ней есть этот тип точек останова"

P.S. 1 июня будет "выкидыш", что это будет зависеть от результата проведения подобных опросов, моего времени и здоровья. Не буду говорить о том, на какой оно стадии. Также не хочется давать пустых обещаний. Но тем не менее:
+поддержка x86 и x86_64
-нет PDK и не скоро будет, но OpenSource
-user-mode only! sorry(
-ELF-версия заморожена
-GUI не готов, так что придется лепить на EDB, GDB или IDA (по совету разработчиков компании Parallels)
-CLI (command line interface) заморожен, разработчик CLI ушел работать в Google
+да, детка! эмулирующий! (опционально, только не обольщайтесь, вирусы на реальной машине этим дебажить не стоит - эмуляция только для ускорения, syscall'ы оно не эмулит)
-анализатор пока сырой, ну да и черт с ним
*глючить будет очень сурово, но пара месяцев баг-репортов со стороны сообщества и из этого что-то может получиться.

| Сообщение посчитали полезным: ressa


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 04 мая 2012 23:41 · Поправил: ARCHANGEL
· Личное сообщение · #2

int пишет:
Я там не нашел Можешь рассказать, какая методика поиска?

Та, конечно. У вас есть адрес базы ntoskrnl.exe, есть виртуальный адрес обработчика (чтение idt ядерным отладчиком, например), а далее всё просто : адрес - ImageBase = RVA, дальше ntoskrnl.exe грузим в IDA, там он, естественно, дизасмится с базой из заголовка. К этой базе плюсуем RVA и давим кнопочку G, вписываем значение, Enter и вот.

На обработчики можно ставить бряки, главное пропускать первую интсрукцию и не ставить на _KiTrap03.

pdb лучше не скачивать вручную с офф-сайта, а сделать это через windbg, т.к. вручную скачанные у меня почему-то половину символов не показывают, а через этот дебаггер качает и всё ок.

Code:
  1.         public  _KiTrap01
  2. _KiTrap01       proc
  3.  
  4. ; Set up machine state frame for displaying
  5.  
  6.         push    0                       ; push dummy error code
  7.         ENTER_TRAP      kit1_a, kit1_t
  8.  
  9. ;
  10. ; Inspect old EIP in case this is a single stepped
  11. ; sysenter instruction.
  12. ;
  13.  
  14.         mov     ecx, [ebp]+TsEip
  15.         cmp     ecx, _KiFastCallEntry
  16.         je      Kt0100
  17.  
  18. ;
  19. ; See if were doing the fast bop optimization of touching user memory
  20. ; with ints disabled. If we are then ignore data breakpoints.
  21. ;
  22. ;
  23. if FAST_BOP
  24.  
  25.         cmp     dword ptr PCR[PcVdmAlert], 0
  26.  
  27.         jne     Kt01VdmAlert
  28.  
  29. endif
  30.  
  31.  
  32. ;
  33. ; If caller is user mode, we want interrupts back on.
  34. ; . all relevant state has already been saved
  35. ; . user mode code always runs with ints on
  36. ;
  37. ; If caller is kernel mode, we want them off!
  38. ; . some state still in registers, must prevent races
  39. ; . kernel mode code can run with ints off
  40. ;
  41. ;
  42.  
  43. .errnz (EFLAGS_V86_MASK AND 0FF00FFFFh)
  44.         test    byte ptr [ebp]+TsEFlags+2,EFLAGS_V86_MASK/010000h
  45.         jnz     kit01_30                ; fault occured in V86 mode => Usermode
  46.  
  47. .errnz (MODE_MASK AND 0FFFFFF00h)
  48.         test    byte ptr [ebp]+TsSegCs,MODE_MASK
  49.         jz      kit01_10
  50.  
  51.         cmp     word ptr [ebp]+TsSegCs,KGDT_R3_CODE OR RPL_MASK
  52.         jne     kit01_30
  53. kit01_05:
  54.         sti
  55. kit01_10:
  56.  
  57. ;
  58. ; Set up exception record for raising single step exception
  59. ; and call _KiDispatchException
  60. ;
  61.  
  62. kit01_20:
  63.         and     dword ptr [ebp]+TsEflags, not EFLAGS_TF
  64.         mov     ebx, [ebp]+TsEip                ; (ebx)-> faulting instruction
  65.         mov     eax, STATUS_SINGLE_STEP
  66.         jmp     CommonDispatchException0Args    ; Never return
  67.  
  68. kit01_30:
  69.  
  70. ; Check to see if this process is a vdm
  71.  
  72.         mov     ebx,PCR[PcPrcbData+PbCurrentThread]
  73.         mov     ebx,[ebx]+ThApcState+AsProcess
  74.         cmp     dword ptr [ebx]+PrVdmObjects,0 ; is this a vdm process?
  75.         je      kit01_05
  76.  
  77.         stdCall _Ki386VdmReflectException_A, <01h>
  78.         test    ax,0FFFFh
  79.         jz      Kit01_20
  80.         jmp     _KiExceptionExit
  81.  
  82. if FAST_BOP
  83.  
  84. Kt01VdmAlert:
  85.  
  86.         ;
  87.         ; If a DEBUG trap occured while we are in VDM alert mode (processing
  88.         ; v86 trap without building trap frame), we will restore all the
  89.         ; registers and return to its recovery routine.
  90.         ;
  91.  
  92.         mov     eax, PCR[PcVdmAlert]
  93.         mov     dword ptr PCR[PcVdmAlert], 0
  94.  
  95.         mov     [ebp].TsEip, eax
  96.         mov     esp,ebp                 ; (esp) -> trap frame
  97.         jmp     _KiExceptionExit        ; join common code
  98.  
  99. endif   ; FAST_BOP
  100.  
  101. _KiTrap01       endp


Code:
  1. _KiTrap0E       proc
  2.  
  3.         ENTER_TRAP      kite_a, kite_t
  4.  
  5.  
  6. if FAST_BOP
  7.         cmp     dword ptr PCR[PcVdmAlert], 0
  8.         jne     Kt0eVdmAlert
  9. endif
  10.  
  11.         MODIFY_BASE_TRAP_FRAME
  12.  
  13.         mov     edi,cr2
  14. ;
  15. ; Now that everything is in a sane state check for rest of the Pentium
  16. ; Processor bug work around for illegal operands
  17. ;
  18.  
  19.         cmp     _KiI386PentiumLockErrataPresent, 0
  20.         jne     PentiumTest              ; Check for special problems
  21.  
  22. NoPentiumFix:                            ; No. Skip it
  23.         sti
  24.  
  25.  
  26.         test    [ebp]+TsEFlags, EFLAGS_INTERRUPT_MASK   ; faulted with
  27.         jz      Kt0e12b                 ; interrupts disabled?
  28.  
  29. Kt0e01:
  30.  
  31. ;
  32. ; call _MmAccessFault to page in the not present page. If the cause
  33. ; of the fault is 2, _MmAccessFault will return appropriate error code
  34. ;
  35.  
  36.         push    ebp                     ; set trap frame address
  37.         mov     eax, [ebp]+TsSegCs      ; set previous mode
  38.         and     eax, MODE_MASK          ;
  39.         push    eax                     ;
  40.         push    edi                     ; set virtual address of page fault
  41.         mov     eax, [ebp]+TsErrCode    ; set load/store indicator
  42.         shr     eax, 1                  ;
  43.         and     eax, _KeErrorMask       ;
  44.         push    eax                     ;
  45.  
  46.         call    _MmAccessFault@16
  47.  
  48.         test    eax, eax                ; check if page fault resolved
  49.         jl      short Kt0e05            ; if l, page fault not resolved
  50.         cmp     _PsWatchEnabled, 0      ; check if working set watch enabled
  51.         je      short @f                ; if e, working set watch not enabled
  52.         mov     ebx, [ebp]+TsEip        ; set exception address
  53.         stdCall _PsWatchWorkingSet, <eax, ebx, edi> ; record working set information
  54. @@:     cmp     _KdpOweBreakpoint, 0    ; check for owed breakpoints
  55.         je      _KiExceptionExit        ; if e, no owed breakpoints
  56.         stdCall _KdSetOwedBreakpoints   ; notify the debugger
  57.         jmp     _KiExceptionExit        ; join common code
  58.  
  59. ;
  60. ; Memory management could not resolve the page fault.
  61. ;
  62. ; Check to determine if the fault occured in the interlocked pop entry slist
  63. ; code. There is a case where a fault may occur in this code when the right
  64. ; set of circumstances occurs. The fault can be ignored by simply skipping
  65. ; the faulting instruction.
  66. ;
  67.  
  68. Kt0e05: mov     ecx, offset FLAT:ExpInterlockedPopEntrySListFault ; get pop code address
  69.         cmp     [ebp].TsEip, ecx        ; check if fault at pop code address
  70.         je      Kt0e10a                 ; if eq, skip faulting instruction
  71.  
  72. ;
  73. ; Check to determine if the page fault occured in the user mode interlocked
  74. ; pop entry SLIST code.
  75. ;
  76.  
  77.         mov     ecx, _KeUserPopEntrySListFault
  78.         cmp     [ebp].TsEip, ecx        ; check if fault at USER pop code address
  79.         je      Kt0e10b
  80.  
  81. ;
  82. ; Did the fault occur in KiSystemService while copying arguments from
  83. ; user stack to kernel stack?
  84. ;
  85.  
  86. Kt0e05a:mov     ecx, offset FLAT:KiSystemServiceCopyArguments
  87.         cmp     [ebp].TsEip, ecx
  88.         je      short Kt0e06
  89.  
  90.         mov     ecx, offset FLAT:KiSystemServiceAccessTeb
  91.         cmp     [ebp].TsEip, ecx
  92.         jne     short Kt0e07
  93.  
  94.         mov     ecx, [ebp].TsEbp        ; (eax)->TrapFrame of SysService
  95.         test    [ecx].TsSegCs, MODE_MASK
  96.         jz      short Kt0e07            ; caller of SysService is k mode, we
  97.                                         ; will let it bugcheck.
  98.         mov     [ebp].TsEip, offset FLAT:kss61
  99.         mov     eax, STATUS_ACCESS_VIOLATION
  100.         mov     [ebp].TsEax, eax
  101.         jmp     _KiExceptionExit
  102.  
  103. Kt0e06:
  104.         mov     ecx, [ebp].TsEbp        ; (eax)->TrapFrame of SysService
  105.         test    [ecx].TsSegCs, MODE_MASK
  106.         jz      short Kt0e07            ; caller of SysService is k mode, we
  107.                                         ; will let it bugcheck.
  108.         mov     [ebp].TsEip, offset FLAT:kss60
  109.         mov     eax, STATUS_ACCESS_VIOLATION
  110.         mov     [ebp].TsEax, eax
  111.         jmp     _KiExceptionExit
  112. Kt0e07:
  113.  
  114.         mov     ecx, [ebp]+TsErrCode    ; (ecx) = error code
  115.         shr     ecx, 1                  ; isolate read/write bit
  116.         and     ecx, _KeErrorMask       ;
  117. ;
  118. ; Did the fault occur in a VDM?
  119. ;
  120.  
  121. .errnz (EFLAGS_V86_MASK AND 0FF00FFFFh)
  122.         test    byte ptr [ebp]+TsEFlags+2,EFLAGS_V86_MASK/010000h
  123.         jnz     Kt0e7
  124.  
  125. ;
  126. ; Did the fault occur in a VDM while running in protected mode?
  127. ;
  128.  
  129.         mov     esi,PCR[PcPrcbData+PbCurrentThread]
  130.         mov     esi,[esi]+ThApcState+AsProcess
  131.         cmp     dword ptr [esi]+PrVdmObjects,0 ; is this a vdm process?
  132.         je      short Kt0e9             ; z -> not vdm
  133.  
  134. .errnz (MODE_MASK AND 0FFFFFF00h)
  135.         test    byte ptr [ebp]+TsSegCs, MODE_MASK
  136.         jz      short Kt0e9             ; kernel mode, just dispatch exception.
  137.  
  138.         cmp     word ptr [ebp]+TsSegCs, KGDT_R3_CODE OR RPL_MASK
  139.         jz      short kt0e9             ; z -> not vdm
  140.  
  141. Kt0e7:  mov     esi, eax
  142.         stdCall _VdmDispatchPageFault, <ebp,ecx,edi>
  143.         test    al,0fh                  ; returns TRUE, if success
  144.         jnz     Kt0e11                  ; Exit,No need to call the debugger
  145.         mov     eax, esi
  146.  
  147. Kt0e9:
  148. ; Set up exception record and arguments and call _KiDispatchException
  149.         mov     esi, [ebp]+TsEip        ; (esi)-> faulting instruction
  150.  
  151.         cmp     eax, STATUS_ACCESS_VIOLATION ; dispatch access violation or
  152.         je      short Kt0e9a                 ; or in_page_error?
  153.  
  154.         cmp     eax, STATUS_GUARD_PAGE_VIOLATION
  155.         je      short Kt0e9b
  156.  
  157.         cmp     eax, STATUS_STACK_OVERFLOW
  158.         je      short Kt0e9b
  159.  
  160.  
  161. ;
  162. ; test to see if reserved status code bit is set. If so, then bugchecka
  163. ;
  164.  
  165.         cmp     eax, STATUS_IN_PAGE_ERROR or 10000000h
  166.         je      Kt0e12                  ; bugchecka
  167.  
  168. ;
  169. ; (ecx) = ExceptionInfo 1
  170. ; (edi) = ExceptionInfo 2
  171. ; (eax) = ExceptionInfo 3
  172. ; (esi) -> Exception Addr
  173. ;
  174.  
  175.         mov     edx, ecx
  176.         mov     ebx, esi
  177.         mov     esi, edi
  178.         mov     ecx, 3
  179.         mov     edi, eax
  180.         mov     eax, STATUS_IN_PAGE_ERROR
  181.         call    CommonDispatchException ; Won't return
  182.  
  183. Kt0e9a: mov     eax, KI_EXCEPTION_ACCESS_VIOLATION
  184. Kt0e9b:
  185.         mov     ebx, esi
  186.         mov     edx, ecx
  187.         mov     esi, edi
  188.         jmp     CommonDispatchException2Args ; Won't return
  189.  
  190. .FPO ( 0, 0, 0, 0, 0, FPO_TRAPFRAME )
  191.  
  192. ;
  193. ; The fault occured in the kernel interlocked pop slist function. The operation should
  194. ; be retried.
  195.  
  196. Kt0e10a:mov     ecx, offset FLAT:ExpInterlockedPopEntrySListResume ; get resume address
  197.         jmp     Kt0e10e
  198.  
  199. ;
  200. ; An unresolved page fault occured in the user mode interlocked pop slist
  201. ; code at the resumable fault address.
  202. ;
  203. ; Within the KTHREAD structure are these fields:
  204. ;и т.д. - всё не влезло


-----
Stuck to the plan, always think that we would stand up, never ran.



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


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