Главная страница
    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.57 MB
Время: 0.043 c
15-1158669715
VitV
2006-09-19 16:41
2006.10.15
Удалил Дэлфи через Шифт+Дел.


15-1158845862
TUser
2006-09-21 17:37
2006.10.15
С днем рождения, 70 лет


2-1158566852
vodvorezlaya
2006-09-18 12:07
2006.10.15
Как опросить не существующие контролы?


2-1159206788
dreamse
2006-09-25 21:53
2006.10.15
TBlobStream


15-1158816466
Ega23
2006-09-21 09:27
2006.10.15
С Днём рождения! 21 сентября





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский