Перейти к содержанию
Авторизация  
SweetAss1337

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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