SweetAss1337

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

Recommended Posts

Реализовал в своем инжекторе такую фичу, как в 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

 

  • Upvote 1

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас