Итак, посмотрел исходники, гайды и тп, везде оффсеты(адреса) были прописаны сразу, а что делать, если адрес динамический и при каждом перезапуске меняется?!
Может лучше потратить некоторое время на поиск указателя?
Дело скучно, не спорю, но зато ты будешь просто читать из статической памяти адрес массива байтов,
И сразу переписывать его.
Вместо того что бы при запуске ждать когда же оно пройдет адресное пространство игры.
Что касается алгоритма поиска - [Ссылки могут видеть только зарегистрированные пользователи. ] download->sourcecode, прада на дельфях
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой
Может лучше потратить некоторое время на поиск указателя?
Как это сделать? Желательно пример, просто мне еще надо будет некоторые значения менять, но они появляются только после 10 выстрелов мимо например....=(
Как это сделать? Желательно пример, просто мне еще надо будет некоторые значения менять, но они появляются только после 10 выстрелов мимо например....=(
Как найти указатель статей полно, на жуке в том числе они должны быть.
Если вкратце - через тот же [Ссылки могут видеть только зарегистрированные пользователи. ] находишь нужное значение, врубаешь
дебаггер и проверяешь значения регистров во время выполнения каких-либо
действий(дебаггер заботливо запишет для вас) с этим значением (выстрелил - уменьшился счетчик патронов)
Во всяких игрушках с DynamicMemoryAllocation эти
операции выполняются не напрямую, а через поинтеры, для безопасности.
-> В регистрах проца на момент выполнения этой операции будут храниться адреса переменных.
Что самое страшное адреса бывают мм.. "вложенными".
Т.е. есть в стат. памяти указатель, который содержит адрес другого указателя в динамич. памяти,
тот в свою очередь может содержать адрес нужной переменной.
Плюс надо учесть, что некоторые значения могут быть записаны не по самому адресу, а по адресу со смещением (оффсет)
- я вот с ними всегда путаюсь, несмотря на напоминания чит энджина)
Тебе вобщем нужно от этой переменной "пройти" до адреса в стат. памяти,
Выписать его на бумажечку, и в программе ты будешь делать вот что:
/*vamemoryObj - экземпляр лабы VAMemory,
offset - оффсет первого указателя относительно начала адресного пространства процесса*/
IntPtr mainAddress = (IntPtr)(vamemoryObj.BaseAdress + offset);
//читаем адрес из указателя
IntPtr secondPointer = vamemoryObj.ReadInt32(mainAddress);
//допустим переменная имеет тип int и лежит по адресу
//записанному в secondPointer + оффсет скажем в 80 б. изменим ее на значение
//введенное юзером:
bool result = vamemoryObj.WriteInt32(secondPointer + 80, int.Parse(Console.ReadLine()));
P.S. пример как понимаешь обобщенный, и на точность и нормальную работоспособность не претендует.
Да и собственно алгоритм поиска адреса описан не слишком красиво, но в сети лежит большое количество примеров.
Да и, в случае если раньше доводилось работать с winApi, то почитай, хотя бы основные моменты,
"[Ссылки могут видеть только зарегистрированные пользователи. ]" Джеффри Рихтера
- замечательная книга (правда я никак ее не дочитаю).
P.P.S. Извиняюсь за оговорки - если что не так написал - поправьте.. А то сплю я) Года 3-4 сплю)
________________
Ну что лежишь ты Мурка, на краю дороги
Гробоваая крыышкаа над тобооой
Последний раз редактировалось •theSaboteur•; 24.11.2011 в 21:48.