Шифрование имени функции Delphi
|
toorook
|
Дата: Воскресенье, 26.10.2014, 07:59 | Сообщение # 1
|
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
|
Всем Hi! Итак, есть такой хук:
Код
k_OldKbhik := SetWindowsHookEx(WH_KEYBOARD, @KbHik, HInstance, 0);
Возможно ли SetWindowsHookEx зашифровать ксором, а при вызове расшифровывать обратно?
Например, как здесь, шифрование значения имени окна:
Код
FindWindow(nil, pchar(CodeS('аӇхЂГТӦЀӷ0ѫоЮҊЬ‘*et*6Mæ')));
В общем мне надо скрыть это от глаз АВ.
Еще видел в сети пример (не могу найти, вытаскивал его из кеша гугла.) - там чел на форуме, показывал исходник, где из функции вызывает функцию winapi с пошифрованым именем.
Хелп... 
Как вызовы WinApi прячуться от АнтиВирей? В какую строну копать?
[email protected]
|
|
|
|
|
Slash
|
Дата: Воскресенье, 26.10.2014, 10:44 | Сообщение # 2
|
Постоянный
Зарегистрирован: 20.12.2012
Группа: Пользователи
Сообщений: 161
Статус: Offline
|
Я в этом деле не мастер, но мне кажется в этом толку не будет, у почти каждого АВ есть эвристика, которая сразу эти дела остановит. |
|
|
|
|
Anton93
|
Дата: Воскресенье, 26.10.2014, 15:02 | Сообщение # 3
|
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
|
toorook, вот я как то объяснял https://delfcode.ru/forum/10-1148-8383-16-1388676469
но это очень примитивный метод. сейчас все намного сложнее вызывается, так как многое уже эмулируеся. для изучения сойдет. хотя для полного FUD есть очень много тонкостей вызова апи
ICQ: 41896
|
|
|
|
|
Anton93
|
Дата: Воскресенье, 26.10.2014, 15:04 | Сообщение # 4
|
Продвинутый
Зарегистрирован: 06.01.2010
Группа: Модераторы
Сообщений: 320
Статус: Offline
|
Slash, толк есть. поверь. особенно эффективно используется при написании базонезависимого кода.
ICQ: 41896
|
|
|
|
|
toorook
|
Дата: Воскресенье, 26.10.2014, 16:03 | Сообщение # 5
|
Был не раз
Зарегистрирован: 04.09.2014
Группа: Пользователи
Сообщений: 11
Статус: Offline
|
Цитата Anton93 ( )
Slash, толк есть. поверь. особенно эффективно используется при написании базонезависимого кода.
Спс тебе... я видать не доглядел. несколько часов форум ковырял... спс. Уже есть мысли по доработке))) Толк есть однозначно.
[email protected]
|
|
|
|
|
Волк-1024
|
Дата: Воскресенье, 26.10.2014, 16:38 | Сообщение # 6
|
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
|
Пригодится думаю:
Код
type
TByteArray = array of Byte;
procedure RC4(Data, Key: Pointer; DataSize: DWORD; KeySize: BYTE); overload;
var
Temp: BYTE;
Result: PBYTE;
X, Y, Z: DWORD;
RB: array[BYTE] of DWORD;
begin
if Assigned(Data) and (Assigned(Key)) and (KeySize>0) then
try
for X:=0 to 255 do
RB[X]:=X;
X:=0;
Y:=0;
Z:=0;
for X:=0 to 255 do
begin
Y:=(Y+RB[X]+(TByteArray(Key)[X mod KeySize])) mod 256;
Temp:=RB[X];
RB[X]:=RB[Y];
RB[Y]:=Temp;
end;
X:=0;
Y:=0;
Z:=0;
Result:=Data;
for X:=0 to (DataSize-1) do
begin
Y:=(Y+1) mod 256;
Z:=(Z+RB[Y]) mod 256;
Temp:=RB[Y];
RB[Y]:=RB[Z];
RB[Z]:=Temp;
Result^:=Result^ xor (RB[(RB[Y]+RB[Z]) mod 256]);
Inc(Result);
end;
except
end;
end;
function RC4(Str: string; Key: string): string; overload;
begin
Result:=Str;
RC4(@Result[1], @Key[1], (Length(Result)), (Length(Key)));
end;
Pascal, C\C++, Assembler, Python
|
|
|
|
|