Шифрование имени функции 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 прячуться от АнтиВирей? В какую строну копать?
mr.toorook@jabber.ru
|
|
| |
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, вот я как то объяснял http://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, толк есть. поверь. особенно эффективно используется при написании базонезависимого кода. Спс тебе... я видать не доглядел. несколько часов форум ковырял... спс. Уже есть мысли по доработке))) Толк есть однозначно.
mr.toorook@jabber.ru
|
|
| |
Волк-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
|
|
| |