Здравствуйте. Есть программа, назовем её скажем text.exe, которая вызывает функцию testfunc, в dll файле lib.dll и передает в нее параметр teststr в виде const char* Вопрос, как мне из другой программы получить значение teststr, а так же результат выполнения testfunc ? я конечно без проблем могу сделать прокси библиотеки lib.dll и через нее работать с нужными мне данными, но возникает вопрос: как мне потом из фальшивой lib.dll, передать нужные мне данные в программу injekt.exe ?
всё что угодно придумать можно, начиная от пайпов и мейлслотов и заканчивая передачей по TCP. НО самое лучшей - другая прога твоя должна подгрузить этуже библиотеку. Но у библиотеки должны быть следующие фишка - секция данных в которую ты закинешь эту строку, она должна иметь атрибут - расшаренная тогда данные будут общими между процессами. А вообще то что ты описал - это вообще както сильно обзорно, опиши что конкретно надо? Если ты внедняешь фальшиую DLL чтобы хукать чтото, и передавать данные в оригинальную прогу, то тут можно и сообщения окну делать, но лучше через Pipe
slesh, я пока решил обойтись ReadProcessMemory. Кстати. не подскажешь, что не так в коде WriteMemoryData ? PHP: bool ReadMemoryData( HANDLE pProcess, DWORD pAddres, void *buff, int bufflen ) { DWORD numRead; BOOL res = ReadProcessMemory(pProcess, (LPCVOID)pAddres, buff, bufflen, &numRead); if (res && (numRead == bufflen)) { return true; } return false; } bool WriteMemoryData( HANDLE pProcess, DWORD pAddres, void *buff, int bufflen ) { DWORD numRead; BOOL res = WriteProcessMemory(pProcess, (LPCVOID *)pAddres, buff, bufflen, &numRead); if (res && (numRead == bufflen)) { return true; } return false; } int main(int argc, char* argv[]) { HANDLE pProcess = OpenExeProcess("explorer.exe"); if(!pProcess) { return 0; } char test[100]; if( ReadMemoryData( pProcess, 0x00010000, test, sizeof(test) ) ) { LogPrintf( "Very Good\n" ); BinPrintf( test, sizeof(test) ); } return 0; } с ReadMemoryData, все отлично, а вот WriteMemoryData почему-то не срабатывает.
Да всё что угодно может быть, нафига разводить такой быдлокод? Откоды та знаешь что этот адерс присутствует в памяти и что к нему есть доступ? К тому же запись в чёжое адресное пространство будет антивирями принято в штыки, даже если легальная прога. так что забудь про это. Если тебе уж так понравился такой метод, то используй именнованный файл маппинг, это будет работать проще, быстрее и надежнее. hFileMapping = CreateFileMapping (******, Имя_какоенить) mem = MapViewOfFile(hFileMapping *******) mem - адрес памяти с которым ты работаешь как с обычной выделенной память. Но будет общая для всех процессов, которые сделали данные действия UnMapViewOfFile(mem *******) CloseHandle(hFileMapping) К томуже ты делал OpenExeProcess - откуда людям знать что ты там навоял. Может быть открываешь без прав на запись. Да и слишком много гемора тогда, а именно: 1) открыть чужой процесс можно тока с правами админа так как потребуются права отладчика, котоыре тока под админом можно получить 2) открыть процессы своего пользователя - можно и под гостем , но без полный прав доступа, опятьже из-за отстуствия отладочных привелений.