Сейчас на форуме: tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› Затираем следы в PEB
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 31 июля 2010 14:19 · Поправил: daFix
· Личное сообщение · #1

Состряпал такой не хитрый код, который должен избавить нас от IsDebuggerPresent:
Code:
  1. DWORD offset;
  2. offset = ThreadLocalBase + 0x18;
  3. ReadProcessMemory(pi.hProcess, (void*)offset, &offset,sizeof(offset),0);
  4. offset+=0x30;
  5. ReadProcessMemory(pi.hProcess, (void*)offset, &offset,sizeof(offset),0);
  6. offset+=0x2;
  7. WriteProcessMemory(pi.hProcess, (void*)offset, "0", 1,0);

Пробовал запускать на болванке, но палимся, не могу понять где ошибся.

ThreadLocalBase получаю из события CREATE_PROCESS_DEBUG_EVENT:
Code:
  1. ThreadLocalBase = (long)DebugEvent.u.CreateProcessInfo.lpThreadLocalBase;


-----
Research For Food




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

Создано: 31 июля 2010 14:25
· Личное сообщение · #2

Лучше дай скомпиленный вариант.

daFix пишет:
WriteProcessMemory(pi.hProcess, (void*)offset, "0", 1,0);

Это ты прикалываешься? Почему "0"?

Думается мне вот так:

Code:
  1. DWORD offset;
  2. char buff = 0;
  3. offset = ThreadLocalBase + 0x18;
  4. ReadProcessMemory(pi.hProcess, (void*)offset, &offset,sizeof(offset),0);
  5. offset+=0x30;
  6. ReadProcessMemory(pi.hProcess, (void*)offset, &offset,sizeof(offset),0);
  7. offset+=0x2;
  8. WriteProcessMemory(pi.hProcess, (void*)offset, &buff, 1,0);




Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 31 июля 2010 14:46
· Личное сообщение · #3

> WriteProcessMemory(pi.hProcess, (void*)offset, "0", 1,0);
он тебе и записывает значение 0x30
> WriteProcessMemory(pi.hProcess, (void*)offset, buff, 1,0);
так неверно, ловим #ac
скорее
Code:
  1. WriteProcessMemory(pi.hProcess, (void*)offset, (void *)&buff, sizeof(buff), 0);

да, и ничего не слышали про PUCHAR?




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 31 июля 2010 14:49 · Поправил: daFix
· Личное сообщение · #4

int
Блин, вот я олень, сразу не сообразил что это будет байт 0x30
Спасибо, заработало!

Ну тогда уже в догонку, чтобы не создавать новых тем, видел как-то доку по антиотладке,
где описывались API и поля PEB, откуда они берут данные, по которым мы палимся
Может кто нибудь сказать её название?

ADDED
n0name
Признаться честно, не слышал, сейчас погуглю

-----
Research For Food




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

Создано: 31 июля 2010 14:55
· Личное сообщение · #5

n0name пишет:
WriteProcessMemory(pi.hProcess, (void*)offset, buff, 1,0);

Видимо, ты про мой пост, ну так я уже исправил ;)

n0name пишет:
ничего не слышали про PUCHAR

это не стандартный тип, это тип из винды, в топку такое

daFix пишет:
сейчас погуглю





Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 31 июля 2010 14:59
· Личное сообщение · #6

> это не стандартный тип, это тип из винды, в топку такое
ага, ага, а WriteProcessMemory это кроссплатформенное решение

typedef unsigned char * PUCHAR;

и тогда не понадобитсья конвертация dword'ов в указатели.
что-то типа такого:
Code:
  1. PUCHAR offset = 0;
  2. char buff = 0;
  3.  
  4. offset = (PUCHAR)ThreadLocalBase + 0x18;
  5. ReadProcessMemory(pi.hProcess, offset, &offset, sizeof(offset), 0);
  6. offset += 0x30;
  7. ReadProcessMemory(pi.hProcess, offset, &offset, sizeof(offset), 0);
  8. offset += 0x2;
  9. WriteProcessMemory(pi.hProcess, offset, &buff, sizeof(buff), 0);


ну и само собой более x64-safe.




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 31 июля 2010 15:01
· Личное сообщение · #7

IsDebuggerPresent берет значение из _PEB.BeingDebugged


Code:
  1. MOV EAX,DWORD PTR FS:[18h]
  2. MOV EAX,DWORD PTR DS:[EAX+30h]
  3. MOVZX EAX,BYTE PTR DS:[EAX+2]


также _PEB.NtGlobalFlag указывает на наличие отладчика

Code:
  1. mov eax,dword ptr fs:[030h]
  2. add eax,068h
  3. mov eax,dword ptr ds:[eax]
  4. cmp eax,070h


-----
Nulla aetas ad discendum sera




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 31 июля 2010 15:09
· Личное сообщение · #8

Способов обнаружить отладчик куча, неужеле сейчас есчо ктото читает флажки из PEB




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 31 июля 2010 15:14
· Личное сообщение · #9

n0name
Ничего страшного, пусть будет DWORD'ом

Flint
В приведённом коде я какраз и затирал _PEB.BeingDebugged
А вот за _PEB.NtGlobalFlag огромное спасибо!

Ну и до кучи, не выложите проги для теста, которые показывают на каком из методов детекта палится отладчик?

-----
Research For Food




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 31 июля 2010 15:19 · Поправил: Clerk
· Личное сообщение · #10

daFix
Есть простой способ. Задержки померять. Под отладчиком каждое из 7 событий вносит огромные задержки. Просто измеряем число фолтов за единицу времени. ~2k раз меньше будет чем без отладчика. Или вообще можно отладчик отключить от процесса.




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

Создано: 31 июля 2010 15:20 · Поправил: Coderess
· Личное сообщение · #11

Набор примеров антиотладок от ap0x'а
ap0x.jezgra.net/protection.html

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





Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 31 июля 2010 15:22
· Личное сообщение · #12

Coderess пишет:
Набор примеров антиотладок от ap0x'а


угу ap0x.jezgra.net/protection.html

-----
Nulla aetas ad discendum sera





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 31 июля 2010 15:25
· Личное сообщение · #13

Clerk
Знаю что PEB морально устарел, но всёравно есть такие динозавры как армадилла, которые наверняка
всё ещё крутят _PEB.BeingDebugged.
Пока закрою PEB, потом буду извращаться с АнтиАнтиБебагом по мере необходимости.

Coderess
Спасибо!

-----
Research For Food




Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 01 августа 2010 03:04
· Личное сообщение · #14

Clerk пишет:
неужеле сейчас есчо ктото читает флажки из PEB

Старфорц пятый, причем через АПИ И насколько помню - это единственный его антидебаг




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 01 августа 2010 11:42
· Личное сообщение · #15

последний стар много чего читает через PEB



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 02 августа 2010 09:19 · Поправил: Av0id
· Личное сообщение · #16

вот тут можно кое-что подсмотреть про затирание следов в PEB, где-то еще был более новый вариант
http://www.accessroot.com/arteam/site/download.php?view.94

код в последнем посте (прячемся от IsDebuggerPresent и NtGlobalFlags)
http://www.accessroot.com/arteam/forums/showtopic=8609

можно еще по аналогии дописать проверку heap-flags
Code:
  1. mov eax, fs:[30h]
  2. mov eax, [eax+18h]
  3. mov eax, [eax+10h]




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 04 августа 2010 17:44
· Личное сообщение · #17

daFix
Нужно было выполнить задержку, вспомнил про этот топик:
Code:
  1. YIELD_CTX macro Reg32
  2.          mov eax,3
  3.          ifdef Reg32
  4.          xor Reg32,Reg32
  5.          endif
  6.          mov gs,ax
  7. @@:
  8.          mov ax,gs        ; ~ iret
  9.          ifdef Reg32
  10.          inc Reg32
  11.          endif
  12.          test eax,eax
  13.          jnz @b
  14. endm
  15.  
  16. YIELD_NPX macro Reg32
  17.          fnop
  18.          ifdef Reg32
  19.          xor Reg32,Reg32
  20.          endif
  21. @@:
  22.          smsw eax         ; 16i
  23.          ifdef Reg32
  24.          inc Reg32
  25.          endif
  26.          bt ax,1 ; Cr0.MP
  27.          jnc @b
  28. endm

Чтоже будет при трассировке ?




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 04 августа 2010 20:25
· Личное сообщение · #18

Clerk
На трассировку я пока не замахиваюсь. Пишется по мере возникновения новых задач, поэтому
для личного применения вполне сностно

-----
Research For Food




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 04 августа 2010 20:50
· Личное сообщение · #19

daFix

Раз вам ничего не интересно, тогда решение в лоб:
Получаете описатель отладочного порта посредством NtQueryInformationProcess(ProcessDebugObjectHandle) и удаляете его нафиг с помощью NtRemoveProcessDebug. Добавляете сюда NtContinue чтобы наебать трейсер или например это http://exelab.ru/f/action=vthread&forum=6&topic=16000
Всё тривиально. А вы там какието флажки в среде чекаете




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

Создано: 04 августа 2010 21:58
· Личное сообщение · #20

Clerk

Из драйвера делаю так

Code:
  1. VOID DebugPortClean()
  2. {
  3.          PEPROCESS peproc = NULL;
  4.  
  5.          PsLookupProcessByProcessId((HANDLE)PID, &peproc);
  6.          if (peproc->DebugPort)
  7.          {
  8.                  peproc->DebugPort = (PVOID)0;
  9.          }
  10. }


Есть разница если сделаю в юзермоде по вашему?
NtQueryInformationProcess(ProcessDebugObjectHandle) и удаляете его нафиг с помощью NtRemoveProcessDebug

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




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 04 августа 2010 22:05 · Поправил: Clerk
· Личное сообщение · #21

Coderess
Из лузермода обьекты не доступны для записи и чтения, так как в ядерной памяти расположены. А так по сути разницы нет.




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

Создано: 05 августа 2010 11:26 · Поправил: ARCHANGEL
· Личное сообщение · #22

По сути нет, но EPROCESS разнится от версии винды к версии. Нужно либо точно вычислять смещения DebugObject, либо юзать экспортируемые функции. Это, конечно, не значит, что из ядра никак нельзя это сделать, опираясь на экспорт. В ядре тоже есть нужные для такого дела функи.

Только во всём этом есть принципиальная разница. Если daFix хотел скрыть присутствие отладчика, то метод Clerk'a выполнит Detach отладчика от отлаживаемого процесса. Требовалось совсем не это.

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





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 05 августа 2010 12:12
· Личное сообщение · #23

ARCHANGEL
После удаления отладочного порта, отладчик перестанет получать отладочные сообщения?

-----
Research For Food





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

Создано: 05 августа 2010 13:33
· Личное сообщение · #24

daFix
Да, по аналогии с DebugActiveProcessStop.

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




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 05 августа 2010 15:54
· Личное сообщение · #25

ARCHANGEL
Скрыть отладчик не возможно. Тот который системный механизм пользовательский.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 07 августа 2010 00:37 · Поправил: daFix
· Личное сообщение · #26

Clerk, советы дельные, только до них дорасти надо
Можете пролить свет на одну фигню?
Потёр PEB, начал запускать разные проты. Протестировал EXECryptor и ASProtect 2.3 max prot с затёртым PEB.
ASPrptect запустился без проблем, а вот EXECryptor ни в какую, но если PEB не трогать, то запускается нормально
В PEB затирал только _PEB.BeingDebugged
Это в крипторе какая-то извратная проверка или я что-то не учёл?

-----
Research For Food




Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 07 августа 2010 07:28
· Личное сообщение · #27

некоторые юзают самоотладку.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 07 августа 2010 15:38
· Личное сообщение · #28

daFix
> Это в крипторе какая-то извратная проверка или я что-то не учёл?
Вам уже стопяцот раз сказали что способов обнаружить отладчик немеряно. Откуда мне знать что эта кривая тулза делает.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 07 августа 2010 16:51 · Поправил: daFix
· Личное сообщение · #29

n0name
В крипторе нету DebugBlocker'а
Clerk
Обращение шло не конкретно к вам, а ко всем, кто заходит в этот топик.
Расчёт был на людей, кто разбирается в крипторе
Разобрался в чём дело. Надо было затирать поля PEB после попадания на System Breakpoint

-----
Research For Food




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 07 августа 2010 20:27
· Личное сообщение · #30

daFix
Смотрел эту поделку http://exelab.ru/download.php?action=get&n=NzM1
так у меня на XP эта херня отваливается на сепшине, потом вобще зависает.


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


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