lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi Folks,
 
I'm pleased to announce that MetaScope (the world's coolest Lua-based
screensaver & Google Hack) is officially available for download at my new website
(www.krazydad.com).  MetaScope is a kaleidoscope screensaver that performs
image searches on Google and 4 other search engines.  Okay, enough
shameless promotion. :)
 
I thought I'd talk a little bit about the shareware distribution and anti-
piracy measures behind the new website, since other Lua programmers may
find it of interest, and it may generate some discussion.
 
I learned, years ago, when working on The Palace (an Internet Chat system
I created in 1994) that a software product isn't just the program - the
executable file.  It's a whole bunch of things: The client software, the
server software (if any), the website that sells it, the community that
visits the website, the ordering system, and so on.  I realized that when
thinking about the product, it is more helpful to me, the developer, to
think about the entire system as 'the product', rather than obsessively
focusing on the 'executable' (the software that the user downloads),
which is really only a small part of the whole system.  It's easy for
programmers such as myself to fall into this trap.
 
So in setting up the KrazyDad website, which currently has one product,
"MetaScope," I have created a 'whole software' distribution system which
consists of a number of components.  Metascope is my first product, but I
intend to (over the next few years) release a number of fun little lua-
based software toys on this website using the same system, differing
only in the script-components.
 
Here's a few key parts of the system:
 
1) Lua-scripts & C++ Engines
 
All the software toys sold by KrazyDad are (or will be) written in a
combination of C++ and Lua-Script.  All the "high-level" code is written
in Lua.   The C++ Executable is basically a high-performance OpenGL Sprite
engine which runs the script.  This is similar to the Palace model in
which the  palace-executable is basically an engine which ran forth-like "iptscray"
scripts, but more extreme - far more of the 'functionality' (and most of
the anti-piracy stuff) resides in the Lua script.  The C++ engine will
tend to be the same from product to product, with certain capabilities turned
on or off.
 
2) Cross-platform technologies.
 
The C++ engine relies on a number of cross-platform technologies. These
include Lua, OpenGL, JPEG, PNG, ZLIB, CURL and FMOD (a sound engine).  About
95% of the code is ready for porting, and it should be fairly simple for
me to make Macintosh and Linux versions (once I get a little free
time...).  In the case of the Palace (which was originally written on a
Mac), only about 50% of the code was portable.
 
3) A server for delivering 'registered' scripts.
 
The 'free trial' that you  download contains a script with limited
capabilities.  When you register the software, the demo-script downloads a new
script from my server.  The new script contains additional functionality.  Because
of this method, a software pirate can't 'unlock' the demo by adding a few NOPs to
the EXE file.
4) All the scripts are precompiled, compressed with zlib, and encrypted
using the user's identification information and registration-code as an
encryption key.
 
This way, if a particular script is copied, I can see where it came from.
Also, if someone attempts to tamper with this information, their script
will cease to function, because it can't be unscrambled.
 
I am NOT saying that this system is 'tamper proof' - it is simply harder
to tamper with than your typical shareware program which can be fixed by
inserting a few NOP instructions.  Much of the code that is responsible
for security is contained within the scrambled Lua script, rather than
inside the C++ engine.  This makes it somewhat harder for a hacker to
"decompile" and modify.
 
I am considering using a modified version of LuaLib that scrambles the
order of compiled tokens, so that an 'off-the-shelf' Lua decompiler can't
be used (Don't know if there any off-the-shelf decompilers out there,
but I imagine so...).
 
- Jim Bumgardner