Экономика Diablo III была разрушена целочисленным переполнением

в 7:45, , рубрики: diablo 3, game development, Блог компании «Apps4All», деньги, информационная безопасность, переполнение int

Diablo III от Blizzard – популярная онлайновая Action/RPG, выпущенная почти год назад, получила свою долю технических неполадок. От Error 37 до лагов, которые выливаются в сотни зря потраченных часов, но весь прошедший год Blizzard провела за отладкой бекэнда для того, чтобы он лучше справлялся с миллионами активных игроков.

Diablo III также можно отметить за реальную экономику, с акцентом на региональные Аукционные Дома, где игроки могут продавать редкие предметы за золото, которое исчисляется миллионами и миллиардами (инфляция сумасшедшая). Кроме того в Diablo III используется Real World Auction House, где игроки могут продать золото или предметы за деньги реального мира.

Вчера был выпущен Патч 1.0.8, который должен был улучшить прогресс персонажей. После нескольких недель тестирования в Public Test Realm, где добровольцы обкатывают патч для того, чтобы понять, что он не нанесет никакого вреда игре, патч был успешно опубликован.

Да, патч был полностью протестирован в PTR – но за исключением одной мелкой доработки, добавленной в последнюю минуту. И эта доработка порвала экономику игры на мелкие кусочки.

Экономика Diablo III была разрушена целочисленным переполнением

Финальный билд включал следующие изменения:

Размер стека для продажи золота в аукционном доме увеличен с 1 миллиона до 10 миллионов.

Как правило, в Real Money Auction House игрок может продавать золото «пачками» в 1 миллион, максимум 600 порций. В версии 1.0.8 этот инкремент, соответственно, увеличен до 10 миллионов. Что же произойдет, когда игрок попытается выставить на торги абсурдно большие суммы? (абсурдно потому, что получение даже 100 миллионов золота для одного игрока долгое время считалось практически невыполнимой задачей — Blizzard умеет недооценивать игроков)

Пользователь Reddit с ником tyropro прекрасно поясняет:

На торги в RMAH можно было выставить золото, которое при продаже в реальных деньгах не превышало бы 250 долларов. В опубликованном видео, например, показывалась продажа 6 миллиардов золота — 600 x 10,000,000 по $0.39 за стек, в сумме $234. Когда игрок размещал такой аукцион, то на продажу попадало только примерно 1.7 миллиарда, а остальное «пропадало» до тех пор, пока золото не возвращалось в сундук и там уже увеличивалось.

Вот точные цифры из видео:

Создается RMAH аукцион: 6,000,000,000 золота
Аукцион показывается как: 1,705,032,704 золота
Пропажа! 4,294,967,296 золота
Пропавшее если поделить на 2: 2,147,483,648 золота

4,294,967,296 это 232 степени, предел для целого без знака, интересная реализация со стороны Blizzard.

Проще говоря, код для продажи золота в RMAH не умеет работать с числами, больше чем int32, и в результате переполнения задваивает золото в карманах продавцов.

Итак, нападающий может создать 6-миллиардный аукцион, из которого выставится на продажу только 1.7 миллиарда (и, соответственно, только 1.7 миллиарда спишется со счета «взломщика»), отменить его, и получить себе обратно на счет уже 6 миллиардов. Чистая прибыль – 4.2 миллиарда. Повторить до полного удовлетворения.

Эксплоит был показан на одном из сайтов и быстро разошелся по людям. Повторить его мог каждый, кто знал о баге.

И началось веселье.

Экономика Diablo III была разрушена целочисленным переполнением
Да, тут 420 миллиардов золота!

После того, как обманщики скупили все предметы в Аукционных Домах, они выставили их на продажу в Real Money Auction House. За реальные деньги. И люди покупали их.

И это самый худший сценарий для Diablo III. И все из-за не протестированного маленького изменения в патче. Что компания Blizzard могла сделать с этим? Хорошо было бы откатить все достижения на день до выпуска патча, но это вызвало бы множество негативных откликов. Но оставлять экономику в таком положении невозможно – это обесценило бы предметы, а Diablo III как раз про предметы и есть.

В конце концов, Blizzard не сделала откат, но забанила всех, кто читерил, и вернула деньги всем, кто потратил реальные деньги. Изменение в патче, вызвавшее хаос, было отменено и, соответственно, проблема временно решена.

И пусть это будет уроком – не протестированные изменения в последнюю минуту могут привести к коллапсу всей экономики.

От переводчика: И это уже второй баг в игровой экономике, о котором стало известно менее чем за неделю – в субботу CCP рассказала, как непродуманный функционал привел практически к аналогичной ситуации в EVE Online. Да, экономика в играх виртуальная, но ошибки и/или непродуманный функционал позволяют найти такие пути, которые позволяют просто обойти длинный и честный заработок и украсть уже реальные деньги. Интересные возможности нового цифрового мира.

Автор: DaryaZ

Источник

Поделиться

* - обязательные к заполнению поля