Перейти к содержанию

Вопрос по реверсингу, наверно...


Рекомендуемые сообщения

Всем привет. Ситуация такая: Есть функция которая меняет значение, я поставил хук на эту функцию и получаю готовое значение, но как мне узнать через какую функцию это значение создается?

Так же мне известно что функция которая создает это значение срабатывает при определенном действии в игре.

 

Вот как мне узнать что это за функция во обще? единственное что приходит на ум - как то мониторить все вызываемые функции этой игрой непосредственно в момент определенного действия(нажатия кнопки TAB). Вот через что такое можно осуществить?

 

Знаю как такое сделать можно на перехват WinAPI-функций, а вот как перехватывать все функции игровые? Очень нужна помощь в этом вопросе.

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

http://100paperclips.com/100paperclips/112-main-menu/news/294-function-hacker-v25-released-294.html

Но лично у меня не получилось этой прогой ничего толком взломать.

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

/*---------------------------------------------------------------------------*/

 

В CE 6.4 появилась крутяцкая штука под названием Ultimap, которая как раз для

этого и предназначена. Единственная трудность - для неё нужен полностью рабочий

DBVM (ядерный отладчик, идущий в комплекте с CE), который работает только под

Intel.

 

PS: На 8.1 x64 у меня его завести так и не удалось - на семёрке работает.

 

/*---------------------------------------------------------------------------*/

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

Здрасте.

Была прога которая функции могла находить по моему называлась Code dynamic allocation (CDA) или Function hacker. Но лично я ею пользоваться не научился :-( И справки у нее толком нормальной нету. Попробуй в нете найти.

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

Я тут поспрашивал профессионалов, и говорят что ollyDBG и IDAPro в этом деле нормально могут помочь... Кто нить о них знает как там можно реализовать такое?

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

/*---------------------------------------------------------------------------*/

 

Интересных ты профессионалов поспрашивал! Олли - хороший отладчик, Ида -

отличный (если не лучший) дизассемблер + неплохой отладчик. Это, собственно,

просто инструменты. Первым находишь, куда копать (адрес функции), вторым -

копаешь (разбираешься, как функция работает). Это можно делать час, три, пару

дней, неделю или месяцы. Я когда-то давно, ради спортивного интереса, снимал с

одной игры защиту под именем StarForce - потратил месяц чистого времени - т.е.

месяц только лишь сидения в отладчике\дизассемблере, не говоря о пробах,

раздумьях и записях. Очень долго, очень муторно, очень медленно и крайне

малоэффективно - пытаться понять по дизассемблерному листингу логику работы

высокоуровневой программы, будь то современная игра или что-то другое. Так что

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

реализовать задуманное и с чего бы начать. 95% времени - это отладка кода, 

оставшиеся 5% - поиск адреса или указателя в CE.

 

/*---------------------------------------------------------------------------*/

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

Не ну кажется адрес я уже нашел, да и даже если не нашел то найду, ибо СЕ мне нашел 407 возможных вариантов вызова функций при моем действии... Но вот как мне теперь найти сигнатуру то? А без сигнатуры я не смогу же поставить хук, правильно?

 

Во общем в чем лучше всего искать сигнатуру, и как это делается в СЕ Ultimap?

 

P.S. Ну а так то функция являет собой шифратор, и возможно дешифратор текста. Так что в любом случае она 100% должна принимать и возвращать текст, но вот даже уже с таким вариантом может быть два варианта:

Возврат текста через^

char* Function(char* inText);//илиvoid Function(char* out\ref inText);

Ну я так понимаю что сигнатуру вычислить это просто ацки сложная задача да?

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

/*---------------------------------------------------------------------------*/

 

Я, может, не совсем правильно понял, но какую сигнатуру ты имеешь ввиду? Ту,

что используется для функции aob_scan()? Дык она тебе не нужна толком, ты же и 

так знаешь адрес функции. Давай я ещё раз приведу описание твоей задачи:

 

"Есть функция которая меняет значение, я поставил хук на эту функцию и получаю

готовое значение, но как мне узнать через какую функцию это значение создается?

Так же мне известно что функция которая создает это значение срабатывает при

определенном действии в игре."

 

У тебя есть адрес некоторой функции, которая изменяет значение адреса A. Тебе 

хочется узнать, "через какую функцию это значение создаётся". Следовательно, 

самый первый шаг - посмотреть функцию, которая это значение меняет, а точнее -

весь код, который идёт выше от инструкции, меняющей адрес. Брейкпоинт на

запись, а затем смотрим выше, как меняются регистры.

 

Следующий шаг - брейкпоинт на чтение этого же адреса - там наверняка найдётся 

не один вызов, в том числе и функции, которая твоё значение "создаёт". На самом 

деле, со словом "создаёт" тоже стоит кое-что уточнить - под созданием можно 

понимать как объявление функции, так и создание объекта, так и присвоение

переменной какого-то значения. Не думай пока про хуки или что-то ещё, для

начала нужно разобраться с кодом и понять, что дальше делать. На данный момент 

тебе нужно просто найти код, меняющий адрес памяти, который ты уже знаешь, в

каком-то другом месте. Поставь брейкпоинт на этот адрес памяти и смотри, что 

будет в том или ином случае.

 

/*---------------------------------------------------------------------------*/

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

Ну во общем дали мне на одном форуме точный адрес и ollyDBG-паттерн к ней, ну и еще дали тело функции вместе с типами и аргументами, короче дали все что нужно..

Но все таки это просто дали, но как это сделать самому я так и не понял, а именно:

 

Смотри, под словом сигнатура я имел введу типы и количество аргументов, которые принимает эта функция, вот скажем пример:

Нашел я через тот же Ultimap адрес нужной мне функции, но зная один лишь адрес, я хукнуть эту функцию не смогу никак... Ибо мне нужно знать точное количество и типы всех принимающих\возвращающих параметров. Вот собственно меня интересует в первую очередь как мне эти параметры узнать и на сколько это сложно?

 

Ну и еще такая вот штука, вот тот адрес который мне дали, короче на нем не "call адрес функции", а вот такие инструкции:

mov eax,[esp+0C] // Вот эта инструкция висит на том адресе что мне дали на форумеcmp eax,10jnl 00961007mov eax,[esp+04]mov [eax+04],00000005xor al,alret

Так вот что мне хукать то? прямо этот адрес или что? А то как то впадлу переспрашивать уже на том форуме после благодарствий :)

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

