Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Разное > Флейм
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #46  
Старый 10.03.2011, 15:10
TotKtoNado TotKtoNado вне форума
Начинающий
 
Регистрация: 28.12.2010
Адрес: Сургут
Сообщения: 103
Версия Delphi: 2010
Репутация: -3238
По умолчанию

Цитата:
Сообщение от Duss
А какие средства анти отладки можно разработать средствами Delphi?

Мне в голову приходят 2 способа:
1) Поиск в системе запущенных отладочных программ.
2) Запустить таймер и сравнивать его время с системным, если разница будет существенной- идет отладка или прога зависла
Подводных камней много как в том, так и в другом случае)

Как еще можно защитить программу? Скажим используется ключ, которым шифруются все сообщения передаваемые по сети. Ключ вшит в программу. Как его обезопасить от взлома?

Хороший способ защиты, но как находить в системе отладочники?
Я предлагаю сделать так чтоб программа автоматически запускалась при запуске виндовс и каждые 55 мс она удаляла отладчики и желательно чтоб программа не была видна ни в панели задач, ни в трее ни в списке процессов. Как это в все можно сделать?
Ответить с цитированием
  #47  
Старый 10.03.2011, 15:12
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от ChinYan
ISQ? Мило. В этом случае можно использовать шифрование только передаваемых данных. Использовать что-то вроде AES или что-то в этом роде, и стоит забывать про Принцип Керкгоффса

Я, сначала хотел использовать XOR шифр, один ключ вшит в приложение, второй выдает сервер и периодически меняет. Так вот первый ключ можно узнать взломав программу, второй - запросив с сервера, он выдает ключ все, кто попросит, но в закодированном первым ключем виде. Не очень надежная система получается, вот и хотел посмотреть в сторону защиты от взлома.
В сторону AES тоже смотрел да, большой + в том, что можно зашифровывать все с помощью открытого ключа и расшифровать будет очень сложно и сможет это только сервер, знающий закрытый ключ, но как серверу посылать сообщения клиентам? А их бы хотелось закодировать и скрыть от посторонних в первую очередь! Получается клиенты должны знать закрытый ключ!? Получается их можно взломать и посмотреть ключ!? Опять наводит на мысли об анти отладке))
Ответить с цитированием
  #48  
Старый 10.03.2011, 15:17
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от TotKtoNado
Хороший способ защиты, но как находить в системе отладочники?
Я предлагаю сделать так чтоб программа автоматически запускалась при запуске виндовс и каждые 55 мс она удаляла отладчики и желательно чтоб программа не была видна ни в панели задач, ни в трее ни в списке процессов. Как это в все можно сделать?

Что-то удалять- по моему это через чур, но, найдя в память отладочный процесс- завершить свою работу и наругаться на пользователя- это можно)
Посмотреть програмно диспетчер задачь и все запущенные приложения- не сложно, узнать названия отладочного ПО с помощью гугла или поставив на виртуальную машину тоже не проблема.
Ответить с цитированием
  #49  
Старый 10.03.2011, 16:35
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Цитата:
Сообщение от Duss
А если пишется чат, что -то вроде ISQ или скайпа и цель защиты- не вытянуть побольше денег с продажи, а скрыть информацию, передаваемую по сети?
Тогда при чем тут антиотладка о которой вы говорили?
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #50  
Старый 10.03.2011, 16:44
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Цитата:
сначала хотел использовать XOR шифр
Тогда уж совсем без шифрования - толку будет столько же, а ресурсы сэкономите
Ответить с цитированием
  #51  
Старый 10.03.2011, 17:02
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 746
Репутация: 1293
По умолчанию

Код:
function AntiThreatExpert: bool;
var
  Handle: THandle;
begin
   Handle := GetModuleHandle('dbghelp.dll');
  if Handle <> 0  then Result := True;
end;  

function IsInSandbox(Serial: string):boolean;
var
  hOpen:     HKEY;
  sBuff:    array[0..256] of char;
  BuffSize: integer;
begin
   if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,  PChar('Software\Microsoft\Windows\CurrentVersion'), 0, KEY_QUERY_VALUE,  hOpen)) = ERROR_SUCCESS then begin
    BuffSize := SizeOf(sBuff);
     RegQueryValueEx(hOpen, PChar('ProductId'), nil, nil, @sBuff,  @BuffSize);
    if sBuff = Serial then  Result := True;

     RegCloseKey(hOpen);
  end;
end;  

CW SANDBOX
IF IsInSandBox('76487-644-3177037-23510') then  ExitProcess(0);

JOEBOX
IsInSandBox('55274-640-2673064-23950')  then ExitProcess(0);

ANUBIS
IF  IsInSandBox('76487-337-8429955-22614')) then ExitProcess(0);

function AntiBitDefender():boolean;
begin
OutputDebugString(PChar('Super'));  //Hi
if GetLastError = 00000006 then
Result := TRUE
else
Result  := FALSE;
end;  

Function AntiEmulaters:Boolean;
Var
UpTime             :DWORD;
UpTimeAfterSleep  :Dword;
Begin
   UpTime  :=  GetTickCount;
   Sleep(500);
   UpTimeAfterSleep := GetTickCount;
    if ( UpTimeAfterSleep - UpTime ) < 500 Then
   Result:= True  Else Result:= False;
end;

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

program IsInVM;

{$APPTYPE CONSOLE}

uses
   windows;

function InVMware: Boolean;
asm
    XOR     EAX,  EAX

    PUSH    OFFSET @@Handler
    PUSH    DWORD PTR  FS:[EAX]
    MOV     DWORD PTR FS:[EAX], ESP
    MOV     EAX,  564D5868h
    MOV     EBX, 3c6cf712h
    MOV     ECX, 0Ah
     MOV     DX, 5658h
    IN      EAX, DX
    MOV     EAX, True
     JMP     @@NotHandle
@@Handler:
    MOV     EAX, [ESP+$C]
     MOV     TContext(EAX).EIP, OFFSET @@Handled
    XOR     EAX, EAX
     RET
@@Handled:
    XOR     EAX, EAX
@@NotHandle:
    XOR      EBX, EBX
    POP     DWORD PTR FS:[EBX]
    ADD     ESP, 4
end;

 function  IsInVPC: boolean; assembler;
asm
  push ebp

  mov  ecx,  offset @@exception_handler
  mov  ebp, esp

  push ebx
   push ecx
  push dword ptr fs:[0]
  mov  dword ptr fs:[0], esp

   mov  ebx, 0 // flag
  mov  eax, 1 // VPC function number

  //  call VPC
  db 00Fh, 03Fh, 007h, 00Bh

  mov eax, dword ptr  ss:[esp]
  mov dword ptr fs:[0], eax
  add esp, 8

  test  ebx, ebx
  setz al
  lea esp, dword ptr ss:[ebp-4]
  mov ebx,  dword ptr ss:[esp]
  mov ebp, dword ptr ss:[esp+4]
  add esp, 8
   jmp @@ret
  @@exception_handler:
  mov ecx, [esp+0Ch]
  mov  dword ptr [ecx+0A4h], -1
  add dword ptr [ecx+0B8h], 4
  xor eax,  eax
  ret
  @@ret:
end;

begin


if IsInVPC then  writeln('Virtual PC detected') else writeln('Virtual Pc not detected');
if  InVMware then writeln('VMWare Machine detected') else writeln('VMWare  Machine not detected');

readln;

end.

Может кому и пригодится )
Ответить с цитированием
  #52  
Старый 10.03.2011, 17:16
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от BoRoV
Тогда при чем тут антиотладка о которой вы говорили?
Почитакйте этот пост.
http://www.delphisources.ru/forum/sh...9&postcount=47
С помощью отладчика можно добраться до закрытых в программе ключей шифрования, тогда толку от них становится 0.
Ответить с цитированием
  #53  
Старый 10.03.2011, 17:24
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от ChinYan
Тогда уж совсем без шифрования - толку будет столько же, а ресурсы сэкономите

Не соглашусь, с грамотным подходом можно и XOR-ом довольно неплохо зашифровать. Конечно при условии длинных ключей и конечно не банальным XOR а комбинацией либо нескольких хоров, либо денамически изменяемым ключем хора.
Основой расшифровки ХОR алгоритма является словарь!=) Также легко найти ключ заранее зная отправленное сообщение. А если зашифровать XOR-ом не текст? Например MD5 ? Кто сможет найти хешь, зашифрованный банальным хором не зная ключа?
Ответить с цитированием
  #54  
Старый 10.03.2011, 19:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,513
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Шифрование ассиметричным алгоритмом?
При отсутствии ключа просто нечего взламывать, а подбирать приватный ключ по известному паблику просто не хватит ресурсов (при длинных ключах, конечно).
Ответить с цитированием
  #55  
Старый 10.03.2011, 19:44
Duss Duss вне форума
Прохожий
 
Регистрация: 09.03.2011
Адрес: СПб
Сообщения: 12
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Шифрование ассиметричным алгоритмом?
При отсутствии ключа просто нечего взламывать, а подбирать приватный ключ по известному паблику просто не хватит ресурсов (при длинных ключах, конечно).

Это конечно хорошо, но еще раз объясню свою мысль:
Сообщение зашифровано публичным ключем асимметричного алгоритма.
Сообщение отправлено, чтобы его расшифровать нужно что? Правильно, приватный ключ. Сервер отправляет сообщение клиенту. Значит у клиента есть приватный ключ, чтобы его расшифровать. Значит клиентскую программу можно взломать и вытащить из нее приватные ключи.

Но мы как-то ушли в сторону от темы защиты. Криптография- это конечно интересно, но тема посещена другому.
Ответить с цитированием
  #56  
Старый 10.03.2011, 21:14
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

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


Вот напишешь ты программу для управления хирургическим манипулятором, вот защитишь ты ее МегаЧудо протектором, вот даст твоя программа сбой во время операции, тебе твою прогу и этот Мега протектор вместе с манипулятором затолкают в ... (как в анекдоте про лесорубов и японскую бензопилу)
Да и тырить ее никто не будет даже даром)) без манипулятора и знаний медицины она не нужна будет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 10.03.2011 в 21:24.
Ответить с цитированием
  #57  
Старый 10.04.2011, 18:11
Аватар для Dem0Men
Dem0Men Dem0Men вне форума
Прохожий
 
Регистрация: 06.02.2011
Адрес: г. Ярославль
Сообщения: 26
Версия Delphi: 2007, XE
Репутация: 10
Смех

Цитата:
Сообщение от Duss
А если пишется чат, что -то вроде ISQ или скайпа и цель защиты- не вытянуть побольше денег с продажи, а скрыть информацию, передаваемую по сети?
ICQ
__________________
Итерация от человека. Рекурсия — от Бога.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter