Valentin Simonov “Who cracks our games and how that is done”
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Valentin Simonov “Who cracks our games and how that is done”

  • 7,006 views
Uploaded on

The lecture concerns spiteful hackers and the millions of those monkeys we have to resist every day. Are there any ways to protect ourselves of them and how. What should we pay prior attention to......

The lecture concerns spiteful hackers and the millions of those monkeys we have to resist every day. Are there any ways to protect ourselves of them and how. What should we pay prior attention to in online and offline games. The stories from real life and the real examples of cracking a few famous games.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
7,006
On Slideshare
5,657
From Embeds
1,349
Number of Embeds
6

Actions

Shares
Downloads
38
Comments
0
Likes
0

Embeds 1,349

http://www.flashgamm.com 1,202
http://flashgamm.com 127
http://www.slideshare.net 17
http://hghltd.yandex.net 1
http://translate.googleusercontent.com 1
http://webcache.googleusercontent.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Как защитить свою игру
    How to protect your game
    Valentin “valyard” Simonov
    TimeZero
    v@lent.in / va.lent.in / onenterframe.ru / @valyard
  • 2. Никак.
    You can’t.
  • 3. Не существует магического способа стопроцентной защиты.
    “Если вашу игру еще не взломали, значит она никому не нужна.”
    There’s no magical way to fully protect your game.
    “If your game has not been hacked yet, it means that nobody needs it.”
  • 4. vs.
    Ресурсы на взлом
    Attacker’s resources
    Ресурсы на защиту
    Defender’s resources
  • 5. Screw you guys!
    I’m going home!
  • 6. Кто? Who?
  • Читеры. Cheaters.
    • Добиваются преимущества в игре
    • 12. Большое количество, особенно в соц. играх
    • 13. В основном, ничего не умеют
    • 14. Редактирование памяти, подмена трафика / ресурсов
    • 15. Продажа услуг
    • 16. ЧСВ > 9000
    • 17. Looking for advantage in games
    • 18. Huge numbers, especially in social games
    • 19. Usually don’t know much
    • 20. Memory editing, traffic / resources swapping
    • 21. Selling services
    • 22. USI> 9000
    (Unwarranted Self-Importance)
    (Чувство Собственной Важности)
  • 23. Мониторинг комьюнити.
    Community monitoring.
    • Мониторить блоги на посты о своих проектах
    ( blogs.yandex.ru, google.com)
    • Посещать читерские комьюнити ( zhyk.ru )
    • 24. Поощрять за баг-репорты, проводить массовые репрессии
    • 25. Monitor blogs for posts about your projects
    ( blogs.yandex.ru, google.com)
    • Check cheater communities ( zhyk.ru )
    • 26. Encourage bug-reports, mass ban cheaters
  • Флэш разработчики.
    Flash developers.
    • Посмотреть как работает, что-нибудь скопипастить, поискать свой код
    • 27. Большинство останавливаются на декомпиляторах
    • 28. В основном знают что делают
    • 29. Порой, чем сложнее защита, тем интереснее
    • 30. Check how stuff works, copy and paste something, look for their own code
    • 31. Majority gives up at the decompiler stage
    • 32. Mostly know what they are doing
    • 33. Sometimes harder it is to crack something, more interesting it gets
  • Пираты. Pirates.
    • Украсть игру, повесить на свой сайт, выложить на вКонтакте
    • 34. В основном, подмножество флэшеров
    • 35. Интересуются как кодом, так и всеми ресурсами игры
    • 36. Поставлено на поток
    • 37. Steal a game, copy it to their site, publish to vKontakte
    • 38. Usually a subset of flash developers
    • 39. Are interested in source code and all other resources as well
    • 40. Mass stealing
  • Как? How?
    • Клиент
    Защита SWF клиента как в офлайн, так и в онлайн играх
    • Клиент-сервер
    Защита взаимодействия игрового клиента с сервером
    • Client
    Client SWF protection in both offline and online games
    • Client-server
    Protecting data from game client to server
  • 41. Клиент. Client.
    • Flash полностью под контролем хакера
    • 42. Невозможно зашифровать или защититься от декомпиляции
    • 43. Flash is in total control of the hacker
    • 44. You can’t encrypt it or protect from being decompiled
  • Что нужно знать
    и что можно сделать.
    What you must know
    and what can be done.
  • 45. URL-lock.
    • Зашивание URL сайта внутрь SWF
    • 46. Позволяет блокировать воспроизведение с «левых» сайтов
    • 47. loaderInfo.url
    • 48. Самая простая защита, легко обходится
    • 49. Рекомендуется шифрование URL
    • 50. Locking your site URL inside SWF
    • 51. Allows blocking execution from other domains
    • 52. loaderInfo.url
    • 53. The easies method, easy to disable
    • 54. URL encryption is recommended
  • Память. Memory.
    • Изменение значений в памяти
    • 55. varhealth:uint = 100
    • 56. http://cheatengine.com
    • 57. http://artmoney.ru
    • 58. Простой сдвиг на случайное число, XOR значения или шифрование
    • 59. Не хранить голое значение
    • 60. Changing values in memory
    • 61. varhealth:uint = 100
    • 62. http://cheatengine.com
    • 63. http://artmoney.ru
    • 64. Simple displacing with a random number, XORing or encrypting values
    • 65. Don’t store plain values in memory
  • Подмена ресурсов.
    Resources substitution.
    • Замена ресурсов в кэше браузера
    • 66. Прозрачные текстуры
    • 67. Хакнутые классы в SWF
    • 68. Браузер не может гарантировать подлинность
    • 69. MD5, шифрование, загрузка через Loader.loadBytes
    • 70. Resources substitution in browser cache
    • 71. Transparent textures
    • 72. Hacked classes in SWF
    • 73. Browser can’t guarantee authenticity
    • 74. MD5, encryption, loading with Loader.loadBytes
  • Подмена классов.
    Classes substitution.
    • SWF загружается в лоадер с хакнутым классом «защиты»
    • 75. ApplicationDomain
    • 76. Проверять загружены ли мы кем-то
    • 77. override public методы
    • 78. Параметр в конструктор
    • 79. hasDefinition
    • 80. Грузить в новый ApplicationDomain
    • 81. SWF is loaded into a loader with hacked “protection” class
    • 82. ApplicationDomain
    • 83. Check if we are loaded by someone
    • 84. override public methods
    • 85. Default constructor parameter
    • 86. hasDefinition
    • 87. Load into a new ApplicationDomain
  • Декомпиляторы. Decompilers.
    • Лучшие друзья взломщиков
    • 88. Из незащищенных SWF могут генерить FLA проекты
    • 89. Постоянно развиваются
    • 90. Большая масса самописных тулзов
    • 91. Пока еще существую простые способы обходить
    • 92. Hackers’ best friends
    • 93. Can generate FLA projects from unprotectedSWF files
    • 94. Rapidly evolve
    • 95. There’re even more proprietary tools
    • 96. We still have several simple ways to trick them
  • Декомпиляторы. Decompilers.
    Простые методы:
    • internal функции
    • 97. [embed] SWF
    • 98. Свои мета данные
    • 99. Замена строк в SWF на зарезервированные слова
    • 100. Обфускация
    Simple methods:
    • internal functions
    • 101. [embed] SWF
    • 102. Custom meta tags
    • 103. Strings substitution in resulting SWF file with reserved words
    • 104. Obfuscation
  • Обфускация. Obfuscation.
    Усложнение читаемости / возможности декомпиляции
    • Классы по 100Кб
    • 105. Обработка исходников
    • 106. Обработка байткода
    Making reading / decompiling very hard
    • Classes of 100Kb each
    • 107. Source code obfuscation
    • 108. Bytecode obfuscation
  • Обфускация. Obfuscation.
    Что делает обфускация?
    • Невозможность перевода обратно байткод -> AS3
    • 109. Лишние инструкции, переходы и мусорный код
    • 110. Замена строк на зарезервированные слова
    • 111. URL-lock и другие фишки
    What does obfuscation do?
    • Impossible to convert from Bytecode to AS3 back
    • 112. Additional instructions, jumps and garbage code
    • 113. Changing strings to reserved words
    • 114. URL-lock and other features
  • Обфускация. Obfuscation.
    • secureSWF (kindisoft.com) – самый удачный выбор
    • 115. Плохой выбор: Amayeta SWF Encrypt, SWF Protect, Mochi Crypt
    • 116. Антиобфускаторы
    • 117. Самописные тулзы
    • 118. secureSWF (kindisoft.com) – the best choice
    • 119. Poor choice: Amayeta SWF Encrypt, SWF Protect, Mochi Crypt
    • 120. Antiobfuscators
    • 121. Proprietary tools
  • Обфускация. Obfuscation.
    Проблемы.
    • Зависимость современных библиотек от имен классов
    • 122. Мусорный код уменьшает производительность
    • 123. Не всегда работает получившийся SWF
    Problems.
    • Modern libraries depend on class names
    • 124. Garbage code slows down execution
    • 125. Resulting SWF isn’t always working
  • Клиент. Client.
    Advanced
    Копаем внутрь SWF.
    Digging into SWF internals.
    adobe.com/devnet/swf
    SWF, AVM2 Bytecode specification
    codeazur.com.br/fitc/HackingSWF.pdf
    SWF format
    github.com/claus/as3swf
    code.google.com/p/apparat
  • 126. SWF.
    Бинарный формат
    Binary format
    • adobe.com/devnet/swf/pdf/swf_file_format_spec_v10.pdf
    • 127. Состоит из отдельных тэгов
    • 128. Область с тэгами обычно запакована
    • 129. adobe.com/devnet/swf/pdf/swf_file_format_spec_v10.pdf
    • 130. Consists of separate tags
    • 131. Tags container is usually zipped
    Header
    Tag
    Tag

    Tag
  • 132. SWF.
    [Embed]
    DefineBinaryData (87)
    • Хранит любые (не обязательно бинарные) данные
    • 133. Загружать через Loader.loadBytes
    • 134. Виден декомпиляторами как пустой класс
    • 135. Contains any (not necessary binary) data
    • 136. Load withLoader.loadBytes
    • 137. Seen by decompilers as empty class
    Header
    Tag
    DefineBinaryData

    Tag
  • 138. SWF.
    ActionScript 3.0 bytecode
    DoABC(82)
    • adobe.com/go/avm2overview/
    • 139. Содержит исполняемый байткод
    • 140. Основная цель обфускаторов и декомпиляторов, соответственно
    • 141. adobe.com/go/avm2overview/
    • 142. Contains executable bytecode
    • 143. Main target of obfuscators and decompilers
    Header
    Tag
    DoABC

    Tag
  • 144. SWF.
    abcFile{
    minor_version
    major_version
    cpool_info
    constant_pool
    method_count
    method_info
    method[method_count]
    metadata_count
    metadata_info
    metadata[metadata_count]
    class_count
    instance_info
    instance[class_count]
    class_info
    class[class_count]
    script_count
    script_info
    script[script_count]
    method_body_count
    method_body_info
    method_body[method_body_count]
    }
    ActionScript 3.0 bytecode
    DoABC(82)
    cpool_info{
    integers
    uintegers
    doubles
    strings
    }
    Содержит все строки в коде
    Contains all strings within the code
    Обфускаторы заменяют названия на зарезервированные слова
    Obfuscators change strings to reserved words
  • 145. SWF.
    function get hash():uint /* disp_id 0*/
    {
    0 getlocal0
    1 pushscope
    2 pushbyte 0
    4 convert_u
    5 setlocal2
    6 pushbyte 0
    8 convert_d
    9 setlocal1
    10 getlocal0
    11 getsuper length
    14 pushbyte 8
    16 ifnltL1

    L2:
    50 getlocal2
    51 getlocal0
    52 getsuper length
    55 lessthan
    56 dup
    57 iffalse L4
    61 pop
    62 getlocal2
    63 pushbyte 8
    65 lessthan
    L5:
    81 getlocal1
    82 returnvalue
    }
    ActionScript 3.0 bytecode
    DoABC(82)
    • adobe.com/devnet/actionscript/articles/avm2overview.pdf
    • 146. www.docsultant.com/nemo440
    • 147. code.google.com/p/apparat
    • 148. swfdump
    • 149. abcdump
  • SWF.
    function get hash():uint /* disp_id 0*/
    {
    0 getlocal0
    1 pushscope
    2 pushbyte 0
    4 convert_u
    5 setlocal2
    6 pushbyte 0
    8 convert_d
    9 setlocal1
    10 getlocal0
    11 getsuper length
    14 pushbyte 8
    16 ifnltL1

    L2:
    50 getlocal2
    51 getlocal0
    52 getsuper length
    55 lessthan
    56 dup
    57 iffalse L4
    61 pop
    62 getlocal2
    63 pushbyte 8
    65 lessthan
    L5:
    81 getlocal1
    82 returnvalue
    }
    ActionScript 3.0 bytecode
    DoABC(82)
    • Обфускаторы добавляют лишние переходы
    • 150. Мусорный невыполняемый код
    • 151. Делают чрезвычайно сложным разобрать алгоритм
    • 152. Оbfuscators add unnecessary jumps
    • 153. Garbage code
    • 154. Make extremely hard to find out what is going on
  • SWF.
    ActionScript 3.0 bytecode
    Custom Tag (??)
    • AVM2 игнорирует неизвестные тэги
    • 155. Декомпиляторы тоже
    • 156. Можно добраться программно распарсив SWF
    • 157. Прятать ресурсы
    • 158. AVM2 ignores unknown tags
    • 159. Decompilers too
    • 160. Parse SWF to get to content
    • 161. Hide resources
    Header
    Tag
    Custom Tag

    Tag
  • 162. SWF.
    ActionScript 3.0 bytecode
    Custom Tag (??)
    • Прятать ресурсы
    • 163. Шифровать данные
    • 164. Комбинировать с другими методами
    • 165. Hide resources
    • 166. Encrypt data
    • 167. Combine with other methods
  • Matrioshka.
    Лоадер расшифровывает загружаемый (спрятанный) файл
    Тот в свою очередь загружает (выковыривает из себя) данные
    gotoAndPlay(2);
    Main loader loads (extracts) a file
    It loads (extracts from itself) another one
    gotoAndPlay(2);
  • 168. При достаточной вложенности имеем солидную головную боль
    Ifhighly nested represents a major p.i.t.a.
  • 169. Клиент-сервер.
    Client-server.
    • Толстый клиент vs. тонкий клиент( с толстым клиентом проблемы взрослых игр: спидхаки, волхаки, телепорты )
    • 170. Подмена трафика
    • 171. Взломанный клиент
    • 172. Взрослые ресурсыgamasutra.com, dtf.ru
    • 173. Thick client vs. thin client( with thick client we have problems of bigger games: speedhacks, wallhacks, teleports )
    • 174. Traffic substitution
    • 175. Hacked client
    • 176. Взрослые ресурсыgamasutra.com, dtf.ru
  • Тонкий клиент.
    Thick client.
    • Не стоит писать игры на деньги, где клиент может быть слабым звеном (аркады, например)
    • 177. Нельзя доверять клиенту
    • 178. Нельзя доверять ничему, что приходит на сервер
    • 179. Тонкий клиент и параноидальный сервер
    • 180. You shouldn’t make games which involve money where the client can be a weak link (for example arcades)
    • 181. Never trust the client
    • 182. Never trust anything coming to the server
    • 183. Thin client and paranoid server
  • Сервер.
    Server.
    • Это не наши проблемы, а сервера, пусть записывает
    • 184. Все же стоит понимать что происходит
    • 185. Сервер должен проверять все, что приходит от клиента
    • 186. Клиенту следует проверять вводимые данные
    • 187. These are server-side problems, it’s its job to log stuff
    • 188. Though you should understand what’s going on
    • 189. Server must check every input from client
    • 190. Client shouldcheck user input
  • Трафик.
    Traffic.
    • Подмена трафика через прокси (например, Charles)
    • 191. Многократная отправка пакетов
    • 192. Подмена числовых значений и идентификаторов (например, продажа -1 предмета)
    • 193. Результат игры не играя
    • 194. Невалидные пакеты
    • 195. Traffic substitution with a proxy(for exampleCharles)
    • 196. Sending multiple identical packets
    • 197. Numerical values and IDs substitution (for example selling -1 item)
    • 198. Sending scores without actually playing
    • 199. Invalid packets
  • Протокол.
    Protocol.
    • Текстовые данные — легко читается и модифицируется
    • 200. Бинарный протокол — сложнее разобраться, легко модифицируется
    • 201. Шифрование — сложно разобраться, сложно модифицировать
    • 202. Бинарный протокол является слабым шифрованием
    • 203. Text data—easy to read, easy to modify
    • 204. Binary protocol — harder to understand, easy to modify
    • 205. Encryption— hard to crack, hard to modify
    • 206. Binary protocol is actually a case of weak encryption
  • Обезьяны.Monkeys.
    • В социальных играх с множеством игроков дело времени когда кто-то подберет работающий хак
    • 207. Миллион обезьян за конечное время напишут роман сломают ваш протокол
    • 208. Они любят делиться результатамиповышая ЧСВ
    • 209. In social games with lots of players it’s a matter of time when someone finds a working hack
    • 210. Million monkeys in finite time willwrite a novelbreak your protocol
    • 211. They like to share their findings
  • Шифрование.
    Encryption.
    • Шифрование (в том числе SSL) не имеет смысла, когда нельзя доверять одной из сторон
    • 212. Ресурсы клиента и сервера
    • 213. Нельзя понять что за пакет без расшифровки если шифровать полностью
    • 214. Encryption(including SSL) doesn’t make much sense if one of the sides can’t be trusted
    • 215. Spending client’s and server’s resources
    • 216. Can’t understand what this packet is without decryption if fully encrypted
  • Шифрование.
    Encryption.
    • Множество алгоритмов шифрования, начиная с простого XOR
    • 217. Добавлять номер пакета
    • 218. Для балансировки нагрузки добавлять заголовки к зашифрованным пакетам
    • 219. Lots of encryption algorithms starting with simpleXOR
    • 220. Add packet number
    • 221. For load balancing add headers to encrypted packets
  • Боты. Bots.
    • Взломанный / поддельный flash клиент
    • 222. Специальный нефлэшевый клиент
    • 223. Программы автоматизации действийКто из вас фармил honor на Alterac Valley?
    • 224. Hacked / fake flashclient
    • 225. Special non-flash client
    • 226. Automatization softwareHas any of you farmedhonor at AlteracValley?
  • Боты. Bots.
    • Фарм (нудные повторяющиеся действия)
    • 227. Бой
    • 228. Торговля
    • 229. Затрагивают баланс игры
    • 230. Не всегда плохо
    • 231. Farming (boring repetitive actions)
    • 232. Fight
    • 233. Selling and buying stuff
    • 234. Interfere in game balance
    • 235. Not essentially evil
  • Боты. Bots.
    • Не давать залогиниться, например присылать механизм авторизации с сервера
    • 236. Отличия от пользователя (быстрые действия, MOUSE_OUT сразу после CLICK)
    • 237. Сложно что-то сделать с внешними программами из браузера
    • 238. Проблемы больших игр
    • 239. Don’t let them log in, for example choose authorization mechanism server-side
    • 240. Different from users(fast actions, MOUSE_OUT immediately afterCLICK)
    • 241. Hard to do anything with external applications within browser limits
    • 242. Problem of bigger games
  • Кто как защищает свои игры.
    How people protect their games.
  • 243. Защита. Protection.
    • Инди — url-lock, обфускация, самописные тулзы
    • 244. Zynga — никак, даже наоборот
    • 245. TimeZero — бинарный протокол, заумный код
    • 246. В основном никто никак не защищает
    • 247. Indie— url-lock, obfuscation, proprietary tools
    • 248. Zynga — doesn’t protect anything, even makes it easier to steal stuff
    • 249. TimeZero — binary protocol, hard to understand code
    • 250. Not many people actually protect their games
  • Как защитить свою игру
    How to protect your game
    Valentin “valyard” Simonov
    TimeZero
    v@lent.in / va.lent.in / onenterframe.ru / @valyard
    Thanks to:
    NikolayRyzhy, Denis Kolyako, AndreyBelash, Anton Volkov, myxus,IliaPlotnikov, TimeZero and Mail.ru staff and other people who helped me.