Короче хукнуть получилось, но проблема теперь такая, функция принимает толи char* толи BYTE*, и во общем если принимаю char* то получаются кракозябры, мне нужно походу перевести эти байты в HEX.

Но я уже реально сижу два часа и рабочего кода так и не нашел... То вылеты, то тупо не работает запарился уже просто... Помогите перевести байты в HEX-строку.

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

/*---------------------------------------------------------------------------*/

 

В CE 6.4 появилась крутяцкая штука под названием Ultimap, которая как раз для

этого и предназначена. Единственная трудность - для неё нужен полностью рабочий

DBVM (ядерный отладчик, идущий в комплекте с CE), который работает только под

Intel.

 

PS: На 8.1 x64 у меня его завести так и не удалось - на семёрке работает.

 

/*---------------------------------------------------------------------------*/

 

Ты не прав.

DBVM работает как на Intel, так и на AMD, просто на Intel в разы больше шансов, что заработает, а не появиться BSOD.

На AMD камнях, серии FX, DBVM прекрасно работает, но у процессоров, с числом ядер >4, нужно отключать все ядра, кроме первых 4 (что очень не удобно).

А вот сама Ultimap работает только с процессорами Intel. Даже мессаджбокс появляется, при попытке запустить её на AMD

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

  • 3 месяца спустя...

Привет всем, я тут пробовал запускать DBVM на восьмерке, DBVM работает на Windows 8.1, что бы DBVM заработало на windows 8.1 x64, нужно выставить одно ядро, у кого процессоры

многоядерные, тогда DBVM запустится без проблем и не выдаст синий экран смерти, на  Windows 8.1 x64 так же и на Windows 7 x64, еще я ставил Windows Vista SP2, на ней едет без проблем, работает и на многоядерных процессорах, и не нужно выставлять одно ядро.

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

×
×
  • Создать...

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

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