Здравствуйте, как мне вызвать метод из чужого процесса через отдельную программу. Чужой процесс это игра, а программа это трейнер. Есть адрес метода и его параметры, а вот как вызвать метод из своей программы? Что-бы в игре игрок получил оружие.
смотри CreateRemoteThread, примеров куча... если винда канеш... в линуксах можно поискать по ptrace api...
Винда XP, а где эти примеры и статьи хорошии найти, в гугле лажа всякая... Мне же надо не библиотеку туда инжектить!
если бы ты знал что-либо о процессах и о виртуальной памяти, ты бы не спрашивал как вызвать метод в контексте другого процесса... потому что это невозможно, максимум - вызов stdcall-функции с одним параметром с помощью удаленных потоков... для вызова любого метода необходимо заинжектить код... поскольку опять же судя по твоиму вопросу, ты об ассемблере вряд ли что-то знаешь, то единственный выход для тебя инжектить dll по любому методу, которых в интенете пруд-пруди... никакой телепатии... логическая цепь...
vintprog Попробую расшифровать слова Rel'а Инжектишь в целевой процесс свою библиотеку, делаешь CreateRemoteThread в этой библиотеке (главное правильно определить стартовый адрес), из созданного потока вызываешь свой метод с какими хочешь параметрами.
vintprog Знаете или нет, а Squash всё переврала. Для инжекта самой библиотеки обычно используется CreateRemoteThread. А из кода самой библиотеки вызов CreateRemoteThread уж точно не нужен. В крайнем случае просто CreateThread. Если Ваш метод не принимает ровно один параметр, причём не требующий дополнительных данных, Вам всё равно придётся что-то инжектировать в процесс. И проще всего библиотеку. Вот Вам и предлагают самый простой вариант.
vintprog есть, инжектить шеллкод. Squash зачем CreateRemoteThread, если библиотека и так уже в целевом процессе?
l_inc,K10 А как вы собираетесь метод дергать? Из DllMain? Есть туева хуча методов заинжектить библиотеку без него.
вообще, насколько я помню, CreateThread в своей работе вызывает CreateRemoteThread с параметром -1ого хендла))) это интересно... какие еще кроме SetThreadContext, патча частовызываемой API-функции, QueryUserAPC вы знаете? само собой интересует только юзер-мод)))
а что, нельзя что ли, где идёт проверка на наступание игроком на ящик с оружием поставить программно бряк, а при срабатывании "пасти" поток процесса дальше, меняя значение регистров и записывая в разные структуры в адресном пространстве игры.... эдд: и может быть, если сделать через поток и длл, то оба потока будут записывать в один и тот же адрес памяти.... проблемы могут быть....
Все верно. Ну к примеру перезапись VEH/SEH-хендлеров в ап или на диске и вообще коллбеки как таковые. А какая разница как инжектить и что? Почему шелл-код? Грузите через LdrLoadDll dll/exe, нет релоков - добавьте, пропишите в кучу,настройте релоки,передайте управление. Инжект - внедрение кода + передача управления. Форма кода и способ передачи управления значения не имеют. И если правильно почесать репу можно еще много что придумать. В общем патчите IAT kernel32 в нативе - не ошибетесь.