Посл.ответ |
Сообщение |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 04:29 · Личное сообщение · #1
Есть хук который цепляется к опр адресу в ехешнике, цепляется он к одному из методов класса, вот он
И вот вопрос, собственно нужно получить аргумент, и собственно указатель на oCNpc, как это сделать? P.s. Знания относительно реверса, крайне скудны, так что прошу ногами не пинать сразу, занимаюсь модингом одной игры.
| Сообщение посчитали полезным: |
|
Ранг: 488.1 (мудрец), 272thx Активность: 0.35↘0 Статус: Участник
|
Создано: 17 ноября 2014 07:46 · Поправил: VodoleY · Личное сообщение · #2
Saturas 1. зависит от самого класса. статический или динамический. 2. сильно зависит от языка программирования, в каждом свои ньюансы. Если ВООБЩЕМ. то ваш класс, это указатель на область памяти, в которой список указателей, структур , переменных . Чтоб узнать какой указатель на что указывает (в классе) надо рыть в проге описание класса oCItem и сопостовлять указатели со структурой класса
----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... | Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 10:40 · Личное сообщение · #3
класс динамический, описание есть, язык С++, более того функция которая создает хуки, может так же ловить некоторые аргументы, конкретно если они не являются указателями, а вот с указателями есть пара проблем.
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 11:11 · Личное сообщение · #4
указатель в ecx, какие еще вопросы?
| Сообщение посчитали полезным: |
![](img/s7.gif) Ранг: 331.1 (мудрец), 561thx Активность: 0.19↘0.06 Статус: Участник
|
Создано: 17 ноября 2014 11:38 · Поправил: Vamit · Личное сообщение · #5
reversecode пишет: указатель в ecx, какие еще вопросы? Ну не всегда так, зависит от версии VS компилятора и типа функи, может передаваться как через регистры так и через стек. Всегда нужно смотреть конкретную реализацию в коде.
----- Everything is relative... | Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 11:44 · Личное сообщение · #6
Vamitв его случае ecx Saturas пишет: .text:00749350 ; public: class oCItem * __thiscall oCNpc::PutInInv(class oCItem *) vc всегда по стандарту ecx, что бы был через стек, нужно специально vc ломать опциями а вот gcc в зависимости от версии, в ранних был стек, сейчас по разному
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 12:03 · Личное сообщение · #7
Вопрос, как его из ecx получить? И аргумент, вот.
| Сообщение посчитали полезным: |
Ранг: 488.1 (мудрец), 272thx Активность: 0.35↘0 Статус: Участник
|
Создано: 17 ноября 2014 12:05 · Личное сообщение · #8
(я ушел рыдать, не беспокоить)
----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... | Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 12:13 · Личное сообщение · #9
Saturasпользуйтесь гуглом, ваши вопросы в нем уже решены
| Сообщение посчитали полезным: Saturas |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 12:17 · Личное сообщение · #10
reversecode пишет: пользуйтесь гуглом, ваши вопросы в нем уже решены я и не против же, только вот как не искал толком ничего не нашел, вот и пришел сюда, буду признателен если ктонибудь ткнет в правильное направление.
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 12:29 · Личное сообщение · #11
у нас видимо какой то разный гугл? http://stackoverflow.com/questions/6979558/hooking-hot-patching-class-member-functions-modifying-vtable-entries http://stackoverflow.com/questions/14069467/hooking-non-virtual-member-functions-in-c итд
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 13:48 · Личное сообщение · #12
Сделал таким образом, 0x08 - адресс указателя this, 0x0C - аргумент
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 13:52 · Личное сообщение · #13
не видя реального кода ничего нельзя прокомментировать работает? ну и ладно
| Сообщение посчитали полезным: |
Ранг: 101.0 (ветеран), 344thx Активность: 1.15↘0 Статус: Участник
|
Создано: 17 ноября 2014 14:11 · Личное сообщение · #14
Весь ваш код легко заменяется на Си++ и все ассемблерные ставки идут лесом. Стандартные соглашения о связях гласят, что в начале процедуры будет такой код:
После чего можно брать значения: ebp[0] = ebp_old ebp[4] = return_address ebp[8] = Arg1 ebp[0xC] = Arg2 Ваш код работает в случае, если this лежит в первом аргументе, но стек это медленная штука и обычно используют регистр ecx. Если ваш код правильный и this действительно в стеке:
Если же, все-таки ecx
Второй случай это грустная история, ибо требует полное восстановление структуры данных в своем коде структуры/класса oCNpc (с учетом всех наследований и типов). Хотя, скорее всего, раз вы его у себя объявили, значит он где-то есть в исходных кодах.
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 17:47 · Личное сообщение · #15
Чет не совсем понимаю, что есть ebp_old, и если вы пишите что вставки идут лесом, тогда как быть с этим кодом, или я что то не так понял?
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 17:49 · Личное сообщение · #16
предоставте листинг вашей процедуры куда вы там вклиниваетесь
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 17:52 · Личное сообщение · #17
Вот листинг из ИДЫ
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 17:57 · Поправил: reversecode · Личное сообщение · #18
вы неправильно ее похучили как я и говорил this в ecx .text:00749370 mov ebx, ecx Добавлено спустя -52 минутhttps://exelab.ru/f/action=vthread&forum=5&topic=22328
| Сообщение посчитали полезным: |
Ранг: 101.0 (ветеран), 344thx Активность: 1.15↘0 Статус: Участник
|
Создано: 17 ноября 2014 18:17 · Личное сообщение · #19
Saturas пишет: Чет не совсем понимаю, что есть ebp_old, и если вы пишите что вставки идут лесом, тогда как быть с этим кодом, или я что то не так понял? ebp_old это значение регистра EBP до выполения команды mov ebp, esp, его запихивает в стек первая команда - push ebp. Си достаточно низкоуровневый язык, чтобы не использовать __asm вообще. Максимум - оптимизация (кодирование с использованием FPU, SIMD) и ядро ОС/драйвера (низкоуровневые архитектурно специфические команды ассемблера). Поскольку this лежит в ecx (о чем сразу было понятно). Вам нужно понять все поля структуры/класса oCNpc. Код будет выглядить как-то так (судя по листингу, файл который вы ковыряете с PDB, т.е. отладочной информацией, из нее можно выдернуть описание класса) - читайте ниже:
И никакого ассемблера! P.S. Когда я занимался GameCheating'ом мне приходилось восстанавливать целые классы до состояния, когда они компилировались в исходный код с точностью до каждого байта. Было весело, но работу так и не закончил ![](img/smilies/s4.gif) Это был 64битный ассемблер и HexRays 64 тогда еще не было. Добавлено:Берете заголовочный отсюда: https://code.google.com/p/g2ext/source/browse/trunk/api/g2/ocnpc.h?r=21 И реализовываете методы класса заглушки, которые ничего не делают. Тот метод который перехватываете реализовываете (его может и не быть в силу того, что игра ушла вперед относительно исходных кодов). В таком случае перехватываемый метод получит аргументы правильно и правильно сможет обращаться к членам класса.
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 20:32 · Личное сообщение · #20
Заголовочники оттуда и есть все, и все уже исправленые/дополненые, ибо там 80% бреда.
| Сообщение посчитали полезным: |
Ранг: 101.0 (ветеран), 344thx Активность: 1.15↘0 Статус: Участник
|
Создано: 17 ноября 2014 20:49 · Личное сообщение · #21
Тогда в чем проблема? Компилятор сам способен получить нужные аргументы функции)
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 21:00 · Личное сообщение · #22
Аргументы - да, но вот когда нужно заменить функцию в памяти, и если от thiscall то все плохо, для этого и нужно ловить арги, вот.
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 21:30 · Личное сообщение · #23
какие арги? зачем ловить? в какой памяти? у вас обычная this функция в text сегменте, которая явно в dll/exe
| Сообщение посчитали полезным: |
Ранг: 101.0 (ветеран), 344thx Активность: 1.15↘0 Статус: Участник
|
Создано: 17 ноября 2014 21:43 · Личное сообщение · #24
SaturasЗапилите в тред ваши хуки (перехват функции как реализован?) и мы поможем вам найти ошибку.
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 22:06 · Личное сообщение · #25
Хуки сейчас нагло украдены у каких то поляков в виде dllки, и сейчас юзаю ее. d240_17.11.2014_EXELAB.rU.tgz - InjectMage.dll
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 22:10 · Личное сообщение · #26
а сами то что сделали? кстати сколько занимает тот файл который хучите? проще уже реверсните всю игруху тем более все структуры же вы знаете Saturas пишет: Заголовочники оттуда и есть все, и все уже исправленые/дополненые, ибо там 80% бреда.
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 22:19 · Личное сообщение · #27
Сам что сделал? допилил до болемение рабочего состояния, и продолжаю допиливать. А реверсить всю игру долго, нудно, и отладочная инфа далеко не вся.
| Сообщение посчитали полезным: |
![](img/s9.gif) Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 ноября 2014 22:20 · Личное сообщение · #28
Saturas пишет: допилил до болемение рабочего состояния, и продолжаю допиливать. вот это вас и просили показать в int пишет: Запилите в тред ваши хуки (перехват функции как реализован?) и мы поможем вам найти ошибку. Добавлено спустя -59 минутвообщем я так понимаю все работает значит /thread
| Сообщение посчитали полезным: |
Ранг: 5.4 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 ноября 2014 22:29 · Личное сообщение · #29
Дак, оно и так уже все решено за исключением мелочей, хоть и не без Вашей помощи. А по сути, это реинкарнация того пакета G2Ext, ибо то как работал тот пакет - лучше не знать, креши на каждом шагу были, вот и пришлось отказаться от него, и сделать по своему, и что характерно по своему таки вышло лучше. На последок, хотелось спросить где/что почитать по реверсу в целом?
| Сообщение посчитали полезным: |
Ранг: 101.0 (ветеран), 344thx Активность: 1.15↘0 Статус: Участник
|
Создано: 17 ноября 2014 23:01 · Личное сообщение · #30
Если из русскоязычных - статьи на этом сайте и на васме.
| Сообщение посчитали полезным: Saturas |