Advertisement
krot

Anti-debug ks

Jun 22nd, 2018
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         push offset my_she     ; назначаем свой обработчик структурных исключений
  2.         push dword ptr fs:[0]  ; сохраняем старый обработчик в цепочке
  3.         mov fs:[0],esp         ; регистрируем новый обработчик
  4.  
  5.         pushf                  ; толкаем в стек флаги
  6.         or dword ptr[esp],100h ; взводим трассировочный бит
  7.         popf                   ; выталкиваем обновленный бит в регистр флагов,
  8.                                ; заставляя ЦП возбуждать исключение на каждой команде
  9.  
  10.         xor eax,eax            ; без отладчика после xor возбуждается исключение и
  11.                                ; управление получает my_seh, а в eax будет не нуль
  12.                                ; под отладчиком исключение молчаливо "съедается"
  13. my_seh:
  14.         test eax,eax           ; если отладчика нет, eax != 0
  15.         jnz debugger_is_present
  16.  
  17. -------
  18. c++
  19.         int a; // через эту переменную мы возвратим значение eax
  20.  
  21.         __asm { // ассемблерная вставка - начало
  22.         push offset my_seh
  23.         push dword ptr fs:[0]
  24.         mov fs:[0],esp
  25.  
  26.         pushf
  27.         or dword ptr[esp],100h ;set trap flag
  28.         popf
  29.  
  30.         xor eax,eax
  31. my_seh:
  32.         pop dword ptr fs:[0] ; восстанавливаем старый обработчик
  33.         add esp,4 ; восстанавливаем стек
  34.  
  35.         mov a,eax ; возвращаем результат в переменной а
  36.         } // ассемблерная вставка - конец
  37.  
  38.         // проверка переменной a на равенство нулю
  39.         printf("%s\n", a ? "no debugger" : "under debugger");
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement