{"id":7844,"date":"2010-04-23T16:38:16","date_gmt":"2010-04-23T21:38:16","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=7844"},"modified":"2010-05-12T09:11:18","modified_gmt":"2010-05-12T14:11:18","slug":"experienced-points-impossible-to-beat-drm","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=7844","title":{"rendered":"Experienced Points: Impossible (to beat) DRM"},"content":{"rendered":"<p>This week&#8217;s column is about how <a href=\"http:\/\/www.escapistmagazine.com\/articles\/view\/columns\/experienced-points\/7467-Experienced-Points-Impossible-to-beat-DRM\">the Ubisoft copy protection could actually be made powerful enough<\/a> to keep the pirates at bay for months.  Their latest system lasted only six weeks or so, but a better designed system could have endured a lot longer.  <\/p>\n<p>Adding a bit to what I said in the column:<\/p>\n<p>Typically a server responds to the client.  You run your World of Warcraft client, connect to the server, and then your client will send a request, &#8220;Hey, I just showed up in the Goldshire and I need to know what characters are here.&#8221;  The server then sends you this data.  It&#8217;s a request \/ response system that&#8217;s fairly easy to reverse engineer.  If you&#8217;re trying to write your own server, you look at what the client sends and see what the server sends back.  Then you make your version of the server do the same thing.<\/p>\n<p>But you could make the process really, really difficult to track by simply making the client a passive recipient of data.  The client would just send actions about where the player is standing or what they&#8217;re doing, and the server sends the client data without prompting.  The server sees you get near Goldshire, then waits several seconds, then sends you the info on the town.  It&#8217;s pretty easy to figure out a situation like this one, but as the data becomes more crucial to the game and the responses become more obtuse, it becomes harder for the cracker to know what their copycat server should send, and when.  Tracking something fast-paced and chaotic like combat would be a nightmare. <\/p>\n<p>The mantra of security people is &#8220;obscurity is not security&#8221;, which is true only if you need your data to be safe &#8220;forever&#8221;.  If you&#8217;re guarding against reverse-engineering a remote system and if you only care about the first few months, then it possible to make a very very safe system. Think of it this way:  All of the scripting data of the game is on the server side. Dude A standing here, item B here, door C opens with key D, etc.  Somebody &#8211; probably a small team of people &#8211; spent months setting up those scripts. You need them for the game to work.  The cracker can either replicate all of the work done by the original artists, or he can play the game and every possible scenario in it to harvest the data from the server. <\/p>\n<p>(Reading the above, I think I duplicated some of the points I made in the article.  I apologize for that. This was a 2,000 word concept that I foolishly tried to cram into a 1,000 word column, and it think the clarity suffered for it. Looking back, I should have split this into a two parter. Fool!)<\/p>\n<p>Anyway: DRM is bad. Boo hoo, pout pout. Etc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week&#8217;s column is about how the Ubisoft copy protection could actually be made powerful enough to keep the pirates at bay for months. Their latest system lasted only six weeks or so, but a better designed system could have endured a lot longer. Adding a bit to what I said in the column: Typically [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[102],"tags":[],"class_list":["post-7844","post","type-post","status-publish","format-standard","hentry","category-weekly-column"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/7844","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7844"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/7844\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7844"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7844"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7844"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}