SweetAss1337 Опубликовано 10 января, 2018 Поделиться Опубликовано 10 января, 2018 Реализовал в своем инжекторе такую фичу, как в CheatEngine. То есть моя длл инжектится моим же инжектором в процесс игры, после чего я вызываю из инжектора функции, объявленные в DllExport у моей библиотеки. Библиотека на c++. Проблема в том, что для того чтобы вызвать функцию в постороннем процессе, мне надо получить адрес этой функции через GetProcAddress, а для этого мне надо подгрузить библиотеку в процесс инжектора, что сильно мешает. Была идея загружать библиотеку, брать адрес функции и выгружать (всем костылям костыль) То есть делаю примерно так: try { IntPtr ExampleLib=LoadLibrary(@"C:/Users/Dmitry/Desktop/Hook/x64/Release/Example.dll"); //Загружаю библиотеку чтобы взять из нее "слепок" памяти,чтобы обратиться к этой же длл в чужом процессе IntPtr lpLLAddress = GetProcAddress(GetModuleHandle("Example.dll"), "Pass"); //Беру адрес из "слепка" IntPtr hndProc = OpenProcess((0x2 | 0x8 | 0x10 | 0x20 | 0x400), 1, Pid); //Открываю CreateRemoteThread(hndProc, (IntPtr)null, INTPTR_ZERO, lpLLAddress, (IntPtr)null, 0, (IntPtr)null); //Удаленный поток чтобы вызвать функцию по взятому адресу CloseHandle(hndProc); // FreeLibraryAndExitThread(ExampleLib,0x1); Если выгружаю библиотеку таким образом то происходит краш с AccessViolation. Но ели выгружаю библиотеку "саму из себя" то все нормально. } Адрес вроде как всегда статический но я не смог разобраться с типами и перевести его в нормальный вид чтобы по нему обратиться Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 10 января, 2018 Поделиться Опубликовано 10 января, 2018 (изменено) можно пропарсить пеб стороннего процесса, чтобы вытащить адрес функции твоей дллки, тогда не придется ее в свой процесс грузить Изменено 10 января, 2018 пользователем Dino Ссылка на комментарий Поделиться на другие сайты Поделиться
DaVilka Опубликовано 10 января, 2018 Поделиться Опубликовано 10 января, 2018 (изменено) Можно поднять межпроцессное взаимодействие, я поднимаю сокет, так как у меня много функций, но можно и пайп, и вызывать что угодно, когда угодно, сколько угодно, откуда угодно Если в длл одна мелкая функция, то и длл можно не подгружать, вписать в процессе в свободное место по статическому смещению свою функцию, и через тот же удаленный поток вызвать функцию уже по известному адресу Изменено 10 января, 2018 пользователем DaVilka Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 12 января, 2018 Поделиться Опубликовано 12 января, 2018 В 10.01.2018 в 07:27, SweetAss1337 сказал: Адрес вроде как всегда статический нет над K32EnumProcessModules тд тп и +/- базу в таком методе В 10.01.2018 в 07:27, SweetAss1337 сказал: Если выгружаю библиотеку таким образом то происходит над после CreateRemoteThread добавить WaitForSingleObject 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения