Есть прога - запакована неизветно чем (сигн. 6A 00 FF 15), Распаковывать не надо. Надо в ней подменить один Dialog, а при замене секции .rsrc криптор ругается, де "образ поврежден или заражен и тд.". Использую FindWindow, FindWindowEx, SendMessage или SetWindowText\GetWindowText, но моя прога должна постоянно висеть в памяти и ожидать наличие нужного окна, а там уже менять его. А хотелось бы сделать загрузчик, который после загрузки подменить этот ресурс и все. Как это сделат или какие WinAPI делают это (EnumResourceNames, FindResource, LoadResource...)?
1) проникаем в процесс см. статью ms-rem дальше два пути 2.1) findResource, lockResource, VirtualProtect и потом пишем свой ресурс на место старого - проверено работает но если станый ресурс >= чем новый 2.2) хучим функции findresource, loadresoure? в общем те функции которые использует процесс и отдаём хендлы на свои ресурсы дерзай
я на паскале писал Код (Text): var source:TResourceStream; dest:TResourceStream; var oldprotect:cardinal; begin Dest:=TResourceStream.Create(HInstance,'VIDEOS_HTMl','#23'); if not VirtualProtect(Dest.Memory,Dest.Size,PAGE_READWRITE,@oldprotect)then if IsBadWritePtr(Dest.memory,Dest.Size) then raise exception.Create('badwriteptr'); ZeroMemory(Dest.memory,Dest.size); source:=TResourceStream.Create(HInstance,'Videoindex_htm','#23'); MoveMemory(dest.memory,source.Memory,source.Size); if Not virtualProtect(Dest.Memory,Dest.Size,oldprotect,@oldprotect)then raise exception.Create('failed to restore protection'); в TResourceStream.Create делается findResource, lockResource
Big Thanx to staier! Все разобрался, работает, причем даже когда новый ресурс > старого! Теперь вот думаю, может ли это как-то повлиять на работу программы, погонял пока проблемс нет. Наверно все-таки по 2.2) хучим функции findresource, loadresoure? в общем те функции которые использует процесс и отдаём хендлы на свои ресурсы придется делать, если кто-нибудь делал подобное подскажите последовательность действий(функций), а там я сам разберусь.
тебе надо выяснить какую из функций использует target findresourcea findresourcew findresourceExA findresourceExW выяснить это можно с помощью отладчика и/или дизассемблера поставить на неё хук в хуке проверить , не ищется ли нужный тебе ресурс если нет то вызвать оригинальную функцию и вернуть управление target если это тот ресурс , который тебе нужен , ты ищеш свой ресурс и выдаёшь HRSRC на него всё... в xpsp2 например , все эти функции сводятся к вызову LdrFindResource_U - недокументированной функции можно ставить хук на неё, но придётся разбираться что там за параметры это можно сделать по исходникам wine