XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
ScorpioT1000
Работаем
offline
Опыт: отключен
Tooltip Exploit
Я нашёл ещё одну "лазейку" в варе) ну могу сразу сказать, что ничего не получится сделать :)
чисто теоретически мы можем читать из любой области памяти..
Как немногие знают, строки "Игрового интерфейса" работают по принципу printf
Тоесть туда передаются по очереди значения, которые подставляются в %s, %d, %x итп внутри строки.
Не знаю, каким образом получилось так, что эти строки полностью поддерживают форматирование printf.
С помощью этого я смог обратиться к ячейке памяти по номеру, равному уровню героя. Естественно вар скрашился.
Пока не знаю, как передать номер какой-либо ячейки динамически (без говнорб офк)
  • задаем макс уровень героя на 48000+
  • меняем в "Игровой интерфейс" поле "Уровень %u, %s" на "%s %s" (таким образом первый аргумент(уровень) считается как указатель на строку, вместо целого числа)
  • задаем в игре уровень героя
  • выбираем его
  • получаем фатал обращения к ячейке памяти, равной уровню героя
Проверял на отладчике, соответственно EAX содержит этот адрес и система убивает после cmp(ну там в недопустимом сегменте я так понял) :)
Проблема еще в том, что макс. уровень героя не может быть больше какого-то значения (ну точно меньше 0xFFFFFFFF), это дает дополнительные сложности.
Скрин и карта прилагаются.
Миниатюры
Кликните на картинку для увеличения
Название:  TooltipExploit.png
Просмотров: 292
Размер:  198.0 Кбайт  
Прикрепленные файлы
Тип файла: w3x TooltipTest.w3x (7.1 Кбайт, 38 просмотров )

Отредактировано ScorpioT1001, 18.04.2010 в 21:25.
Старый 18.04.2010, 21:20
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
честно говоря я не понимаю что это и для чего это нужно, но видимо что-то очень крутое
мне нравиться
bee добавил:
выбираю корову и у меня фатал
Старый 18.04.2010, 21:30
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
Я понял, что это, и понял, для чего нужно.

Цитата:
Сообщение от ScorpioT1001'а
С помощью этого я смог обратиться к ячейке памяти по номеру, равному уровню героя.

Это очень и очень круто, на самом деле, но вот применить это на практике не удастся. Во всяком случае, я не вижу ни одного применения.

Бтв, найти ячейку памяти может и артмани =\
Старый 18.04.2010, 21:35
ScorpioT1000
Работаем
offline
Опыт: отключен
FREEZE_ball, но не в игре :) тоесть без вмешательства стороннего и всяких ссаных ретурнбагов.
и как я говорил там хрень с
макс. уровень героя не может быть больше какого-то значения (ну точно меньше 0xFFFFFFFF)
Старый 18.04.2010, 21:36
FREEZE_ball
Cataclysm => жара
offline
Опыт: 15,247
Активность:
ScorpioT1001, твой способ, конечно же, прямо такой игровой =)

Я так думаю, можно попробовать написать некое чудо, чтобы меняло к чертям весь движок... Утопия...
Старый 18.04.2010, 21:48
XOR

offline
Опыт: 38,159
Активность:
Попробуй с рб, если будет больше возможностей - можно использовать в крупных проектах=)
Старый 18.04.2010, 21:53
ScorpioT1000
Работаем
offline
Опыт: отключен
а смысл? в рб и так уже есть ретурн код, делай че хочешь
Старый 18.04.2010, 22:10
XOR

offline
Опыт: 38,159
Активность:
Примеров нет, чтобы разобраться ^_^
Старый 18.04.2010, 22:19
SRes
1110101000
offline
Опыт: 9,997
Активность:
Толку от этого эксплоита ровно ноль, ведь можно обращаться только в пределах signed short, надо поковырять другие вызовы printf...
Да и что дает обращение ? Ведь на выходе мы не получаем ничего.
Старый 19.04.2010, 00:18
Revion

offline
Опыт: 483
Активность:
Ну хорошо, есть printf обращающийся к случайной памяти. Ну залезет он туда, попытается найти строчку. Может даже что она там и окажется и он что то да выведет. Или там окажутся какие то данные. Получил, вывел. А дальше что? 1 как ты собираешься считывать эти данные из того что вар вывел пользователю это раз. Во вторых от пользователя в идеале это нужно будет как то скрыть. Ну и даже если ты получишь эти данные что ты с ними будешь делать? В память то ты всё равно записать ничего не сможешь.
Есть вариант использования этого всего - определять расположение в памяти определённых переменных или групп переменных, что может помочь при дисассемблинге. А в игре это использовать хз как.. Даже если ты узнаешь что адрес *имени игрока*, скажем, - такой-то, и даже постоянный на одной машине, не факт, что он будет такой же на другой.
А если там вообще какой-нибудь sprintf_s используется, который длину строки ещё принимает, что тогда?
Старый 19.04.2010, 05:11
ScorpioT1000
Работаем
offline
Опыт: отключен
там есть ещё %n
ScorpioT1001 добавил:
Даже если ты узнаешь что адрес *имени игрока*, скажем, - такой-то, и даже постоянный на одной машине, не факт, что он будет такой же на другой.
Пока не знаю, как передать номер какой-либо ячейки динамически (без говнорб офк)
Старый 19.04.2010, 05:23
Revion

offline
Опыт: 483
Активность:
FACE PALM
Не понял сраказма..
там есть ещё %n
Насколько мне известно в С стандарте вообще нет упоминания о %n.
А вапще, компилятор вижуал студии на это говорит что 'n' format specifier disabled. Вар тихо валится если его использовать.
Старый 19.04.2010, 06:48
ZeToX2007

offline
Опыт: 7,009
Активность:
А я ковырялся над этим несколько лет назад, только с описанием способностей.
Старый 19.04.2010, 22:19
DioD

offline
Опыт: 45,134
Активность:
архибоянище, есть вполне джаз функция которой можно вытаскивать аргументы предыдущих функций, зовётся она DisplayTextFromPlayer()
Старый 19.04.2010, 23:27
ScorpioT1000
Работаем
offline
Опыт: отключен
не видел такой)
Старый 19.04.2010, 23:44
DioD

offline
Опыт: 45,134
Активность:
native DisplayTimedTextFromPlayer takes player toPlayer, real x, real y, real duration, string message returns nothing
с этой функцией работают строковые параметры, можно узнать что за игрок передан параметром, время и прочие данные, возможно также вернуть параметры из предыдущей функции, но там крит 99%.
Старый 20.04.2010, 03:58
ScorpioT1000
Работаем
offline
Опыт: отключен
DioD, а если мы передадим duration как указатель на область памяти и заюзаем %s ?
ScorpioT1001 добавил:
тока надо правильно преобразовать инт в флоат
Старый 20.04.2010, 12:10
DioD

offline
Опыт: 45,134
Активность:
пока работал ретурн баг можно было играться, сейчас лавочка закрылась.
Старый 20.04.2010, 13:14
ScorpioT1000
Работаем
offline
Опыт: отключен
причем тут рб? я сейчас о другом говорю
Старый 20.04.2010, 14:26
Windrunner
Верь мне!
offline
Опыт: 4,565
Активность:
Мб я тут не в тему но разве рб не закрыли?Оо и как с помощью рб получить код?
Старый 20.04.2010, 21:10
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 05:20.