Как стать автором
Обновить

Комментарии 77

Да, допущения, конечно, грубые, но обращаешь внимание на них только тогда, когда этими дырами кто-то воспользуется. Предлагаю отправить письмо разработчикам на эту тему.
Кстати по поводу sealed — они еще и помогают компилятору выдавать более оптимальный код за счет упрощения вызовов методов класса.
Предлагаю отправить письмо разработчикам на эту тему.
К сожалению разработчики больше не поддерживают игру.
Одна надежда на Starbound. Он, кстати, на С++ пишется. По сложнее, наверно, будет с хаком :)
Очень жаль, а я только ее купил по-честному.
Ничего, играть всё равно можно долго и с удовольствием. В компании интереснее.
Кривость синхронизации позволяет играть в мультиплеере, модифицируя память клиента…
Ну это уже классика :-)


День 200-ый
Посетители столовой с ужасом находят, что, чтобы насыпать соли, они должны подойти к официанту, предьявить паспорт, получить специальный 8-значный одноразовый код к солонке. Для получения перца процедуру следует повторить.

А теперь представьте, что бы натворил ForhaxeD, если бы это была бы игра с открытым исходным кодом… Ведь речь в статье не о серверной статье (где безусловно всё надо проверять), а о клиентской.

Кстати, такие «недочёты» в клиентах могут специально существовать для привлечения создателей модов, что в свою очередь может сильно повысить популярность и среди игроков.
Этой статьей — я хотел показать о важности понимания того языка/фреймворка на котором ты пишешь, специально можно «осуществить» только API, который позволял бы делать эти самые ваши моды без извращений.
На написание хоть какого-то SDK находятся силы лишь у единиц игросоздателей, обычно всё ограничивается недокументированным форматом хранения неисполняемых данных. Впрочем, даже это мало когда мешало моддерам в написании улучшений, если игра того достойна. Здесь же речь об инди-игре, которая вряд ли бы вышла в свет, если автор начал писать ещё и SDK. Посему предлагаю считать возможность наследования классов скорее фичей, чем багом.
А что там, простите, писать? Можно было элементарно сделать подключение библиотек на «лету», воспользоваться тем же System.Reflection. Еще один весомый аргумент тот, что код террарии и без модификаторов насыщен самыми разнообразными костылями, я полагаю это тоже фичи :-)
блин. Ну нельзя, автор, «показать о важности»!!! Твою статью читать невозможно, потому что «почитав специальные статьи об этой игре, а хабр требует технической информации», а так же «я решил более детально изучить её структуру и о том, как особенности структуры — можно использовать в своих целях»

Ну ты что, «соответственно», в свободное от хабра время консультантом в М-Видео работаешь?
Знаете, о таких вещах — следует писать в личку. Так же, не плохо бы, быть более уважительнее к другим пользователям. Мы с вами не знакомы, поэтому предпочитаю начать общение в более дружественном ключе, например, научиться употреблять «вы» в диалоги с незнакомыми людьми.
Прежде чем поучать других, поучился бы сам. «О таких вещах» пороть надо, а не в личку писать. Потому что ты своими графоманскими эксерсизами просто изнасиловал глаза минимум 170 людям. Я понимаю, в редакторе комментариев нет компилятора, который укажет на ошибки, но, коллега: наши интерпретаторы валятся на «ваших» скриптах.
Вот и написали бы в личку список ошибок и спасли бы от изнасилования кучу народа.
А так — сначала автор изнасиловал ошибками, а потом вы ударили по людям своими хамскими комментариями.
Обычно я это делаю. Но на этом конкретном тексте мои личные блоки на безграмотное письмо были пробиты буквально в первом абзаце. Мне не хотелось бы, чтобы в этом конкретном случае автор получил кредиты за грамотно и хорошо написанную статью, потому что автор такой статьи не писал. Текст написан так, что топики с тегом «перевод» выглядят просто текстами Пушкина. Этот текст нельзя поправить, его можно только переписать заново, сохранив лишь вставки кода.

Я вот даже не понимаю как кодящий человек может так писать. Ведь у программеров превалирует шаблонное мышление. Где и как можно нахвататься таких шаблонов как «показать о том»? Как можно написать «я решил более детально изучить её структуру и о том, как особенности структуры — можно использовать в своих целях» — так же даже грузчики на овощных складах не говорят. Ну как?
Вот приколитесь — автор «поправил» текст, цитирую:
«Купив игру, поиграв в нее около двух недель со своими друзьями — она мне немножко наскучила, я решил более детально изучить её структуру. Как особенности структуры — можно использовать в своих целях.»

