Как защитить свою игру<br />How to protect your game<br />Valentin “valyard” Simonov<br />TimeZero<br />v@lent.in / va.len...
Никак.<br />You can’t.<br />
Не существует магического способа стопроцентной защиты.<br />“Если вашу игру еще не взломали, значит она никому не нужна.”...
vs.<br />Ресурсы на взлом<br />Attacker’s resources<br />Ресурсы на защиту<br />Defender’s resources<br />
Screw you guys!<br />I’m going home!<br />
Кто? Who?<br /><ul><li>Читеры
Флэшеры
Пираты
Cheaters
 Flash developers
 Pirates</li></li></ul><li>Читеры. Cheaters.<br /><ul><li>Добиваются преимущества в игре
 Большое количество, особенно в соц. играх
В основном, ничего не умеют
Редактирование памяти, подмена трафика / ресурсов
Продажа услуг
ЧСВ > 9000
Looking for advantage in games
Huge numbers, especially in social games
Usually don’t know much
Memory editing, traffic / resources swapping
Selling services
USI> 9000</li></ul>(Unwarranted Self-Importance)<br />(Чувство Собственной Важности)<br />
Мониторинг комьюнити. <br />Community monitoring.<br /><ul><li>Мониторить блоги на посты о своих проектах</li></ul>( blogs...
Поощрять за баг-репорты, проводить массовые репрессии
Monitor blogs for posts about your projects</li></ul>( blogs.yandex.ru, google.com)<br /><ul><li>Check cheater communities...
Encourage bug-reports, mass ban cheaters</li></li></ul><li>Флэш разработчики. <br />Flash developers.<br /><ul><li>Посмотр...
 Большинство останавливаются на декомпиляторах
В основном знают что делают
 Порой, чем сложнее защита, тем интереснее
Check how stuff works, copy and paste something, look for their own code
Majority gives up at the decompiler stage
Mostly know what they are doing
Sometimes harder it is to crack something, more interesting it gets</li></li></ul><li>Пираты. Pirates.<br /><ul><li>Украст...
 В основном, подмножество флэшеров
Интересуются как кодом, так и всеми ресурсами игры
Поставлено на поток
Steal a game, copy it to their site, publish to vKontakte
Usually a subset of flash developers
Are interested in source code and all other resources as well
Mass stealing</li></li></ul><li>Как? How?<br /><ul><li>Клиент</li></ul>Защита SWF клиента как в офлайн, так и в онлайн игр...
Клиент. Client.<br /><ul><li>Flash полностью под контролем хакера
 Невозможно зашифровать или защититься от декомпиляции
Flash is in total control of the hacker
You can’t encrypt it or protect from being decompiled</li></li></ul><li>Что нужно знать <br />и что можно сделать.<br />Wh...
URL-lock.<br /><ul><li>Зашивание URL сайта внутрь SWF
 Позволяет блокировать воспроизведение с «левых» сайтов
loaderInfo.url
Самая простая защита, легко обходится
Upcoming SlideShare
Loading in …5
×

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

6,494 views

Published 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 in online and offline games. The stories from real life and the real examples of cracking a few famous games.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
6,494
On SlideShare
0
From Embeds
0
Number of Embeds
1,385
Actions
Shares
0
Downloads
44
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Как защитить свою игру<br />How to protect your game<br />Valentin “valyard” Simonov<br />TimeZero<br />v@lent.in / va.lent.in / onenterframe.ru / @valyard<br />
  2. 2. Никак.<br />You can’t.<br />
  3. 3. Не существует магического способа стопроцентной защиты.<br />“Если вашу игру еще не взломали, значит она никому не нужна.”<br />There’s no magical way to fully protect your game.<br />“If your game has not been hacked yet, it means that nobody needs it.”<br />
  4. 4. vs.<br />Ресурсы на взлом<br />Attacker’s resources<br />Ресурсы на защиту<br />Defender’s resources<br />
  5. 5. Screw you guys!<br />I’m going home!<br />
  6. 6. Кто? Who?<br /><ul><li>Читеры
  7. 7. Флэшеры
  8. 8. Пираты
  9. 9. Cheaters
  10. 10. Flash developers
  11. 11. Pirates</li></li></ul><li>Читеры. Cheaters.<br /><ul><li>Добиваются преимущества в игре
  12. 12. Большое количество, особенно в соц. играх
  13. 13. В основном, ничего не умеют
  14. 14. Редактирование памяти, подмена трафика / ресурсов
  15. 15. Продажа услуг
  16. 16. ЧСВ > 9000
  17. 17. Looking for advantage in games
  18. 18. Huge numbers, especially in social games
  19. 19. Usually don’t know much
  20. 20. Memory editing, traffic / resources swapping
  21. 21. Selling services
  22. 22. USI> 9000</li></ul>(Unwarranted Self-Importance)<br />(Чувство Собственной Важности)<br />
  23. 23. Мониторинг комьюнити. <br />Community monitoring.<br /><ul><li>Мониторить блоги на посты о своих проектах</li></ul>( blogs.yandex.ru, google.com)<br /><ul><li> Посещать читерские комьюнити ( zhyk.ru )
  24. 24. Поощрять за баг-репорты, проводить массовые репрессии
  25. 25. Monitor blogs for posts about your projects</li></ul>( blogs.yandex.ru, google.com)<br /><ul><li>Check cheater communities ( zhyk.ru )
  26. 26. Encourage bug-reports, mass ban cheaters</li></li></ul><li>Флэш разработчики. <br />Flash developers.<br /><ul><li>Посмотреть как работает, что-нибудь скопипастить, поискать свой код
  27. 27. Большинство останавливаются на декомпиляторах
  28. 28. В основном знают что делают
  29. 29. Порой, чем сложнее защита, тем интереснее
  30. 30. Check how stuff works, copy and paste something, look for their own code
  31. 31. Majority gives up at the decompiler stage
  32. 32. Mostly know what they are doing
  33. 33. Sometimes harder it is to crack something, more interesting it gets</li></li></ul><li>Пираты. Pirates.<br /><ul><li>Украсть игру, повесить на свой сайт, выложить на вКонтакте
  34. 34. В основном, подмножество флэшеров
  35. 35. Интересуются как кодом, так и всеми ресурсами игры
  36. 36. Поставлено на поток
  37. 37. Steal a game, copy it to their site, publish to vKontakte
  38. 38. Usually a subset of flash developers
  39. 39. Are interested in source code and all other resources as well
  40. 40. Mass stealing</li></li></ul><li>Как? How?<br /><ul><li>Клиент</li></ul>Защита SWF клиента как в офлайн, так и в онлайн играх<br /><ul><li>Клиент-сервер</li></ul>Защита взаимодействия игрового клиента с сервером<br /><ul><li>Client</li></ul>Client SWF protection in both offline and online games<br /><ul><li> Client-server</li></ul>Protecting data from game client to server<br />
  41. 41. Клиент. Client.<br /><ul><li>Flash полностью под контролем хакера
  42. 42. Невозможно зашифровать или защититься от декомпиляции
  43. 43. Flash is in total control of the hacker
  44. 44. You can’t encrypt it or protect from being decompiled</li></li></ul><li>Что нужно знать <br />и что можно сделать.<br />What you must know <br />and what can be done.<br />
  45. 45. URL-lock.<br /><ul><li>Зашивание URL сайта внутрь SWF
  46. 46. Позволяет блокировать воспроизведение с «левых» сайтов
  47. 47. loaderInfo.url
  48. 48. Самая простая защита, легко обходится
  49. 49. Рекомендуется шифрование URL
  50. 50. Locking your site URL inside SWF
  51. 51. Allows blocking execution from other domains
  52. 52. loaderInfo.url
  53. 53. The easies method, easy to disable
  54. 54. URL encryption is recommended</li></li></ul><li>Память. Memory.<br /><ul><li>Изменение значений в памяти
  55. 55. varhealth:uint = 100
  56. 56. http://cheatengine.com
  57. 57. http://artmoney.ru
  58. 58. Простой сдвиг на случайное число, XOR значения или шифрование
  59. 59. Не хранить голое значение
  60. 60. Changing values in memory
  61. 61. varhealth:uint = 100
  62. 62. http://cheatengine.com
  63. 63. http://artmoney.ru
  64. 64. Simple displacing with a random number, XORing or encrypting values
  65. 65. Don’t store plain values in memory</li></li></ul><li>Подмена ресурсов. <br />Resources substitution.<br /><ul><li>Замена ресурсов в кэше браузера
  66. 66. Прозрачные текстуры
  67. 67. Хакнутые классы в SWF
  68. 68. Браузер не может гарантировать подлинность
  69. 69. MD5, шифрование, загрузка через Loader.loadBytes
  70. 70. Resources substitution in browser cache
  71. 71. Transparent textures
  72. 72. Hacked classes in SWF
  73. 73. Browser can’t guarantee authenticity
  74. 74. MD5, encryption, loading with Loader.loadBytes</li></li></ul><li>Подмена классов. <br />Classes substitution.<br /><ul><li>SWF загружается в лоадер с хакнутым классом «защиты»
  75. 75. ApplicationDomain
  76. 76. Проверять загружены ли мы кем-то
  77. 77. override public методы
  78. 78. Параметр в конструктор
  79. 79. hasDefinition
  80. 80. Грузить в новый ApplicationDomain
  81. 81. SWF is loaded into a loader with hacked “protection” class
  82. 82. ApplicationDomain
  83. 83. Check if we are loaded by someone
  84. 84. override public methods
  85. 85. Default constructor parameter
  86. 86. hasDefinition
  87. 87. Load into a new ApplicationDomain</li></li></ul><li>Декомпиляторы. Decompilers.<br /><ul><li>Лучшие друзья взломщиков
  88. 88. Из незащищенных SWF могут генерить FLA проекты
  89. 89. Постоянно развиваются
  90. 90. Большая масса самописных тулзов
  91. 91. Пока еще существую простые способы обходить
  92. 92. Hackers’ best friends
  93. 93. Can generate FLA projects from unprotectedSWF files
  94. 94. Rapidly evolve
  95. 95. There’re even more proprietary tools
  96. 96. We still have several simple ways to trick them</li></li></ul><li>Декомпиляторы. Decompilers.<br />Простые методы:<br /><ul><li>internal функции
  97. 97. [embed] SWF
  98. 98. Свои мета данные
  99. 99. Замена строк в SWF на зарезервированные слова
  100. 100. Обфускация</li></ul>Simple methods:<br /><ul><li>internal functions
  101. 101. [embed] SWF
  102. 102. Custom meta tags
  103. 103. Strings substitution in resulting SWF file with reserved words
  104. 104. Obfuscation</li></li></ul><li>Обфускация. Obfuscation.<br />Усложнение читаемости / возможности декомпиляции<br /><ul><li> Классы по 100Кб
  105. 105. Обработка исходников
  106. 106. Обработка байткода</li></ul>Making reading / decompiling very hard<br /><ul><li>Classes of 100Kb each
  107. 107. Source code obfuscation
  108. 108. Bytecode obfuscation</li></li></ul><li>Обфускация. Obfuscation.<br />Что делает обфускация?<br /><ul><li>Невозможность перевода обратно байткод -> AS3
  109. 109. Лишние инструкции, переходы и мусорный код
  110. 110. Замена строк на зарезервированные слова
  111. 111. URL-lock и другие фишки</li></ul>What does obfuscation do?<br /><ul><li>Impossible to convert from Bytecode to AS3 back
  112. 112. Additional instructions, jumps and garbage code
  113. 113. Changing strings to reserved words
  114. 114. URL-lock and other features</li></li></ul><li>Обфускация. Obfuscation.<br /><ul><li>secureSWF (kindisoft.com) – самый удачный выбор
  115. 115. Плохой выбор: Amayeta SWF Encrypt, SWF Protect, Mochi Crypt
  116. 116. Антиобфускаторы
  117. 117. Самописные тулзы
  118. 118. secureSWF (kindisoft.com) – the best choice
  119. 119. Poor choice: Amayeta SWF Encrypt, SWF Protect, Mochi Crypt
  120. 120. Antiobfuscators
  121. 121. Proprietary tools</li></li></ul><li>Обфускация. Obfuscation.<br />Проблемы.<br /><ul><li>Зависимость современных библиотек от имен классов
  122. 122. Мусорный код уменьшает производительность
  123. 123. Не всегда работает получившийся SWF</li></ul>Problems.<br /><ul><li>Modern libraries depend on class names
  124. 124. Garbage code slows down execution
  125. 125. Resulting SWF isn’t always working</li></li></ul><li>Клиент. Client.<br />Advanced<br />Копаем внутрь SWF.<br />Digging into SWF internals.<br />adobe.com/devnet/swf<br />SWF, AVM2 Bytecode specification<br />codeazur.com.br/fitc/HackingSWF.pdf<br />SWF format<br />github.com/claus/as3swf<br />code.google.com/p/apparat<br />
  126. 126. SWF.<br />Бинарный формат<br />Binary format<br /><ul><li>adobe.com/devnet/swf/pdf/swf_file_format_spec_v10.pdf
  127. 127. Состоит из отдельных тэгов
  128. 128. Область с тэгами обычно запакована
  129. 129. adobe.com/devnet/swf/pdf/swf_file_format_spec_v10.pdf
  130. 130. Consists of separate tags
  131. 131. Tags container is usually zipped</li></ul>Header<br />Tag<br />Tag<br />…<br />Tag<br />
  132. 132. SWF.<br />[Embed]<br />DefineBinaryData (87)<br /><ul><li>Хранит любые (не обязательно бинарные) данные
  133. 133. Загружать через Loader.loadBytes
  134. 134. Виден декомпиляторами как пустой класс
  135. 135. Contains any (not necessary binary) data
  136. 136. Load withLoader.loadBytes
  137. 137. Seen by decompilers as empty class</li></ul>Header<br />Tag<br />DefineBinaryData<br />…<br />Tag<br />
  138. 138. SWF.<br />ActionScript 3.0 bytecode<br />DoABC(82)<br /><ul><li>adobe.com/go/avm2overview/
  139. 139. Содержит исполняемый байткод
  140. 140. Основная цель обфускаторов и декомпиляторов, соответственно
  141. 141. adobe.com/go/avm2overview/
  142. 142. Contains executable bytecode
  143. 143. Main target of obfuscators and decompilers</li></ul>Header<br />Tag<br />DoABC<br />…<br />Tag<br />
  144. 144. SWF.<br />abcFile{<br />minor_version<br />major_version<br />cpool_info<br />constant_pool<br />method_count<br />method_info<br />method[method_count]<br />metadata_count<br />metadata_info<br />metadata[metadata_count]<br />class_count<br />instance_info<br />instance[class_count]<br />class_info<br />class[class_count]<br />script_count<br />script_info<br />script[script_count]<br />method_body_count<br />method_body_info<br />method_body[method_body_count]<br />}<br />ActionScript 3.0 bytecode<br />DoABC(82)<br />cpool_info{<br /> integers<br />uintegers<br /> doubles<br />strings<br />}<br />Содержит все строки в коде<br />Contains all strings within the code<br />Обфускаторы заменяют названия на зарезервированные слова<br />Obfuscators change strings to reserved words<br />
  145. 145. SWF.<br />function get hash():uint /* disp_id 0*/<br /> {<br /> 0 getlocal0 <br /> 1 pushscope<br /> 2 pushbyte 0<br /> 4 convert_u<br /> 5 setlocal2 <br /> 6 pushbyte 0<br /> 8 convert_d<br /> 9 setlocal1 <br /> 10 getlocal0 <br /> 11 getsuper length<br /> 14 pushbyte 8<br /> 16 ifnltL1<br /> …<br /> L2: <br /> 50 getlocal2 <br /> 51 getlocal0 <br /> 52 getsuper length<br /> 55 lessthan<br /> 56 dup <br /> 57 iffalse L4<br /> 61 pop <br /> 62 getlocal2 <br /> 63 pushbyte 8<br /> 65 lessthan<br /> L5: <br /> 81 getlocal1 <br /> 82 returnvalue<br /> }<br />ActionScript 3.0 bytecode<br />DoABC(82)<br /><ul><li>adobe.com/devnet/actionscript/articles/avm2overview.pdf
  146. 146. www.docsultant.com/nemo440
  147. 147. code.google.com/p/apparat
  148. 148. swfdump
  149. 149. abcdump</li></li></ul><li>SWF.<br />function get hash():uint /* disp_id 0*/<br /> {<br /> 0 getlocal0 <br /> 1 pushscope<br /> 2 pushbyte 0<br /> 4 convert_u<br /> 5 setlocal2 <br /> 6 pushbyte 0<br /> 8 convert_d<br /> 9 setlocal1 <br /> 10 getlocal0 <br /> 11 getsuper length<br /> 14 pushbyte 8<br /> 16 ifnltL1<br /> …<br /> L2: <br /> 50 getlocal2 <br /> 51 getlocal0 <br /> 52 getsuper length<br /> 55 lessthan<br /> 56 dup <br /> 57 iffalse L4<br /> 61 pop <br /> 62 getlocal2 <br /> 63 pushbyte 8<br /> 65 lessthan<br /> L5: <br /> 81 getlocal1 <br /> 82 returnvalue<br /> }<br />ActionScript 3.0 bytecode<br />DoABC(82)<br /><ul><li>Обфускаторы добавляют лишние переходы
  150. 150. Мусорный невыполняемый код
  151. 151. Делают чрезвычайно сложным разобрать алгоритм
  152. 152. Оbfuscators add unnecessary jumps
  153. 153. Garbage code
  154. 154. Make extremely hard to find out what is going on</li></li></ul><li>SWF.<br />ActionScript 3.0 bytecode<br />Custom Tag (??)<br /><ul><li>AVM2 игнорирует неизвестные тэги
  155. 155. Декомпиляторы тоже
  156. 156. Можно добраться программно распарсив SWF
  157. 157. Прятать ресурсы
  158. 158. AVM2 ignores unknown tags
  159. 159. Decompilers too
  160. 160. Parse SWF to get to content
  161. 161. Hide resources</li></ul>Header<br />Tag<br />Custom Tag<br />…<br />Tag<br />
  162. 162. SWF.<br />ActionScript 3.0 bytecode<br />Custom Tag (??)<br /><ul><li>Прятать ресурсы
  163. 163. Шифровать данные
  164. 164. Комбинировать с другими методами
  165. 165. Hide resources
  166. 166. Encrypt data
  167. 167. Combine with other methods</li></li></ul><li>Matrioshka.<br />Лоадер расшифровывает загружаемый (спрятанный) файл<br />Тот в свою очередь загружает (выковыривает из себя) данные<br />gotoAndPlay(2);<br />Main loader loads (extracts) a file<br />It loads (extracts from itself) another one<br />gotoAndPlay(2);<br />
  168. 168. При достаточной вложенности имеем солидную головную боль<br />Ifhighly nested represents a major p.i.t.a.<br />
  169. 169. Клиент-сервер. <br />Client-server.<br /><ul><li>Толстый клиент vs. тонкий клиент( с толстым клиентом проблемы взрослых игр: спидхаки, волхаки, телепорты )
  170. 170. Подмена трафика
  171. 171. Взломанный клиент
  172. 172. Взрослые ресурсыgamasutra.com, dtf.ru
  173. 173. Thick client vs. thin client( with thick client we have problems of bigger games: speedhacks, wallhacks, teleports )
  174. 174. Traffic substitution
  175. 175. Hacked client
  176. 176. Взрослые ресурсыgamasutra.com, dtf.ru</li></li></ul><li>Тонкий клиент. <br />Thick client.<br /><ul><li>Не стоит писать игры на деньги, где клиент может быть слабым звеном (аркады, например)
  177. 177. Нельзя доверять клиенту
  178. 178. Нельзя доверять ничему, что приходит на сервер
  179. 179. Тонкий клиент и параноидальный сервер
  180. 180. You shouldn’t make games which involve money where the client can be a weak link (for example arcades)
  181. 181. Never trust the client
  182. 182. Never trust anything coming to the server
  183. 183. Thin client and paranoid server</li></li></ul><li>Сервер. <br />Server.<br /><ul><li>Это не наши проблемы, а сервера, пусть записывает
  184. 184. Все же стоит понимать что происходит
  185. 185. Сервер должен проверять все, что приходит от клиента
  186. 186. Клиенту следует проверять вводимые данные
  187. 187. These are server-side problems, it’s its job to log stuff
  188. 188. Though you should understand what’s going on
  189. 189. Server must check every input from client
  190. 190. Client shouldcheck user input</li></li></ul><li>Трафик. <br />Traffic.<br /><ul><li>Подмена трафика через прокси (например, Charles)
  191. 191. Многократная отправка пакетов
  192. 192. Подмена числовых значений и идентификаторов (например, продажа -1 предмета)
  193. 193. Результат игры не играя
  194. 194. Невалидные пакеты
  195. 195. Traffic substitution with a proxy(for exampleCharles)
  196. 196. Sending multiple identical packets
  197. 197. Numerical values and IDs substitution (for example selling -1 item)
  198. 198. Sending scores without actually playing
  199. 199. Invalid packets</li></li></ul><li>Протокол. <br />Protocol.<br /><ul><li>Текстовые данные — легко читается и модифицируется
  200. 200. Бинарный протокол — сложнее разобраться, легко модифицируется
  201. 201. Шифрование — сложно разобраться, сложно модифицировать
  202. 202. Бинарный протокол является слабым шифрованием
  203. 203. Text data—easy to read, easy to modify
  204. 204. Binary protocol — harder to understand, easy to modify
  205. 205. Encryption— hard to crack, hard to modify
  206. 206. Binary protocol is actually a case of weak encryption</li></li></ul><li>Обезьяны.Monkeys.<br /><ul><li>В социальных играх с множеством игроков дело времени когда кто-то подберет работающий хак
  207. 207. Миллион обезьян за конечное время напишут роман сломают ваш протокол
  208. 208. Они любят делиться результатамиповышая ЧСВ
  209. 209. In social games with lots of players it’s a matter of time when someone finds a working hack
  210. 210. Million monkeys in finite time willwrite a novelbreak your protocol
  211. 211. They like to share their findings</li></li></ul><li>Шифрование. <br />Encryption.<br /><ul><li>Шифрование (в том числе SSL) не имеет смысла, когда нельзя доверять одной из сторон
  212. 212. Ресурсы клиента и сервера
  213. 213. Нельзя понять что за пакет без расшифровки если шифровать полностью
  214. 214. Encryption(including SSL) doesn’t make much sense if one of the sides can’t be trusted
  215. 215. Spending client’s and server’s resources
  216. 216. Can’t understand what this packet is without decryption if fully encrypted</li></li></ul><li>Шифрование. <br />Encryption.<br /><ul><li>Множество алгоритмов шифрования, начиная с простого XOR
  217. 217. Добавлять номер пакета
  218. 218. Для балансировки нагрузки добавлять заголовки к зашифрованным пакетам
  219. 219. Lots of encryption algorithms starting with simpleXOR
  220. 220. Add packet number
  221. 221. For load balancing add headers to encrypted packets</li></li></ul><li>Боты. Bots.<br /><ul><li>Взломанный / поддельный flash клиент
  222. 222. Специальный нефлэшевый клиент
  223. 223. Программы автоматизации действийКто из вас фармил honor на Alterac Valley?
  224. 224. Hacked / fake flashclient
  225. 225. Special non-flash client
  226. 226. Automatization softwareHas any of you farmedhonor at AlteracValley?</li></li></ul><li>Боты. Bots.<br /><ul><li>Фарм (нудные повторяющиеся действия)
  227. 227. Бой
  228. 228. Торговля
  229. 229. Затрагивают баланс игры
  230. 230. Не всегда плохо
  231. 231. Farming (boring repetitive actions)
  232. 232. Fight
  233. 233. Selling and buying stuff
  234. 234. Interfere in game balance
  235. 235. Not essentially evil </li></li></ul><li>Боты. Bots.<br /><ul><li>Не давать залогиниться, например присылать механизм авторизации с сервера
  236. 236. Отличия от пользователя (быстрые действия, MOUSE_OUT сразу после CLICK)
  237. 237. Сложно что-то сделать с внешними программами из браузера
  238. 238. Проблемы больших игр
  239. 239. Don’t let them log in, for example choose authorization mechanism server-side
  240. 240. Different from users(fast actions, MOUSE_OUT immediately afterCLICK)
  241. 241. Hard to do anything with external applications within browser limits
  242. 242. Problem of bigger games</li></li></ul><li>Кто как защищает свои игры.<br />How people protect their games.<br />
  243. 243. Защита. Protection.<br /><ul><li>Инди — url-lock, обфускация, самописные тулзы
  244. 244. Zynga — никак, даже наоборот
  245. 245. TimeZero — бинарный протокол, заумный код
  246. 246. В основном никто никак не защищает
  247. 247. Indie— url-lock, obfuscation, proprietary tools
  248. 248. Zynga — doesn’t protect anything, even makes it easier to steal stuff
  249. 249. TimeZero — binary protocol, hard to understand code
  250. 250. Not many people actually protect their games</li></li></ul><li>Как защитить свою игру<br />How to protect your game<br />Valentin “valyard” Simonov<br />TimeZero<br />v@lent.in / va.lent.in / onenterframe.ru / @valyard<br />Thanks to:<br />NikolayRyzhy, Denis Kolyako, AndreyBelash, Anton Volkov, myxus,IliaPlotnikov, TimeZero and Mail.ru staff and other people who helped me.<br />

×