Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

Защита от вмешательства   Найти похожие ветки 

 
DiX ©   (2006-09-17 18:27) [0]

Подскажите как реализовать, чтобы при наличии отладчика (SoftICE,  OllyDBG и др.) прога не стартовала, а так же не стартовала под виртуальной ОС.


 
Yegorchic ©   (2006-09-17 18:55) [1]

////////////////////////////////////////////////////////////////////////////////
//
//  Simple VMware check on i386
//
//    Note: There are plenty ways to detect VMware. This short version bases
//    on the fact that VMware intercepts IN instructions to port 0x5658 with
//    an magic value of 0x564D5868 in EAX. However, this is *NOT* officially
//    documented (used by VMware tools to communicate with the host via VM).
//
//    Because this might change in future versions - you should look out for
//    additional checks (e.g. hardware device IDs, BIOS informations, etc.).
//    Newer VMware BIOS has valid SMBIOS informations (you might use my BIOS
//    Helper unit to dump the ROM-BIOS (http://www.bendlins.de/nico/delphi).
//

function IsVMwarePresent(): LongBool; stdcall;  // platform;
begin
  Result := False;
 {$IFDEF CPU386}
  try
    asm
            mov     eax, 564D5868h
            mov     ebx, 00000000h
            mov     ecx, 0000000Ah
            mov     edx, 00005658h
            in      eax, dx
            cmp     ebx, 564D5868h
            jne     @@exit
            mov     Result, True
    @@exit:
    end;
  except
    Result := False;
  end;
{$ENDIF}
end;


Из DelphiWorld


 
DiX ©   (2006-09-17 21:16) [2]

Спасибо, хотелось-бы еще увидеть защиту от отладчиков.


 
Dmitrij_K   (2006-09-17 21:25) [3]


>  хотелось-бы еще увидеть защиту от отладчико

Самый простой способ это FindWindow


 
oxffff ©   (2006-09-17 21:48) [4]

http://www.wasm.ru/article.php?article=1017001


 
SPACE!!   (2006-09-17 21:49) [5]

http://www.cracklab.ru/download.php посмотри "упаковщики и протекторы",
также глянь "распаковщики" но лучше наверное использовать малоизвестные
разработки каких небудь энтузиастов . А вопще я бегло взглянул на проблему защиты и ужаснулся ... Слова что мол взломать можно все что
угодно похоже являются правдой весь вопрос только во времени. А чтоб
сделать устойчивую защиту нужно быть хорошим точнее даже очень хорошим
кракером , но это конешно мое субъективное мнения. Кстате на сайте есть книга Криса Касперски посмотри. Правда чтоб все понять нужно убить млин столько времени . Вобщем я так бегло просмотрел ничего толком не понял кроме того что помимо кракеров хорошую защиту могут написать и вирусологи :)

На http://www.delphikingdom.com/  я как-то скачал chm там помимо всякой беребурды есть цикл статей о защите там можно много подчерпнуть.Если не найдешь где этот chm качается попробуй через поиск ("Защита") у них на сайте.

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


 
YurikGL ©   (2006-09-17 21:50) [6]

На каждый pack есть свой unPack
Так что усилия по защите должны быть сопоставимы с ценой программы


 
oxffff ©   (2006-09-17 21:51) [7]

Посмотри также для кругозора

http://www.wasm.ru/article.php?article=debugreg


 
oxffff ©   (2006-09-17 21:55) [8]

Да и вообще все на http://www.wasm.ru/publist.php


 
Юрий Зотов ©   (2006-09-17 22:07) [9]

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

Такая программа уже написана?


 
oxffff ©   (2006-09-17 22:32) [10]

Сделай crackme и выложи.
То что сломают можно не сомневаться.


 
oxffff ©   (2006-09-17 22:35) [11]

По себе знаю,
что неудобства взлома представляют программы
основанные на байт коде.


 
SPACE!!   (2006-09-18 00:51) [12]


> основанные на байт коде

Можно чуть теории ... ?


 
DiX ©   (2006-09-18 18:20) [13]


> чтобы хоть один серьезный хакер взялся за ее взлом

Я не претендую на такую защиту, чтобы ее не взломал хороший хакер/крекер, мне нужно, чтобы люди (типа установил SoftICE, прочитал Help, а сейчас посмотрю как эта программа работает) не смогли отследить действия программы.
P.S. А взломать и правда можно все


 
dreamse   (2006-09-18 18:21) [14]

> DiX ©   (17.09.06 18:27)

Пойми что защиты не существует :) Если програма стоит того чтоб её взломали то её взломают ! Если не стоит то и никто не будет ломать.

Я потратил неделю на встраивание всякого рода защиты в программу ( софт для ведения клубного бизнеса )  Шифрование , проверка на отладчики и пр.

В итоге взломали дня за 2 чтоли , даже написали генератор SN :)
Лучший способ от взлома это не давать программу, просто продавать , показывать скрины и может быть ОЧЕНЬ урезанные демки показывать , вообще без кода


 
oxffff ©   (2006-09-18 19:18) [15]


