Open Source application GPL legality

shd shd at rootnode.net
Thu Oct 15 00:13:50 UTC 2009


On 2009-10-14 17:42, Björn Terelius wrote:
> Your idea about dynamically merging the GPL'd client (whether this is 
> allowed or not) with some non-free utility may not work as you indent 
> it to. After all, I don't see how you could prevent a malicious user 
> from creating a program which emulates a non-modified client when 
> interacting with the security utility, but which acts as the cheating 
> client when interacting with the user.
On 2009-10-14 21:31, John Cowan wrote:
> At this point, everyone still concerned with this problem, and
> *especially* shd, should go and read Eric Raymond's "The Case of the
> Quake Cheats" at http://catb.org/esr/writings/quake-cheats.html .
> It's all there: the problem, the various solutions, the refutations of
> those solutions, etc. No real need to rehash it here.
Thanks for interesting article. I acknowledge that security by obscurity 
has never been real solution but in this region of game worse I can face 
is... possibility that someone smart can make cheats programs. My 
original assumption about making use of my previous reverse engineering, 
and packing skills was just to make really hard to break inside into 
application. I'm not sure if you are into this area but there are real 
world examples of applications which turned into something like 
unbreakable 'legends'. I'm not aspiring so high, but mentioning about 
this to show you there is a possibility to staying unbreakable for 
reasonable time. My basic assumption was to constantly updating this 
packing algorithm after seeing any marks of being broken (I'll refer to 
that later).
If You are interested in my solution I'll try to describe it. 
Personally, I'm interested a little bit in computer security which is 
still my main occupation (besides of studying). Here is the general concept:
* I'm making decision to release current (in a stable means :) version 
as obligatory. In this step I'm building application (not publicly known 
environment).
* Then closed tests in which we're additionally building code flow database.
* After backing up original client binary obfuscator is applied. It 
should split file into small chunks (smaller better but bigger 
performance cost). This splitting process making use of database 
generated before to appropriate choose sections and inject decoding code 
parts (there are many independent encoding 'procedures'). Chunks didn't 
used by some period of time would be encoded back. I'd like to add 
encoded code relocation making use of data communicated with server (so 
server would know client chunk mapping).
* So, average player is downloading client - nothing interesting. After 
installation it looks weird. Well, yes - this game is acting like a 
virus! Not a good news for non-educated anti-virus users.
* Finally, he is making a log on attempt, but hey - what about 
decryption? Same small procedures chain as everywhere else, but crucial 
thing is to load lowest amount of code before connection. We're making 
RSA handshake, then checking credentials and continue communicating in 
secure channel. First client verification occurs AFTER successful log-in 
and repeats after any period of time (I think it's rate should be lower 
with new players).
<- gimme security code of section xxx (or part of it - I don't know yet) 
- you can use this seed
-> uhm... i have this section encoded... i don't even know 
procedure(pessimistic)! But wait, I got clear instructions to decode 
this this and this to reach mentioned section. oh - there it is, i'll 
hash it with your seed so we can make sure noone has taken control over 
'secure' channel
<- <comparing with hash from non-encrypted client binary> this time you 
made it... (i'll ask him in rand()*modifier secs)
So we reached to strength which most hiding stuff can't, or just don't 
use. Described application has no worth without connection with managing 
server, so we're not forced to make any decodes in not safe environment. 
Every suspicious action might be reported over secure channel and result 
with account ban - so it's harder to experiment. Disassembler is hard 
because of encrypting... Debugging breaks not allowed... Many memory 
snapshots and tough work with custom tools. Only experienced reverse 
engineer can do that but hey, do they really spend so much time on 
cracking? Just if they like... family... kids... job - but even if 
(surely there are) I believe it's long time. Just look at skype! 
Obscurity helps if there are not better methods (or you don't know them 
but in practice it equals).


There is a possibility I'll acknowledge that my system of protecting 
client is good enough to make open but I can't assume that far. That's 
why I asked my question - do I have 100% chances to go GPL - way so I 
can use bunch of external GPL code (no, I didn't met this requirement 
yet but I'm still in planning phase).
Of course there are disadvantages of my solution like problem with 
portability, complexity of project and my biggest fear - performance 
impact, but nothing for free.

*Of course* I'll make as much as I can to lower trust in client but 
there are some things which just can't be done with it. For example, 
displaying drunk effect, proper lights and shades etc.

Cheers,
Mariusz Gliwiński





More information about the License-discuss mailing list