Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Ошибка записи при попытке установки хука   Найти похожие ветки 

 
MALAN ©   (2009-03-01 11:41) [0]

Попробовал я перехватывать API функции как расписано в этой статье: http://www.codenet.ru/progr/delphi/stat/api-hook.php?rss=1
но при попытке установить хук, в модуле APIHookTools в функции SetCodeHook при выполнении операций заполнения структуры   RestoreDATA^  начинают вылетать сообщения об ошибках записи.
Стурктура RestroreDATA^:
type
 PFunctionRestoreData = ^ TFunctionRestoreData;
 TFunctionRestoreData = packed record
   Address:Pointer;
   val1:Byte;
   val2:DWORD;
  end;

Ошибки появляются при выполнении этих операторов:
...
 RestoreDATA^.val1:= Byte(ProcAddress^);
 RestoreDATA^.val2:= DWORD(Pointer(DWORD(ProcAddress)+1)^);
 RestoreDATA^.Address:=ProcAddress;
....

Кто-нибудь знает как это лечится?


 
Eraser ©   (2009-03-01 14:54) [1]

> [0] MALAN ©   (01.03.09 11:41)

уверен, что память выделена под структуру и выделена правильно?


 
MALAN ©   (2009-03-01 15:27) [2]

нет, не уверен, а как надо правильно выделять память(кстати, RestoreDATA^ указывает на перехватываемую функцию)? Просто в статье про это ни слова.


 
Игорь Шевченко ©   (2009-03-01 16:39) [3]

http://rsdn.ru/article/baseserv/apispy.xml
http://rsdn.ru/article/baseserv/apicallsintercepting.xml
http://rsdn.ru/article/baseserv/IntercetionAPI.xml


 
Eraser ©   (2009-03-01 16:44) [4]

вот еще http://www.wasm.ru/author.php?author=Ms-Rem
там все на Делфи.


 
MALAN ©   (2009-03-03 22:24) [5]

Eraser ©   (01.03.09 14:54) [1]

>уверен, что память выделена под структуру и выделена правильно?

Спасибо, ты был прав не хватало простой команды New(RestDATA);

ну DLL"ку реализующую перехват вроде написал осталось внедрить в чужой процесс и тут о5 возникла проблема. Внедрение происходит при помощи функции:

function LoadLibrary_Ex(ProcessID:DWORD;LibName:PChar):boolean;
var
pLL,pDLLPath:Pointer;
hProcess,hThr:THandle;
LibPathLen,_WR,ThrID:DWORD;
begin
Result:=False;
LibPathLen:=Length(string(LibName));
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,ProcessID);
if hProcess=0 then exit;
pDLLPath:=VirtualAllocEx(hProcess,0,LibPathLen+1,MEM_COMMIT,PAGE_READWRITE);
if DWORD(pDLLPath)=0 then exit;
pLL:=GetProcAddress(GetModuleHandle(kernel32),"LoadLibraryA");
WriteProcessMemory(hProcess,pDLLPath,LibName,LibPathLen+1,_WR);
hThr:=CreateRemoteThread(hProcess,0,0,pLL,pDLLPath,0,ThrID);
if hThr=0 then exit;
Result:=CloseHandle(hProcess);
end;

При попытке внедрения в чужой процесс функция работает без ошибок, но эффекта нет. Функция работает как надо только если внедряет библиотеку в свой собственный процесс.
Поясню: допустим есть два процесса pr1.exe, pr2.exe и библиотека lib1.dll которая при внедрении должна выдать сообщение, типа, "Hello World".
если процесс pr1.exe попытается внедрить lib1.dll в pr2.exe, то ничего не происходит, если же он пытается внедрить его в самого себя, то библиотека успешно грузится и выдаёт сообщение "Hello World".
Вообщем что я упускаю и как это исправить?


 
MALAN ©   (2009-03-03 23:42) [6]

Прошу прощения, вопрос снимается, путь к библиотеке не был указан.


 
Eraser ©   (2009-03-04 00:36) [7]

> [5] MALAN ©   (03.03.09 22:24)

все таки советую не заниматься такими вещицами как хуки, программируя наугад. тут услышал, там сокпипастил.
не плохо бы разобраться во всем досконально. в этом поможет дядя Рихтер. если нужны примеры на делфи, то читай Тейксейру с Пачеко "Руководство разработчика Делфи".



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.063 c
2-1275776869
akosh12345
2010-06-06 02:27
2010.08.27
Динамическая память


2-1273664604
Дмитро
2010-05-12 15:43
2010.08.27
delphi


4-1237722427
Delion
2009-03-22 14:47
2010.08.27
Comm Port под Vista AMDx64


2-1268142361
Irisss
2010-03-09 16:46
2010.08.27
Как сервер fireBird отключить


2-1267336730
New-zzzz
2010-02-28 08:58
2010.08.27
Как разнести записи в отчёте в 2 столбца ListView?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский