Текущий архив: 2008.11.09;
Скачать: CL | DM;
Вниз
Какой функции не хватает? Найти похожие ветки
← →
@!!ex © (2008-09-14 21:40) [0]Есть ехешка, она загружается dll.
в dll не хватает какой-то функции.
Ехешка падает. Как узнать, какой функции собственно не хватает?
← →
Rouse_ © (2008-09-14 22:03) [1]Поставь себе вот это и посмотри что имено импортирует экзешник из этой библиотеки: http://rouse.drkb.ru/winapi.php#propsheet
← →
@!!ex © (2008-09-14 22:21) [2]> [1] Rouse_ © (14.09.08 22:03)
> http://rouse.drkb.ru/winapi.php#propsheet
Спасибо!
← →
Городской Шаман (2008-09-14 22:22) [3]
> Rouse_ © (14.09.08 22:03) [1]
А если загрузка динамическая? Тогда только хук на API функцию GetProcAddress
← →
@!!ex © (2008-09-14 22:33) [4]> [1] Rouse_ © (14.09.08 22:03)
Чего то не понял, как посмотреть список функций?
> [3] Городской Шаман (14.09.08 22:22)
Вроде винда ругается, если нет функции которую пытаются через GetProcAddr получить.
← →
@!!ex © (2008-09-14 22:52) [5]Ааа. В свойства добавляется... не сразу я это понял...
← →
wicked © (2008-09-14 23:24) [6]
> > [3] Городской Шаман (14.09.08 22:22)
>
> Вроде винда ругается, если нет функции которую пытаются
> через GetProcAddr получить.
не ругается, а возвращает ошибку
а ругаться в этом случае должно уже само приложение
← →
@!!ex © (2008-09-15 14:35) [7]Мда.. не ругается...
как поставить хук на GetProcAddr?
← →
Rouse_ © (2008-09-15 14:51) [8]
> А если загрузка динамическая? Тогда только хук на API функцию
> GetProcAddress
Зачем? Пишем махонький лоадер и сплайсим точку входа в исходную процедуру.
← →
@!!ex © (2008-09-15 14:55) [9]> [8] Rouse_ © (15.09.08 14:51)
Эм... о сплайсинге я только слышал...
где об этом почитать мона?
← →
KilkennyCat © (2008-09-15 14:56) [10]Сплайсинг — созревание информационной РНК (мРНК) у эукариот, в процессе которого путём биохимических реакций с участием РНК и белков из иРНК удаляются участки, не кодирующие белок (интроны) и соединяются друг с другом экзоны. Таким образом предшественник иРНК превращается в зрелую иРНК, с которой считываются (транслируются) белки клетки.
← →
Vlad Oshin © (2008-09-15 15:08) [11]ApiHookTools.pas , поищи такой модуль, в инете есть и примеры
← →
@!!ex © (2008-09-15 15:11) [12]> [10] KilkennyCat © (15.09.08 14:56)
Очень познавательно! Спасибо. :))
> [11] Vlad Oshin © (15.09.08 15:08)
Гугль ничего не знает...
← →
Vlad Oshin © (2008-09-15 15:15) [13]216 кб, с примером. Могу выслать
← →
@!!ex © (2008-09-15 15:16) [14]нашел:
http://www.dotfix.net/module.php?module=@6e786b366a6a70736a6a5f6d725e6c646268676228
← →
@!!ex © (2008-09-15 15:19) [15]> [13] Vlad Oshin © (15.09.08 15:15)
Высылай! А то ссылка битая.
← →
Vlad Oshin © (2008-09-15 15:19) [16]также тут можно глянуть,
http://www.codenet.ru/progr/delphi/stat/api-hook.php
← →
Vlad Oshin © (2008-09-15 15:20) [17]там кстати и ссылка нормальная и оно вроде, тот самый файл, т.е.
← →
@!!ex © (2008-09-15 17:16) [18]Сделал как в примере:
library LogerDLL;
uses
Windows,
ExtendedAPIFunctions,
apihooktools;
{$R *.res}
const
MutexName="__API_HOOK";
var
SH:HHOOK;
SystemFunctionBridge:TFunctionRestoreData;
function NewGetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): FARPROC; stdcall;
var
Res:PChar;
begin
UnHookCodeHook(@SystemFunctionBridge);
MessageBox(0,lpProcName,"",0);
Result:=GetProcAddress(hModule,lpProcName);
SetCodeHook(SystemFunctionBridge.Address,@NewGetProcAddress,@SystemFunctionBridg e);
end;
//обработчик сообщений
function MsgProc(code:DWORD;wParam,lparam:DWORD):DWORD;stdcall;
begin
CallNextHookEx(SH,code,wParam,lparam);
end;
//внедрение нашей DLL во все GUI процессы
procedure SetWindowsHook(e:Boolean); stdcall;
var
M:THandle;
begin
if e then
begin
m:=CreateMutex(0,false,MutexName);
if m=0 then exit;
SH:=SetWindowsHookEx(WH_GETMESSAGE,@MsgProc,HInstance,0);
end
else
UnhookWindowsHookEx(sh);
end;
//главный библиотечный обработчик
procedure DLLEntryPoint(dwReason:DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
// StopProcess(GetCurrentProcessId);
SetWindowsHook(true);
SetProcedureHook(GetModuleHandle("ntdll.dll"),"GetProcAddress",@NewGetProcAddres s,@SystemFunctionBridge);
// ResumeProcess(GetCurrentProcessId);
end;
DLL_PROCESS_DETACH:
begin
// StopProcess(GetCurrentProcessId);
SetWindowsHook(false);
UnHookCodeHook(@SystemFunctionBridge);
//ResumeProcess(GetCurrentProcessId);
end;
end;
end;
begin
DllProc:= @DLLEntryPoint; //устанавливаеем библиотечный обработчик
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
MessageBox не появляется никогда...
← →
@!!ex © (2008-09-15 17:25) [19]LdrGetProcedureAddress... правильный адрес...
это было красиво...
Я не ожидал, что система ТАК часто вызывает эфут функцию...
← →
@!!ex © (2008-09-15 17:48) [20]Нет. Всетаки надо заменять GetProcAddress. только не в NtDll, а в kernel32.
Все заработало! Спасибо!
Страницы: 1 вся ветка
Текущий архив: 2008.11.09;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.01 c