|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
||||||||||||||||
Вызов функции другого процесса (неверные регистры)29.12.2015, 23:03. Показов 4810. Ответов 26
Метки нет (Все метки)
Всем привет. Я пытаюсь вызвать функцию из другого процесса, но вот беда - регистры формируются не те, из-за чего вызов функции происходит (отслеживаю через Cheat Engine debugger), но не делается то, что должно.
Что именно я делаю: 1. создаю CLRHost.dll, которую инжектирю через CheatEngine в приложение Wow-64.exe Кликните здесь для просмотра всего текста
2. создается домен приложения в DomainManager Кликните здесь для просмотра всего текста
3. Вызываю функцию через delegat. Кликните здесь для просмотра всего текста
Что такое CastSpellByID? Эта функция, которая находится по адресу Wow-64.exe + CastSpellOffset (0x45C9F0). Если смотреть через IDA, то она находится по адресу 14045C9F0. А Cast(19434, 0, new byte[16], 0, 0, 0, 0); 19434 - это Aimshot. С введением разобрались, теперь к проблеме. Перед тем, как проверить свою программу, я ставлю брейкпойнт в CheatEngine на функцию каста по адресу упомянутом выше Wow-64.exe + 45C9F0. Вызов функции происходит! но, значения регистров не там, где они должны быть. Как показано на картинке, 1-вые значения регистров стандартные (т.е. вызывается непосредственно из игры). Наш Aimshot будет выглядеть, как 19434 dec = 4BEA hex. Отсюда видно, что ID заклинания находится в регистрах RDX и RBP. На 2 картинке уже непосредственно мой вызов через инжект функции Cast(19434) и без лишних переменных, объявленный делегат при этом delegate Int64 CastSpellByID(UInt64 spellId); На 3 картинке уже вызов Cast(19434, 0, new byte[16], 0, 0, 0, 0); (взято из другого, старого, уже не рабочего проекта) и delegate Int64 CastSpellByID(UInt64 spellId, Int64 itemId, byte[] guid, Int64 isTrade, Int64 a6, Int64 a7, Int64 a8). Как видно во 2 и 3 случае ID заклинания 4BEA находится в регистре RCX, из-за чего происходит последующий вызов на несуществующий адрес другой функции. Что можете посоветовать?
0
|
||||||||||||||||
| 29.12.2015, 23:03 | |
|
Ответы с готовыми решениями:
26
Завершение процесса при обнаружении другого процесса Вызов методов классов друг у друга (вызов метода из другого класса)
|
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
|||||||
| 02.01.2016, 16:50 [ТС] | |||||||
|
Возможно я погорячился, все функции лишь проверка на что-то, кроме 45E8C0, которая постоянно вызывается, или 45F440 - только во время самого каста.
Добавлено через 23 минуты
Проблема все равно остается в поиске этих значений, поскольку, насколько я понял, они инициализируются в момент загрузки Wow (логин скрин), т.к. в не зависимо от аккаунта(спец. брал чужой) и персонажа эти значения не меняются.
0
|
|||||||
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
|
| 02.01.2016, 17:29 [ТС] | |
|
Нашел такую странность, если RDX = 20F310 и при вызове функции каста 45E3A0 на брейкпоинте не запускать дальше приложение Wow, и начать поиск значения 20F310, то найдется след. адрес 0020F138, который постоянно меняет значения.
К адресу 0020F138 много что обращается, включая неизвестные мне [MSCTF.dll+A16B0], [atidxx64.AmdDxGsaFreeCompiledShader+5978 E0], MSCTF.TF_IsThreadWithFlags+46C, [kernel32.UnhandledExceptionFilter+1498] и другие. PS: кабы не пришлось все равно лезть в Directx
0
|
|
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
|
| 02.01.2016, 17:35 [ТС] | |
|
Интересно, можно ли узнать к какому модулю принадлежит выделенная память по этому адресу 0020F138?
0
|
|
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
|
| 02.01.2016, 20:52 [ТС] | |
|
Хм... мои расследования привели меня вот к теме стековый кадр. Пока, я понятия не имею, почему так происходит, и зачем (если это было сделано) это сделано (тавтология О_о).
0
|
|
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
|
| 05.01.2016, 15:21 [ТС] | |
|
Продолжение банкета. Через потоки определил расположение Stack. Возможно удастся выявить закономерность выделения потока + смещение от Stack low \ high потока.
0
|
|
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
||||||
| 05.01.2016, 21:42 [ТС] | ||||||
|
Решил еще раз поискать адреса через CE. Через сканирование до адреса нашел следующие значения (на картинке). Использую самый первый статический адрес, пока накладок нет (4 раза проверил перезапуская WoW). T.e:
["Wow-64.exe"+01861C48] + 0x128 = адрес на RBP; RBP = R9; R9 - 1A0 = RDX; Кликните здесь для просмотра всего текста
PS: особая благодарность за помощь Konctantin, решение найдено. Тему можно закрывать.
0
|
||||||
|
118 / 5 / 4
Регистрация: 05.05.2013
Сообщений: 336
|
|||||||
| 11.01.2016, 23:17 [ТС] | |||||||
|
Предыдущее решение не совсем верное, и работает на "костылях".
Исследуя функции, что вызывают функцию каста 45E3A0, я наткнулся на интересную функцию 45E7D0
(__int64)&unk_1414DC9C0 = указатель на статичный массив из 20 байт, в котором постоянно нули :\ 0i64 = 0 (__int64)&xmmword_14179D938 = указатель на GUID, который тоже постоянно нулевой Для вызова функции просто так же передаем адреса на эти статичные переменные. В отличие от предыдущего решения, который иногда не работал, этот работает на 100%.
0
|
|||||||
| 11.01.2016, 23:17 | |
|
Вызов функции из другого файла Вызов функции из другого файла Вызов функции из другого скрипта Вызов функции из другого файла
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|