Как можно писать «купив игру, она мне наскучила»? Либо у автора основной язык ангийский (там, если не ошибаюсь, в худлитературе причастные обороты так могут строится), либо чат-бот, причем простенький.
«Как особенности структуры — можно использовать в своих целях». Вот о чем хотел нам показать автор этим предложением, а?
Ну вот и напишите в личку и предложите вариант получше
как скажете. вы же лучше знаете, как _надо_ и как _следует_
Ну реально, вот зачем это в комментах? Только бесит.
Я вот статью по диагонали прочитал, потому ошибки вообще не зацепили. А в комментах просто срач развели. Аж тошно.
Знаете, о таких вещах — следует писать в личку. Так же, не плохо бы, быть более уважительнее к другим пользователям.
А вы не передергивайте других, и сами немного уважайте других — все ошибаются.
а вы посмотрите в словаре значение слова «передергивать»
Предлагаю перед тем как ругаться о чистоте языка, научиться писать «также» и «так же» правильно :-)
о да, я далеко не идеал
Разработчик писал на форуме, что он просто решил поизучать XNA, в результате получилось нечто играбельное, and the rest is history. А отсутствие защиты или обфускации — его сознательное решение.
«Купив игру, поиграв в нее около двух недель со своими друзьями — она мне немножко наскучила, я решил более детально изучить её структуру и о том, как особенности структуры — можно использовать в своих целях.»

Ставлю сотню на то, что в детстве вы разбирали на детали свои игрушки :)
все разбирали.
Ну, почему же. Многие, например, наоборот искали разобранные и собирали.
Из них, наверное, получились отличные гентушники :)
моя полицейская машинка обратно не собралась :(
Я не смог собрать обратно часы. Много часов.
Особенно большие будильники с противной пружиной.
НЛО прилетело и опубликовало эту надпись здесь
да я в садике разбирал, было тогда года 4-5.
Как работает заводная пружина внутри я так тогда и не понял
НЛО прилетело и опубликовало эту надпись здесь
Разбирали и собирали с другом из одной кучи игрушек другую.
Все мы…
Поэтому и не боюсь за свою сотню )
уже давно в среде игроков терарии есть tmod и tshock. Tschok точно такие моменты проверяет и сопротивляется. Однако предметы себе выдавать все равно можно
Максимум, что сделал Tschok — кинул меня в старую позицию, когда я пытался пролететь пол карты. Однако, на короткие дистанции — все нормально.

И вообще, такие вещи должны быть реализованы разработчиками, а не любителями, в этом суть статьи.
мне кажется разработчику терарии все равно. Он даже пользовательские моды не любит.
Раз уж разговор про Террарию и Стим. Предлагаю всем хабраюзерам, имеющим аккаунты в стиме попытать удачу в розыгрыше игры. Розыгрыш приватный, закончится через 3 дня.
Сслыка:
www . steamgifts . com/giveaway/Sq9c4/terraria
Хабр, ты идиот. Прочитав эту статью, я вспомнил, что у меня есть одна не подаренная копия Террарии в Стиме.
Решил отдать её случайному хабраюзеру, для чего создал приватную раздачу для хабраюзеров на специально созданном для этого сервисе, не требующем регистрации, без реферальной системы, смс и прочих неприятных вещей.
В итоге заминусовали и слили карму. Кто нибудь из минусующих может объяснить мне причину такого негодования?
Кстати, на раздачу люди все равно подписываются.
Это выглядело как спам, особенно разбитая ссылка. И надо было уточнить что проводишь именно ты, а не какая-то конторка.
Это что, серьёзно требутся 50 баксов на счету для работы с этим сервисом? Не, матожидание потерянных денег в районе 50$ — 0.025*40$ ~ 49$, ну нафиг.
Требуется игр, накупленных на 50$, чтобы зарегистрироваться на стимгифтах, тем более учитывается американская стоимость игры — то есть вполне достаточно иметь один-два ААА-тайтла, чтоб зарегистрироваться.
Ах вот оно как. Пошёл попытаться сделать sign in по второму разу — в этот раз всё вышло безупречно, нужное количество денег на привязанных играх нашлось. Тем не менее как-то же я в первый раз эту ошибку увидел?.. Спасибо, в общем. Узнал об этом сервисе.
Я это просто тут оставлю. Это если будет интересно что-то подобное.
kag2d.com/
[quote]Игра написана на языке C# (.NET 4.0) с использованием фреймворка XNA[/quote]
Перенесите эту строчку в раздел «Мораль», дописав перед ней «А всё потому, что ___»
Прошу прощенья, тэги всегда пишу от руки, а по кнопке «Предпросмотр» промахнулся.
НЛО прилетело и опубликовало эту надпись здесь
Акценты в статье совершенно не те сделаны по-моему. Расковырять исходники можно практически от чего угодно. А вот то, что хакнутый клиент оставляет возможность играть в мультиплеер — однозначный косяк.
Вот именно. И если даже код обфусцирован, можно расковырять протокол обмена данными. Это примерно как в веб-приложениях с джаваскриптовой валидацией данных. Она как бы не помешает, но проверка данных на сервере — обязательна.
Может я слишком резок в оценке и суждениях, но я не верю, что эта статья набрала столько плюсов! В мире приложений .NET, которые никак не защищены, есть проблемы и покрупнее. Даже если вы «обезопасили» своё приложение словами protected/internal/sealed, на них есть другое слово в ответ — Reflection. Действительно попортить жизнь реверс-инженерам могут только серьёзные обфускаторы, шифрование сборок и иные серьёзные механизмы. Кулхацкеры, блин…
Да, в общем, даже обфускаторы особенно не могут. До тех пор, пока оно все сводится к четко определенной виртуальной машине — все будет достаточно тривиально деобфусцироваться. Единственный более-менее работающий способ — это уходить от существующей виртуальной машины, например, запуская в ней эмулятор какой-то другой машины (например, регистровую машину типа x86 или ARM) и компилировать защищаемый код под эту другую архитектуру. Разумеется, это будет работать достаточно медленно. И, конечно — это все тоже security through obscurity.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Если на клиенте есть уязвимость, нужно всегда ожидать, что она по вам ударит, на каком бы языке вы не писали. Пишите изначально исходя из того, что исходники вашего клиент утекли в сеть и сотни злобных школьников хакеров думают, как взломать ваш сервер.
Совершенно согласен, ещё и таким тоном написано, как будто автор — бог, а автор игры — лох.
С другой стороны, тут есть небольшой плюс: как я понимаю, именно это и позволило написать wrapper для запуска игры под маком. Wrapper на Mono, наследуя(?) основной класс, отключает проверку Steam (хотя он есть под маком, но игре он не нужен, как написано выше), запускает всё это дело вполне себе нативно. Хотелось бы узнать детали подхода, сам плохо разбираюсь.
Вообще-то автор игры писал, что
the decision to not obfuscate Terraria was made for a reason...
Не помню точно, как дела обстоят в .NET, а в Java меня бы не остановил какой-то там package private (friendly) доступ. Я бы просто создал класс в том же пакете (но в другом jar-файле) и всё бы работало как надо. Ну в крайнем случае можно и через javaagent как угодно всё сделать. Не верю, что в .NET не прокатят подобные трюки, пусть даже friendly-доступ действует на уровне сборки, а не на уровне пакета (неймспейса). Вплоть до того, что поменять один байтик в dll-файле. Так что без обфускации и грамотного запутывания тут никак не обойтись. Ну а то, что про валидацию написано — очень и очень справедливо. На самом деле, именно это и есть основной косяк.
Terraria: или пишите игры правильно
Неподходящее название т.к. статья просто показывает как пользоваться классами из сторонних библиотек. А произвести инъекцию в память стороннего приложения труда не составляет и это не из-за неправильно написанной игры. Если и говорить о безопасности данной игры то самая большая проблема — хранение профиля локально у игрока. Рефлектор есть берем класса отвечающий за профиль и редактируем сейв заполняя его топ айтемами.
Я не силён в .NET, но мне интересно, можно ли с помощью этого «рефлектора» пересобрать приложение, например, под Mono для Linux?
Реализации XNA под *nix нет
А как же XNA для Mono?
Неожиданно. Не слышал о нём.
В общем всё зависит от используемых библиотек. Если оные есть под *nix, то можно, т.к. утилиты, подобные reflector позволяют полностью восстановить исходный код.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Игра сделана for fun. Думаю, создатель не заморачивался по поводу хаков и прочего, т.к. нет принципиальной соревновательной цели. «Песочница».
Спасибо за отличную статью!
Интересно, а можно ли как-то обойти проверку видеокарты?

Кстати,
К примеру, как игрок может моментально переместиться из одной точки карты в другую за время, которое меньше секунды? Увы, сервер террарии считает это нормальным.

Есть такой предмет, как Magic Mirror
Проверка видеокарты происходит на уровне самого фреймворка.
Стоило бы придать главному классу модификатор доступа отличный от public, как все бы у нас провалилось.

Модификаторы доступа не мешают вызывать методы/свойства через Reflection. Просто в случае sealed/private враппер состоял бы из сплошных Type.GetType(...).GetMethod(...).Invoke(...);
Мне вот чисто из интереса, а если сделать что-то не-паблик, кому это помешает открыть байткод, сделать это паблик и не париться?
Да, выше говорили об «валидации клиента», дабы не пускать с «хакнутым». А как вы предлагаете это сделать так, чтобы нельзя было обойти? Давно интересует этот вопрос.
И что даст исспользование sealed/internal/private?
.net легко декомпилируется и reflection работает с самой первой версии? Что помешает мне пересобрать версию с нужными мне модификаторами?
Любую защиту при наличии физического доступа к иссполняемому коду можна сломать/обойти, вопрост только в стоимости.
Для разработчика игры защитой могла бы быть валидация логики на серверной части + обфускация и навешивание протектора на клиент, но это усложняет разработку и увеличивает её стоимость что для indy-разработчика может быть неприемлемо.
Игра больше не поддерживается, но ведь благодаря не обфусцированному коду, доступу почти к бОльшей части функций… можно по сути реализовать чуть ли не все то, что обещал разработчик, но не реализовал?!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории