а как это выглядит? небольшой патчик, типа применил к ехе целевой программы и она всегда после этого работает как надо, или эта программа висит все время в запущенном состоянии и как только целевой процесс полез за нужной функцией - делает свое черное дело.
(я к тому, что версий хрома миллион и выходят каждый раз новые - как можно предусмотреть кросплатформенность, или точнее кроссверсионность )
лично у меня совсем маленький сдвиг есть насчет goodvin1709 не знаю
мне дали код, где в целевой процесс вшиваться моя дополнительная длл, и уже из нее происходит перехват целевой функции. и я испытывал на своем проекте, где использовалась та моя функция и я точно знаю что она там есть - однако процесс хука работает через раз (сразу вспомнились запуски пиратской 1С бухгалтерии почему-то ), то нормально запустит и перехват я вижу, то сразу при запуске целевая вылетает с критом. чем в теории может быть вызвано такое нестабильное "хучение" процесса?
хром же и вовсе отказался хукаться... хотя может и не отказался, а просто не использует ту мою предполагаемую функцию, из-за которой сыр бор... нужен продвинутый апи монитор, который бы показывал крипто апи тоже! где взять такое? чтобы выяснить на 100% каким образом хром получает список названий сертификатов.
function InitThread(lpParameter: pointer):dword;// stdcall;
begin
//подождать engine.dll, и начать внедрение своего кода
repeat
Sleep(100);
until (GetModuleHandleA('engine.dll')<>0);
buf := DWORD(@UNetworkHandlerInit_hook);
//тут магия, хардкод и шанс попортить регистры.
initUH_orig:=Engine+$003B2D96;
comm :=$e9;
// Обычно страницы в этой области недоступны для записи
// поэтому принудительно разрешаем запись
VirtualProtect(ptr(Engine+$003B2D90),5,PAGE_READWRITE, @op);
//вычисляем смещение которое запишем в джамп
offset := buf - (Engine+$003B2D90 + 5);
// Пишем новый адрес
// нужно писать СМЕЩЕНИЕ!
WriteProcessMemory(GetCurrentProcess(), ptr(Engine+$003B2D90),@comm,1,written);
WriteProcessMemory(GetCurrentProcess(), ptr(Engine+$003B2D90+$01),@offset,4,written);
end;
"DLL Main"
Код:
procedure DLLEntryPoint(dwReason: DWORD); export;
var
ThreadId:dword;
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
CreateThread(nil,0,@ InitThread,nil,0,ThreadId);
end;
DLL_PROCESS_DETACH:
begin
end;
end
end;
все это "хардкод", "дурной тон" и "так нельзя"
и не забываем все действия десять раз перепроверить в отладчике.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Последний раз редактировалось Elecktron, 08.04.2015 в 01:00.
P.S: Если html_this != NULL, то окно можно открыть хоть на экране ввода логина и пароля.
Хукается вроде успешно, НО где достать пойнтер This, чтобы вызывать эту функцию без предварительного получения This?
Добавлено через 7 минут
Да и вообще очень интересует как вызвать (__thiscall)OnNpcHtmlMessage, да или вообще что угодно из engine.dll !!! Дайте пример или пните в каком направлении капать))
Последний раз редактировалось user713, 09.04.2015 в 11:44.
Причина: Добавлено сообщение