Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить - находится ли приложение в... в режиме отладки?! (Другими словами...) 
:(
    Опции темы
MuForum
  Дата 4.7.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



Доброе время суток!

Столкнулся с такой проблемой, и чесно говоря пока не знаю как решить, да и в Интернете мало чего нашел по этому поводу... (Только по Delphi кое-что...)

Вопрос: "Как определить - Находиться ли приложение в режиме отладки?", другими словами, нужно проверять, находиться ли программа в состояние Debug или прикрепился(attach) ли какой-то дебагер к программе, если да, то выключаем программу.


P.S. -> Прошу помощь опытных программеров, так как сам справиться не могу!


Вот в Интернете нашел интересную информацию по этому поводу, но только на Delphi!
Цитата(Simon Carter)

Обычно господа взломщики, для того, чтобы взломать защиту приложения, запускают его в режиме отладки и анализируют машинный код для определения точки перехвата ввода пароля с клавиатуры. 
Обычно таким способом ломаются игрушки smile 
Конечно данный способ не сможет полностью защитить Ваш программный продукт от взлома, но прекратить выполнение секретного кода - запросто. Для этого мы будем использовать API функцию IsDebuggerPresent. Единственный недостаток этой функции, заключается в том, что она не работет под Windows 95. 
Теперь посмотрим как эту функцию реализовать в Delphi:
Код

function DebuggerPresent: boolean;  
type  
  TDebugProc = function: boolean; stdcall;  
var  
  Kernel32: HMODULE;  
  DebugProc: TDebugProc;  
begin  
  Result := False;  
  Kernel32 := GetModuleHandle('kernel32.dll');  
  if Kernel32 <> 0 then  
  begin  
    @DebugProc := GetProcAddress(Kernel32, 'IsDebuggerPresent');  
    if Assigned(DebugProc) then  
      Result := DebugProc;  
  end;  
end;  

А это окончательный пример вызова нашей функции: 

if DebuggerPresent then  
  ShowMessage('debugging')  
else  
  ShowMessage('NOT debugging');




--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
JackYF
Дата 4.7.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 4
Всего: 162



Код

bool DebuggerPresent()
{
  typedef bool (__stdcall* TDebugProc)();  

  HMODULE kernel32;  
  TDebugProc DebugProc;  

  bool result = false;
  kernel32 = GetModuleHandle("kernel32.dll");  
  if (Kernel32 != 0)
  {  
    DebugProc = GetProcAddress(Kernel32, "IsDebuggerPresent");  
    if (DebugProc)
    {  
      Result = DebugProc();
    } 
  }  
}


if (DebuggerPresent())
{
  ShowMessage("debugging");  
}
else
 


Ну где-то вот так...

Это сообщение отредактировал(а) JackYF - 4.7.2007, 18:07


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MuForum
Дата 4.7.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 4



#2, JackYF - Благодарю за помощь, сейчас уже буду дальше работать и химичить ;)


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
jonie
Дата 4.7.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



такой код обойдется за эмн....2 ил 3 секунды тем же отладчиком ...
вариантов море на самом деле определения отладчика... это и флаги проца, и засекания времени rdtsc используя и SEH\VEH трюки...
подробнее на wasm.ru и на сайтах посвященным взломам...для начала рекомендую поискать статью "исследование полиморфного движка ASProtect"....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Klin
Дата 4.7.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



jonie, в принципе за это время можно его и пресечь. К сожалению, в этом случае нужно определить не только его наличие, но и его "нахождение". А на это может уйти время.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
dumb
Дата 5.7.2007, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Klin @  5.7.2007,  00:35 Найти цитируемый пост)
в принципе за это время можно его и пресечь.

кого пресечь?! речь идет о времени нахождения данной проверки человеком, который будет "копать".

по поводу kernel32!IsDebuggerPresent: а стоит ли ради пары байт такой огород городить?  - там суть-то в паре строк:
Код

mov eax,fs:[30h] ; peb
movzx eax,byte ptr [eax+02] ; isdebug

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.