|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#46
|
|||
|
|||
Цитата:
Хороший способ защиты, но как находить в системе отладочники? Я предлагаю сделать так чтоб программа автоматически запускалась при запуске виндовс и каждые 55 мс она удаляла отладчики и желательно чтоб программа не была видна ни в панели задач, ни в трее ни в списке процессов. Как это в все можно сделать? |
#47
|
|||
|
|||
Цитата:
Я, сначала хотел использовать XOR шифр, один ключ вшит в приложение, второй выдает сервер и периодически меняет. Так вот первый ключ можно узнать взломав программу, второй - запросив с сервера, он выдает ключ все, кто попросит, но в закодированном первым ключем виде. Не очень надежная система получается, вот и хотел посмотреть в сторону защиты от взлома. В сторону AES тоже смотрел да, большой + в том, что можно зашифровывать все с помощью открытого ключа и расшифровать будет очень сложно и сможет это только сервер, знающий закрытый ключ, но как серверу посылать сообщения клиентам? А их бы хотелось закодировать и скрыть от посторонних в первую очередь! Получается клиенты должны знать закрытый ключ!? Получается их можно взломать и посмотреть ключ!? Опять наводит на мысли об анти отладке)) |
#48
|
|||
|
|||
Цитата:
Что-то удалять- по моему это через чур, но, найдя в память отладочный процесс- завершить свою работу и наругаться на пользователя- это можно) Посмотреть програмно диспетчер задачь и все запущенные приложения- не сложно, узнать названия отладочного ПО с помощью гугла или поставив на виртуальную машину тоже не проблема. |
#49
|
||||
|
||||
Цитата:
Меня греют ваши плюсы к моей репутации... |
#50
|
|||
|
|||
Цитата:
|
#51
|
||||
|
||||
Код:
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
|
|||
|
|||
Цитата:
http://www.delphisources.ru/forum/sh...9&postcount=47 С помощью отладчика можно добраться до закрытых в программе ключей шифрования, тогда толку от них становится 0. |
#53
|
|||
|
|||
Цитата:
Не соглашусь, с грамотным подходом можно и XOR-ом довольно неплохо зашифровать. Конечно при условии длинных ключей и конечно не банальным XOR а комбинацией либо нескольких хоров, либо денамически изменяемым ключем хора. Основой расшифровки ХОR алгоритма является словарь!=) Также легко найти ключ заранее зная отправленное сообщение. А если зашифровать XOR-ом не текст? Например MD5 ? Кто сможет найти хешь, зашифрованный банальным хором не зная ключа? |
#54
|
|||
|
|||
Шифрование ассиметричным алгоритмом?
При отсутствии ключа просто нечего взламывать, а подбирать приватный ключ по известному паблику просто не хватит ресурсов (при длинных ключах, конечно). |
#55
|
|||
|
|||
Цитата:
Это конечно хорошо, но еще раз объясню свою мысль: Сообщение зашифровано публичным ключем асимметричного алгоритма. Сообщение отправлено, чтобы его расшифровать нужно что? Правильно, приватный ключ. Сервер отправляет сообщение клиенту. Значит у клиента есть приватный ключ, чтобы его расшифровать. Значит клиентскую программу можно взломать и вытащить из нее приватные ключи. Но мы как-то ушли в сторону от темы защиты. Криптография- это конечно интересно, но тема посещена другому. |
#56
|
||||
|
||||
У меня раньше тоже был батхёрт по этой теме, ну и что в итоге, защитить то защитил, а прогой кроме 3-х человек никто не пользуется, ито исполдьзуют на 15% ее функционал.
Вот напишешь ты программу для управления хирургическим манипулятором, вот защитишь ты ее МегаЧудо протектором, вот даст твоя программа сбой во время операции, тебе твою прогу и этот Мега протектор вместе с манипулятором затолкают в ... (как в анекдоте про лесорубов и японскую бензопилу) Да и тырить ее никто не будет даже даром)) без манипулятора и знаний медицины она не нужна будет. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 10.03.2011 в 21:24. |
#57
|
||||
|
||||
Цитата:
Итерация от человека. Рекурсия — от Бога.
|