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

 eXeL@B —› Программирование —› Dumper (или как содрать данные)
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 августа 2011 08:57
· Личное сообщение · #1

Всем добрый день. Собственно проблема. Прога накрыта вмпротом+сенсилоком. За почти год войны с ней разодрал вроде все. Встала проблема надо насобирать данные которые отдает ключ. Написал скрипт под ольку. Обошелся 3мя HWBPХ 2 из них в DeviceIOControl 1 внутри тела проги. Но вот беда. Медленно все это происходит дампирование 1го значения около 2-4секунд. Теперь вопрос. Ни у кого нету случаем болванки дебугера на HWBPХ или ктото предложит более изумительный вариант КАК лучше это все устроить.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 17 августа 2011 09:39
· Личное сообщение · #2

Заинжекченная DLL, с установленными хуками на DeviceIOControl, должна будет работать быстрее. Возможно вмпрот будет реагировать на хуки, но стоит всё же проверить и если что - обойти это ограничение.

-----
все багрепорты - в личные сообщения




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

Создано: 17 августа 2011 11:05
· Личное сообщение · #3

вариант описанный выше

d83d_17.08.2011_EXELAB.rU.tgz - with_inject.txt



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

Создано: 17 августа 2011 11:24
· Личное сообщение · #4

если есть сложности с хардварными бряками, то там все просто

Code:
  1. #define BREAKPOINT_LOCAL_EXACT           0x00000100 
  2. #define DR0_BREAKPOINT_LOCAL               0x00000001 
  3. #define DR0_EXECUTE                              0x00000000
  4. #define DR0_ONE_BYTE                      0x00000000
  5.  
  6. #define DR1_BREAKPOINT_LOCAL      0x00000004
  7. #define DR1_EXECUTE               0x00000000
  8. #define DR1_ONE_BYTE            0x00000000  
  9.  
  10. #define DR2_BREAKPOINT_LOCAL      0x00000010
  11. #define DR2_EXECUTE               0x00000000
  12. #define DR2_ONE_BYTE            0x00000000
  13.  
  14. #define DR3_BREAKPOINT_LOCAL      0x00000040
  15. #define DR3_EXECUTE               0x00000000
  16. #define DR3_ONE_BYTE            0x00000000
  17.  
  18.                  // set hwbp 0
  19.                  ctx->Dr0 = hAddress;
  20.                  ctx->Dr7 |= BREAKPOINT_LOCAL_EXACT | DR0_BREAKPOINT_LOCAL | DR0_EXECUTE | DR0_ONE_BYTE;
  21.                  // unset hwbp
  22.                  ctx->EFlags |= 0x10000;
  23.                  ctx->Dr7 &= ~DR0_BREAKPOINT_LOCAL;
  24.  
  25.                  // set hwbp 1
  26.                  ctx->Dr0 = hAddress;
  27.                  ctx->Dr7 |= BREAKPOINT_LOCAL_EXACT | DR1_BREAKPOINT_LOCAL | DR1_EXECUTE | DR1_ONE_BYTE;
  28.                  // unset hwbp
  29.                  ctx->EFlags |= 0x10000;
  30.                  ctx->Dr7 &= ~DR1_BREAKPOINT_LOCAL;
  31.  
  32.                  // set hwbp 2
  33.                  ctx->Dr0 = hAddress;
  34.                  ctx->Dr7 |= BREAKPOINT_LOCAL_EXACT | DR2_BREAKPOINT_LOCAL | DR2_EXECUTE | DR2_ONE_BYTE;
  35.                  // unset hwbp
  36.                  ctx->EFlags |= 0x10000;
  37.                  ctx->Dr7 &= ~DR2_BREAKPOINT_LOCAL;
  38.  
  39.                  // set hwbp 2
  40.                  ctx->Dr0 = hAddress;
  41.                  ctx->Dr7 |= BREAKPOINT_LOCAL_EXACT | DR3_BREAKPOINT_LOCAL | DR3_EXECUTE | DR3_ONE_BYTE;
  42.                  // unset hwbp
  43.                  ctx->EFlags |= 0x10000;
  44.                  ctx->Dr7 &= ~DR3_BREAKPOINT_LOCAL;




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 августа 2011 11:28
· Личное сообщение · #5

Av0id я когдато на делфе делал дебугер но на дебаг апи, про хардварные реализации читал, на васме вроде замычательная статья была, но руки так и не дошли. вот и спрашивал, может у кого болванка есть готовая, чтоб не вникать (и вопрос с реакцие на все это ВМПрота тоже неизвестен)

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 17 августа 2011 11:59
· Личное сообщение · #6

VodoleY пишет:
и вопрос с реакцие на все это ВМПрота тоже неизвестен

Скорее всего будет реакция. Иначе, не юзали б плаги в ольке

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 17 августа 2011 12:42
· Личное сообщение · #7

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

9f66_17.08.2011_EXELAB.rU.tgz - myDebug.zip

-----
[nice coder and reverser]


| Сообщение посчитали полезным: Gideon Vi, ClockMan, tihiy_grom, MasterSoft

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 августа 2011 12:50
· Личное сообщение · #8

Hellspawn по первому взгляду то, что доктор прописал. ГРОМАДНОЕ спс. буду курить сорцы. пока оставлю тему открытой

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 17 августа 2011 13:54 · Поправил: MasterSoft
· Личное сообщение · #9

Hellspawn
что за юнит cadt?

Johnny Mnemonic пишет:
ms-rem'a трейсер

+



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

Создано: 17 августа 2011 14:10
· Личное сообщение · #10

MasterSoft пишет:
что за юнит cadt?

ms-rem'a трейсер




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 17 августа 2011 14:47
· Личное сообщение · #11

нет, дизасм старый от рема

Code:
  1. Code Analization and Disassembling Tool v 1.1

я его не приложил чтоле?

-----
[nice coder and reverser]





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 17 августа 2011 15:08
· Личное сообщение · #12

Hellspawn пишет:
я его не приложил чтоле?


нет




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 17 августа 2011 15:15
· Личное сообщение · #13

исправляюсь

bcff_17.08.2011_EXELAB.rU.tgz - CADT11.zip

-----
[nice coder and reverser]




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 августа 2011 16:57
· Личное сообщение · #14

Hellspawn ну если исправляца....
{$include string.inc}
{$include tables.inc}
и если можно тогда уже и вызов RunDebug с циклом сори за наглеж.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

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

с циклом не нашёл, только так, выдрал из старого кей-файндера:

Code:
  1. procedure RunDebuger();
  2. begin
  3.   DB.iHideDdg          := 1;
  4.   DB.iSetEpBreak       := 1;
  5.   DB.SystemBpHandler   := DWORD(@MySystemBp);
  6.   DB.Int3Handler       := DWORD(@MyInt3);
  7.   DB.SingleStepHandler := DWORD(@MySingleStep);
  8.   DB.RunDebug(ExeName);
  9.   LOG('[!] Finished');
  10. end;
  11. ...
  12. procedure MyInt3(const ERec : _EXCEPTION_RECORD);
  13. var
  14.   iatstart:dword;
  15.   dwadr:dword;
  16.   dwtmp:dword;
  17. begin
  18.   LOG('INT3: '+IntToHex(DWORD(ERec.ExceptionAddress),8));
  19.   LOG('BreakReason: '+IntToHex(DB.BreakReason,8) + ' BpxIndex: ' + IntToStr(DB.BpxIndex));
  20.   If (DB.BreakReason = EP_HANDLER) then
  21.   begin
  22.     dwadr := DWORD(GetProcAddress(GetModuleHandleA('kernel32.dll'),'CreateThread'));
  23.     DB.SetBpx(1,dwadr)
  24.   end;
  25.   If (DB.BreakReason = BPX_HANDLER) then
  26.   begin
  27.     DB.DelBpx(DB.BpxIndex);
  28.     dwadr := DB.GetESP() + $0c;
  29.     DB.ReadMemory(dwadr,@dwtmp,4);
  30.     LOG('[ESP+0c] = ' + IntToHex(dwtmp,8));
  31.   end;
  32. end;


а вообще погляди TraceToOep в самом модуле, там примитивный трейс реализован))

eaf5_17.08.2011_EXELAB.rU.tgz - inc.zip

-----
[nice coder and reverser]




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 августа 2011 17:24
· Личное сообщение · #16

Hellspawn ок. начал вьезжать. осталось ВАМита дождаца чтоб отучить вмпрот орать на то что "дебугер ранед"

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 17 августа 2011 18:10
· Личное сообщение · #17

VodoleY пишет:
отучить вмпрот орать на то что "дебугер ранед"

Некоторые версии вмпрота(мне только одна попадалась) орут, что он раннинг, даже если не приаттачен. При чём кроме ольки орёт также и на студию... периодически ищет сервисы айса... Берём любую утилиту, прячущую деббаггер в списке процессов - помогает(для попавшейся мне версии), поскольку там перечисление через ToolHelp32.

-----
IZ.RU




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 17 августа 2011 18:39
· Личное сообщение · #18

DenCoder я за год обчитался дофига кода код вмпрота изучал. и на стадии загрузки и на стадии дебага и с ВАМитом(я его почти за..б.л) обсуждал аспекты. ток ВАМит в свипере отучил умничать вм прот. там проверок много. но если хардваре бряки юзать. остаеца ток IsDebugerPresent и еще чтото. все црс все проверки 1ых байт фунок апи ..все лесом идет

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 17 августа 2011 21:33 · Поправил: Veliant
· Личное сообщение · #19

На сколько знаю вмпрот балуется следующими вещами
IsDebuggerPresent() = 0
CheckRemoteDebuggerPresent() = 0
CloseHandle ( DEADC0DE ) = 0
Вызовы ZwQuerySystemInformation с проверкой драйверов SoftIce и Syser
Установкой Int3 бряков со своим обработчиком
ZwSetInformationThread( ..., ThreadHideFromDebugger, ...)
ZwQueryInformationProcess c параметром ProcessDebugObjectHandle
не говоря уж про проверку памяти




Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 17 августа 2011 21:45
· Личное сообщение · #20

VodoleY пишет:
остаеца ток IsDebugerPresent

в распакованном модуле?




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 17 августа 2011 23:11 · Поправил: Vamit
· Личное сообщение · #21

ток ВАМит в свипере отучил умничать вм прот. там проверок много.
Патчинга этого достаточно для защиты от вмпрота:
1. "IsDebuggerPresent", "kernel32.dll"
2. "CheckRemoteDebuggerPresent", "kernel32.dll"
3. "CloseHandle","kernel32.dll"
4. "ZwQueryInformationProcess", "ntdll.dll"
5. "ZwSetInformationThread", "ntdll.dll"
6. "KiUserExceptionDispatcher", "ntdll.dll"
7. "ZwContinue", "ntdll.dll"
ну и это в придачу Setbreakpointext(GetEPAddress(), TY_DISABLED, 0, 0);

-----
Everything is relative...




Ранг: 13.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 октября 2013 22:47 · Поправил: stub
· Личное сообщение · #22

сори за поднятие темы.
Hellspawn, я скачал ваш модуль для отладки myDebug.pas.
но, у меня пару вопросов:
1)не получается сделать хардварные бряки. где их ставить не пойму(
2)срабатывает только один раз мой int3-обработчик. каким образом сделать чтобы всегда срабатывал бряк по адресу.
приведите пример. спасибо!

код:

Code:
  1.   db.iSetEpBreak       := 1;
  2.   db.Int3Handler       := DWORD(@MyInt3);
  3.   //db.SingleStepHandler:= dword(@MyHardwareHandler);
  4.   db.RunDebug('c:\Project1.exe');





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 29 октября 2013 23:15
· Личное сообщение · #23

stub

1. db.SingleStepHandler:= dword(@MyHardwareHandler); <- раскоментить обработчик
2. SetHardwareBreak(const iNumber:integer;dwAddress:DWORD) - ставим железный бряк.

приложил файл проекта.

5254_29.10.2013_EXELAB.rU.tgz - testUnit.pas

-----
[nice coder and reverser]


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

Ранг: 13.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2013 02:26 · Поправил: stub
· Личное сообщение · #24

спасибо.
только при компиляции вылазит куча ошибок. myDebug подключен к проекту
одни из них [Error] Unit1.pas(509): Undeclared identifier: 'LogHandler'; [Error] Unit1.pas(516): Undeclared identifier: 'DoDebugLoop'
видимо у меня старая версия модуля
приатачте, плз версию какую вы использовали.
спасибо!



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 30 октября 2013 03:49
· Личное сообщение · #25

stub пишет:
олько при компиляции вылазит куча ошибок
...
Undeclared identifier: '

жесть. если не знаешь что это за ерроры и как пофиксить, почитай книжку какую нить самые основы




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 30 октября 2013 08:50
· Личное сообщение · #26

stub так обработчик нужно создать же :/ я думаю надо вам ещё Delphi подучить...

-----
[nice coder and reverser]




Ранг: 13.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2013 13:53 · Поправил: stub
· Личное сообщение · #27

SReg пишет:
жесть. если не знаешь что это за ерроры и как пофиксить, почитай книжку какую нить самые основы

спасибо, но основы и синтаксис давно изучен

Hellspawn пишет:
stub так обработчик нужно создать же :/ я думаю надо вам ещё Delphi подучить...

да я уже не полный нуб, понимаю ведь. переменной LogHandler, вообще нету в исходниках
вот гляньте проект сами. модуль myDebug скачан с этой темы.

553c_30.10.2013_EXELAB.rU.tgz - test.zip



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 30 октября 2013 15:48 · Поправил: VodoleY
· Личное сообщение · #28

stub синтаксис учится за сутки. Вам говориться о том что вам предоставили кирпичи, а нужный код вы должны построить сам. Обработчика и быть не должно.. Кто знает что вы собираетесь делать после срабатывание бряка?
З.Ы. Кодером становятся НЕ после изучения синтаксиса.. Гдето год два кодинга.. Практика.. А если и это не поможет.. то наверно на кодинг лучше забить.
З.Ы.Ы. Анология.. Если вы собрались учить инглиш.. вы выучили алфавит (синтаксис языка).. на скок матеро вы будете читать и говорить?

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 13.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2013 17:42 · Поправил: stub
· Личное сообщение · #29

VodoleY, вы не поняли суть вопроса,а пытаетесь меня учить
я веду к тому, что Hellspawn привел посл. пример, видимо, из более новой вресии myDebug.pas
версия 0.3 что указано в #7 посте, старая, в ней отсуствуют нужные данные и совсем иное объявление процедур\функций, чтобы скомпилировать по его примеру #23.



Ранг: 13.6 (новичок)
Активность: 0.010
Статус: Участник

Создано: 30 октября 2013 19:50
· Личное сообщение · #30

Hellspawn, вы сможете приатачить ваш новый myDebug.pas ?


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


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