Перейти к содержанию

Dllimport, адреса функций и прочее


Рекомендуемые сообщения

Реализовал в своем инжекторе такую фичу, как в 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
Ссылка на комментарий
Поделиться на другие сайты

Можно поднять межпроцессное взаимодействие, я поднимаю сокет, так как у меня много функций, но можно и пайп, и вызывать что угодно, когда угодно, сколько угодно, откуда угодно :)

Если в длл одна мелкая функция, то и длл можно не подгружать, вписать в процессе в свободное место по статическому смещению свою функцию, и через тот же удаленный поток вызвать функцию уже по известному адресу

Изменено пользователем DaVilka
Ссылка на комментарий
Поделиться на другие сайты

В 10.01.2018 в 07:27, SweetAss1337 сказал:

Адрес вроде как всегда статический

нет над K32EnumProcessModules тд тп и +/- базу в таком методе

 

В 10.01.2018 в 07:27, SweetAss1337 сказал:

Если выгружаю библиотеку таким образом то происходит

над после CreateRemoteThread добавить WaitForSingleObject

 

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.