![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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% ее функционал.
Вот напишешь ты программу для управления хирургическим манипулятором, вот защитишь ты ее МегаЧудо протектором, вот даст твоя программа сбой во время операции, тебе твою прогу и этот Мега протектор вместе с манипулятором затолкают в ... (как в анекдоте про лесорубов и японскую бензопилу) Да и тырить ее никто не будет даже даром)) без манипулятора и знаний медицины она не нужна будет. Последний раз редактировалось M.A.D.M.A.N., 10.03.2011 в 21:24. |
|
#57
|
||||
|
||||
|
Цитата:
![]() ![]() |