> > чтобы хоть один серьезный хакер взялся за ее взлом
>
> Я не претендую на такую защиту, чтобы ее не взломал хороший
> хакер/крекер, мне нужно, чтобы люди (типа установил SoftICE,
>  прочитал Help, а сейчас посмотрю как эта программа работает)
> не смогли отследить действия программы.
> P.S. А взломать и правда можно все


Так если ты даже поставишь проверку на отладчик.
То обойти это тоже просто. jz на jmp.


 
oxffff ©   (2006-09-18 19:21) [16]

Ты можешь даже проверять контрольную сумму кода.
Но тоже это все обходится. В самом простом случае аналогично
jz на jmp.


 
Eraser ©   (2006-09-18 19:25) [17]

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

+ на первых парАх, наличие кряка серьезно увеличивает популярность продукта.

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


 
DiX ©   (2006-09-18 19:31) [18]

Для меня важно, чтобы тот кто ламает программу не понял как она работает (ее работа связана с деньгами), а взломает он код для программы или нет это уже не так важно.


 
oxffff ©   (2006-09-18 19:33) [19]


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


Этого не достаточно.
Можно придумать супер алгоритм. Но во многих случаях

call проверка на рег (cупер алгоритм)
test eax,eax
jz Registered
Nonregistered:

Registered:

Ломается элементарно. jz на jmp


 
oxffff ©   (2006-09-18 19:35) [20]

Или даже XOR EAX,EAX


 
Eraser ©   (2006-09-18 19:35) [21]

> [18] DiX ©   (18.09.06 19:31)

тогда нужно использовать какое-нибудь готовое решение типа ASProtect, EXECryptor"a и т.п., только их тоже вскрывают время от веремени, а когда код расшифрован, то через DeDe все можно посмотреть.


 
Eraser ©   (2006-09-18 19:36) [22]

> [19] oxffff ©   (18.09.06 19:33)

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


 
Eraser ©   (2006-09-18 19:37) [23]

> [18] DiX ©   (18.09.06 19:31)


> чтобы тот кто ламает программу не понял как она работает

а что полохово если узнает, думаю никаких "ноу-хау" в бухгалтеркой программе нету, чтобы скрывать реализацию.


 
DiX ©   (2006-09-18 19:42) [24]


> сделаем следующее:
>


       mov     ecx,fs:[20h]
       jecxz   not_being_debugger
       [...]

<--- делайте, что хотите, нас отлаживают :)


>
> Потому, если FS:[20h] равен нулю, нас не отлаживают. Наслаждайтесь
> этим маленьким и простым методом для обнаружения отладчиков!


Как из этого кода сделать функцию по аналогии с ответом 1, чтобы возвращала True если есть отладчик и False в противном случае?


 
DiX ©   (2006-09-18 19:47) [25]


> И наконец, чудесный трюк, которого вы ждали... Универсальный
> способ найти SoftICE и Win9x и в WinNT! Это очень просто,
>  100% основанно на API и без всяких "грязных" трюков, которые
> не идут на пользу совместимости. И ответ находится не так
> далеко, как вы думаете... ключ заключается в API, который
> вы уже использовали раньше: CreateFile. Да, именно эта функция.
> .. Разве это не прекрасно? Ладно, мы можем попытаться открыть
> следующее:


      + SoftICE для Win9x : "\\.\SICE"
       + SoftICE для WinNT : "\\.\NTICE"



> Если функция возвращает нам что-нибудь, отличное от -1 (INVALID_HANDLE_VALUE),
>  SoftICE запущен! Далее следует демонстрационная программа:
>


;---[ CUT HERE ]-------------------------------------------------------------

       .586p
       .model  flat

extrn   CreateFileA:PROC
extrn   CloseHandle:PROC
extrn   MessageBoxA:PROC
extrn   ExitProcess:PROC

       .data

szTitle         db      "SoftICE detection",0

szMessage       db      "SoftICE for Win9x : "
answ1           db      "not found!",10
               db      "SoftICE for WinNT : "
answ2           db      "not found!",10
               db      "(c) 1999 Billy Belcebu/iKX",0

nfnd            db      "found!    ",10

SICE9X          db      "\\.\SICE",0
SICENT          db      "\\.\NTICE",0

       .code

DetectSoftICE:
       push    00000000h                       ; Проверяем наличии
       push    00000080h                       ; SoftICE для среды Win9x
       push    00000003h
       push    00000000h
       push    00000001h
       push    0C0000000h
       push    offset SICE9X
       call    CreateFileA

       inc     eax
       jz      NoSICE9X
       dec     eax

       push    eax                             ; Закрываем открытый файл
       call    CloseHandle

       lea     edi,answ1                       ; SoftICE найден!
       call    PutFound
NoSICE9X:
       push    00000000h                       ; А теперь пытаемся открыть
       push    00000080h                       ; SoftICE для WinNT...
       push    00000003h
       push    00000000h
       push    00000001h
       push    0C0000000h
       push    offset SICENT
       call    CreateFileA

       inc     eax
       jz      NoSICENT
       dec     eax

       push    eax                             ; Закрываем хэндл файла
       call    CloseHandle

       lea     edi,answ2                       ; SoftICE для WinNT найден!
       call    PutFound
NoSICENT:
       push    00h                             ; Показываем MessageBox с
       push    offset szTitle                  ; результатами
       push    offset szMessage
       push    00h
       call    MessageBoxA

       push    00h                             ; Завершаем программу
       call    ExitProcess

PutFound:
       mov     ecx,0Bh                         ; Меняем "not found" на
       lea     esi,nfnd                        ; "found"; адрес, где нужно
       rep     movsb                           ; изменить, находится в EDI
       ret

end     DetectSoftICE

;---[ CUT HERE ]-------------------------------------------------------------



> Это действительно работает, поверьте мне :). Тот же метод
> можно применить к "враждебным" драйверам, просто проведите
> небольшое исследование.


И подскажите с функцией для этого кода, ну не знаю я Assembler.


 
oxffff ©   (2006-09-18 20:01) [26]

function Check:boolean;
begin
asm
MOV ebx,fs:[20h];
test ebx,ebx;
jnz @OO;
@NONE: mov result,0;
     jmp @exit;
@OO: mov result,1;
@EXIT:
end;


 
oxffff ©   (2006-09-18 20:09) [27]

Function check2:boolean;
begin
a:=CreateFileA("\\.\NTICE",$0C0000000,1,0,3,$80,0);
if a<>INVALID_HANDLE_VALUE then result:=TRUE
  else
   begin
   CloseHandle(a);
   result:=FALSE;
   end;
end;


 
oxffff ©   (2006-09-18 20:11) [28]

a:THANDLE;


 
oxffff ©   (2006-09-18 20:16) [29]

Сорри перепутал

Function check2:boolean;
var a:THANDLE;
begin
a:=CreateFileA("\\.\NTICE",$0C0000000,1,0,3,$80,0);
if a<>INVALID_HANDLE_VALUE then
  begin
  CloseHandle(a);
  result:=TRUE;
  end
 else
 result:=FALSE;
end;


 
DiX ©   (2006-09-18 20:20) [30]

Че то не работает
function Check:boolean;
begin
asm
MOV ebx,fs:[20h];
test ebx,ebx;
jnz @OO;
@NONE: mov result,0;
    jmp @exit;
@OO: mov result,1;
@EXIT:
end;
end;


условие: если Check=true пишет, что отладчик постоянно присутствует (отладчик не запущен)
условие: если Check=false пишет что программа обратилась к недопустимому адресу и будет закрыта


 
oxffff ©   (2006-09-18 20:29) [31]

Этот код проверяет значение по fs:[20h];
Если 0, то result:=0. Иначе result:=1;

У меня ошибок не вылетает


 
DiX ©   (2006-09-18 20:42) [32]

странно


 
oxffff ©   (2006-09-18 20:45) [33]

Нашел
http://www.wasm.ru/comment.php?artcode=1017001


 
oxffff ©   (2006-09-18 20:47) [34]

fs:[20h] рулит только в Win9x.


 
DiX ©   (2006-09-18 20:49) [35]

function Check:boolean;
begin
asm
MOV ebx,fs:[20h];
test ebx,ebx;
jnz @OO;
@NONE: mov result,0;
   jmp @exit;
@OO: mov result,1;
@EXIT:
end;
end;

Надо сюда вставить проверку винты если 9x то все ок, иначе False;


 
oxffff ©   (2006-09-18 21:32) [36]

VerifyVersionInfo


 
oxffff ©   (2006-09-18 21:46) [37]

fs:[0] - структура TEB


 
DiX ©   (2006-09-19 08:30) [38]

а способа определения отладчиков для winNT никто не знает?


 
Сергей М. ©   (2006-09-19 09:08) [39]


> DiX ©   (19.09.06 08:30) [38]


The IsDebuggerPresent function indicates whether the calling process is running under the context of a debugger.
This function is exported from KERNEL32.DLL.

BOOL IsDebuggerPresent(VOID)

Parameters

This function has no parameters.

Return Value

If the current process is running in the context of a debugger, the return value is nonzero.
If the current process is not running in the context of a debugger, the return value is zero.


 
Barloggg   (2006-09-19 09:30) [40]

а как насчет многоуровневой обороны?

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

интересно... хоть кто-нибудь из здесь присутствующих пользовался приемом "безумного кода"?



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.064 c
15-1158779176
ferr
2006-09-20 23:06
2006.10.15
Сижу, смотрю методичку...


2-1159430919
vodvorezlaya
2006-09-28 12:08
2006.10.15
Помогите составить обработчик для ListBox


3-1155811000
Lilia
2006-08-17 14:36
2006.10.15
Просмотр данных таблицы через DBCombobox


15-1158937103
GanibalLector
2006-09-22 18:58
2006.10.15
Insert startup disk i floppy drive and press F2 to run setup.


2-1159491560
Maveric AM10m
2006-09-29 04:59
2006.10.15
IRC клиент