I appreciate any software protection can be overcome, however, I'd like to try
and make it more difficult for someone to generate a keygen program.
At the moment the person enters a serial number and user name and the program
checks this serial no. is correct (based on the user name).
Can anyone think of a way of detecting if the program is being monitored
somehow? (like the programs I'm assuming a cracker uses to follow each
instruction through your code as it's executing)
I very much doubt there is a way, but any suggestions for making it just a
little harder for them?
the best metod for protect your application is the combination of both of
them.
"Steve" <nom...@anywhere.com> escribió en el mensaje
news:phd5t0t6c8om3d1ac...@4ax.com...
Steve wrote:
> I appreciate any software protection can be overcome, however, I'd like to try
> and make it more difficult for someone to generate a keygen program.
have You seen
http://sourceforge.net/projects/tponguard
they have implemented several strategies for the key generating/checking, so
maybe You can use some of the stuff.
Best regards
Ekkehard
I'm curious, why exactly are you pursuing this?
Is it because you truly want to protect your software, or because
you're bored and are trying to keep yourself occupied with some new
hobby?
If it's the latter one, I can understand.
If not, then I'm left here shaking my head in disbelief.
>Further to the earlier post.
>
>I appreciate any software protection can be overcome, however, I'd like to try
>and make it more difficult for someone to generate a keygen program.
Key-based protection is a complete waste of time. They are the second
easiest protection method to break. The easiest is a simple one-byte
patch that controls whether your software is registered/unregistered.
The only thing I can suggest that would provide you as much security
as possible, is to make your software dependent on a server
authentication. For example, each time your software is loaded, it
connects to your server and gets permission on what it can or cannot
do. This will be countless times more secure than any key-based
protection scheme you could come up with. The only problem with this
is the obvious fact that your software will depend on an internet
connection. For some applications this isn't an issue, especially if
they're designed to be used for online work (FTP client, web browser,
etc.) But if you're not developing an internet-based application,
very few users will put up with having to make a connection to your
server every time they load your app.
>Can anyone think of a way of detecting if the program is being monitored
>somehow? (like the programs I'm assuming a cracker uses to follow each
>instruction through your code as it's executing)
>I very much doubt there is a way, but any suggestions for making it just a
>little harder for them?
There are plenty of ways to detect if known debuggers such as SoftICE
are currently in RAM. The problem is that you can't detect all of
them, especially a home-made program, which is what a true cracker
would be using anyway...to avoid detection.
Obviously if there was any merit to using key-based protection, you
wouldn't see websites loaded with thousands of key generators for
every key-based software that exists out there. Remember my earlier
post? If Microsoft can't develop a secure key-based system for their
software, then neither will you or anyone else.
Bottom line: your time would be better spent in ensuring your
software is free of any serious bugs before release, rather than
trying to prevent the inevitable.
Nobody wants to hear that their software can be cracked in 10 minutes.
It's the same with alcoholics...they don't want to hear that they have
a drinking problem, and obese people don't want to hear that they're
far more likely to die as a result of their eating habits. But being
in denial about something is not going to change reality.
>On Wed, 29 Dec 2004 13:56:45 +0000, Steve <nom...@anywhere.com> wrote:
>
>
>I'm curious, why exactly are you pursuing this?
>Is it because you truly want to protect your software, or because
>you're bored and are trying to keep yourself occupied with some new
>hobby?
>
>If it's the latter one, I can understand.
>If not, then I'm left here shaking my head in disbelief.
As I said I'm well aware any form of protection will be beaten, I just wondered
if there was a way of making it slightly less easy particularly in regard to
verifying a key gen.
>As I said I'm well aware any form of protection will be beaten, I just wondered
>if there was a way of making it slightly less easy particularly in regard to
>verifying a key gen.
I know...and your question has already been answered.
The answer is 'no'.
There's nothing you can do to make it any more difficult, regardless
of how clever your key-generating methods may be.
Even if you come up with an algorithm that uses 100 different
functions to scramble data over and over again, it won't make any
difference in the end, because all the cracker has to do is keep an
eye on your key verification code while it's running. And in the end,
all of your hard work and complex functions come down to just ONE
state: is the key valid or invalid?
This is why key-based "protection" is a waste of time.
I already gave you the example of Microsoft (a multi-billion dollar
company) not being able to come up with any ingenious key generating
methods.
I can give you another one:
Borland.
The people who created the very language you're programming in.
If THEY can't stop key generators, why isn't that a valid enough
example to prove to you once and for all that it's pointless?
Anybody that's ever created some software has at one point or another
thought that they're going to be the ones that come up with the
"unbreakable" method of protection. History has shown that they were
all wrong.
id Software
Microsoft
Activision
Borland
Lotus
Adobe
The list goes on and on and on and on...
Let it go...it's a completely wasted effort.
Above companies have not ever been using a HARD method of copy
protection at all because they NEED to distribute their softwares.
Creating a Hard to crack copy protection method is not very hard, it
just need some researches. You can take a look at www.IonWorx.com,
www.Microcosm.com, www.sofpro.com/pcgw32.htm and many other successful
companies and Learn their methods and weaknesses.
>For example, each time your software is loaded, it
>connects to your server and gets permission on what it can or cannot
>do. This will be countless times more secure than any key-based
>protection scheme you could come up with.
This procedure is as easy to crack as a local version: patch the conditional
jump where the code forks into verified and rejected...
Every protection scheme, ending up in such a single conditional jump, has the
same low (near vanishing) security level. More security requires that the
returned answer is used to e.g. decrypt part of the program, so that only a
valid answer will produce usable code and data. Even then it's possible to
patch the valid key into the code, once any user received such an key from the
server.
Many years ago I implemented a protection for my VB decompiler program, that
AFAIK still is not cracked. This protection method is based on the fact that
VB3 programs (what my decompiler is as well) contain byte code, that deserves
special access tools, like just my decompiler. And since no other working VB
decompiler ever was implemented, my code protects itself :-)
DoDi
>id Software
>Microsoft
>Activision
>Borland
>Lotus
>Adobe
>
>Above companies have not ever been using a HARD method of copy
>protection
No software company in their right mind is going to start using
dongles if that's what you're suggesting.
If you're planning on selling maybe 5 or 10 copies of your software
worldwide, then sure, go ahead and use some ridiculous hardware-based
protection scheme. But if you're planning on selling your software in
the real world, to real human beings, then no..
>Creating a Hard to crack copy protection method is not very hard, it
>just need some researches.
How do you define "hard to crack"?
What does that mean?
Takes 10 minutes to crack?
10 days?
And how stupid would you look if you were the CEO of some company that
ordered your little minions to spend the next 6 months on "research",
trying to come up with this AwEsOmE new protection scheme...only to
find out that some kid cracked it two days after it was released?
>You can take a look at www.IonWorx.com,
>www.Microcosm.com, www.sofpro.com/pcgw32.htm and many other successful
>companies and Learn their methods and weaknesses.
As for the sites you listed..
1. Microcosm.com - "Microcosm commercializes problem-solving
technologies for the analytical micro-imaging sciences."
What does this have to do with software protection?
2. Ionworx.com - software based solutions...completely worthless.
3. Sofpro.com - software based solutions...completely worthless.
Have you ever wondered why there are so many software companies
claiming that they have the "perfect" copy protection scheme? Have
you stopped to think for a minute...if all these wonderful solutions
are so easy and so secure, then WHY do we not see them being used by
any of the major software distributors?
>On 31 Dec 2004 00:00:09 -0800, "Shahram" <pishg...@hotmail.com>
>wrote:
>
>>id Software
>>Microsoft
>>Activision
>>Borland
>>Lotus
>>Adobe
>>
>>Above companies have not ever been using a HARD method of copy
>>protection
>
>No software company in their right mind is going to start using
>dongles if that's what you're suggesting.
>
>If you're planning on selling maybe 5 or 10 copies of your software
>worldwide, then sure, go ahead and use some ridiculous hardware-based
>protection scheme. But if you're planning on selling your software in
>the real world, to real human beings, then no..
Absolutely. Plus they're all crackable anyway. The cracker just bypasses or
emulates whatever the dongle does.
>
>
>>Creating a Hard to crack copy protection method is not very hard, it
>>just need some researches.
>
>How do you define "hard to crack"?
>What does that mean?
>Takes 10 minutes to crack?
>10 days?
>And how stupid would you look if you were the CEO of some company that
>ordered your little minions to spend the next 6 months on "research",
>trying to come up with this AwEsOmE new protection scheme...only to
>find out that some kid cracked it two days after it was released?
>
>
>>You can take a look at www.IonWorx.com,
>>www.Microcosm.com, www.sofpro.com/pcgw32.htm and many other successful
>>companies and Learn their methods and weaknesses.
>
>As for the sites you listed..
>
>1. Microcosm.com - "Microcosm commercializes problem-solving
>technologies for the analytical micro-imaging sciences."
>What does this have to do with software protection?
>
>2. Ionworx.com - software based solutions...completely worthless.
>
>3. Sofpro.com - software based solutions...completely worthless.
>
>Have you ever wondered why there are so many software companies
>claiming that they have the "perfect" copy protection scheme? Have
>you stopped to think for a minute...if all these wonderful solutions
>are so easy and so secure, then WHY do we not see them being used by
>any of the major software distributors?
If someone had a 100% secure software protection system they would be richer
than Microsoft.
I just wanted to make things a little harder but I'm probably not going to
bother now. Everybody's right it's not worth the effort.
If people like DriveCrypt can't protect their software (I've just downloaded a
cracked version which works - as an experiment honestly ) then I don't see the
point in even trying to make it harder.
>If someone had a 100% secure software protection system they would be richer
>than Microsoft.
Exactly.
That's how you know that no such thing exists.
>If people like DriveCrypt can't protect their software (I've just downloaded a
>cracked version which works - as an experiment honestly ) then I don't see the
>point in even trying to make it harder.
Yeah but keep in mind that just because they can't protect their
software from being cracked doesn't mean that the product itself is
worthless in terms of what it's supposed to do.
id Software can't protect their games...but they still make the best
ones in history..
Every program out there that relies on keys to be generated for
registration, is inherently flawed. The very concept itself is
flawed...which is why I always discourage people from trying to
implement it because in the end, it amounts to nothing more than a big
waste of time.
You'll achieve much better results by distributing two versions of
your software (one crippled version to the public for trial purposes,
and one full version that you distribute only to your paying
customers). Make it so that the full version comes with an encrypted
license file containing the user's name and serial number. This file
then gets decrypted and displayed in the About box. Then if anyone
decides to "share" their copy, it will be very obvious and will be
easy to track down who the culprit was.
> snip.
>You'll achieve much better results by distributing two versions of
>your software (one crippled version to the public for trial purposes,
>and one full version that you distribute only to your paying
>customers). Make it so that the full version comes with an encrypted
>license file containing the user's name and serial number. This file
>then gets decrypted and displayed in the About box. Then if anyone
>decides to "share" their copy, it will be very obvious and will be
>easy to track down who the culprit was.
What was the original plan, a full version which is registered so I can see
who's copied it.
I wanted to avoid making each copy unique though, but if I can't protect the
keygen part then I guess I'll have to make each full version unique to the user.
But I can't see how I could stop them bypassing that anyway. Oh well!
> I wanted to avoid making each copy unique though, but if I can't protect the
>keygen part then I guess I'll have to make each full version unique to the user.
>But I can't see how I could stop them bypassing that anyway. Oh well!
That part is easy...
There's nothing for them to bypass. The program will have several
files in the main directory, right? So just throw in an extra file
and call it something completely unrelated. Don't call it
"license.key" or something equally obvious. Make it discrete..
This file will contain an encrypted version of the user's name and
license key. Anybody trying to view the file will get nothing but a
bunch of garbled ASCII.
Then as the program loads, all you have to do is just quietly decrypt
the file into a memory stream, and store the results in the About box.
As long as the user doesn't know where the information is coming from,
he won't have any way to defeat it. Write your program in such a way
that it checks to make sure that the "hidden" license file exists, and
do the same for all other files. If any files are missing (or if they
don't pass a CRC check), trigger an illegal operation/exception to
shut down the program, as opposed to displaying a message box.
Make it clear to every customer that their software is uniquely
licensed to nobody but them...and if their license key turns up on
some warez site, they will immediately forfeit all updates that they
might have otherwise been entitled to, plus they'll be be violating
copyright laws, etc etc. This approach will be a far better
alternative to seeing a key generator for your program turn up on a
hundred different web sites..
>On Fri, 31 Dec 2004 15:02:29 +0000, Steve <nom...@here.com> wrote:
But a "cracker"/pirate would just use the same keygen technique to watch my
program and remove the bit that loads the license information, making a "safe"
pirate version to distribute.
No, it's not the same scenario.
When you're working on a key generator, you have to constantly track
various registers and memory locations to figure out what algorithm is
being used so that you can replicate it. You're not making any
changes to the actual program.
In this case, it would be a much more complicated job to completely
rip out an entire procedure (assuming he can even find it) and then
still maintain the integrity of the executable.
To make it even more difficult, you should have multiple checks
throughout your program, but make sure that it's not just the same
function being called. Create about 3-4 different check routines, and
make each one slightly different from the others. For a more
hair-pulling experience, put your check routines into timers and have
them go off at random intervals. Or you can also incorporate them
into threads. By this point you'll have weeded out about 95% of all
"crackers", because the majority of them are completely useless when
it comes to any real programming work. Most of these guys learn their
cracking techniques by reading "How to Crack" text files, which very
rarely ever teach anything beyond the simple CMP/JNE bypassing
technique.
The top three things crackers hate the most:
1) Encryption
2) Multiple, disguised checks
3) Threads
In the end, you're still left with the reality that there's no way to
protect your software 100%...but with some effort, you can make it so
irritating that the vast majority of crackers will give up long before
they get close. The remaining few who do actually have the necessary
skills will probably have better things to do..
>On Fri, 31 Dec 2004 15:02:29 +0000, Steve <nom...@here.com> wrote:
>
>>But a "cracker"/pirate would just use the same keygen technique to watch my
>>program and remove the bit that loads the license information, making a "safe"
>>pirate version to distribute.
>
>No, it's not the same scenario.
>
>When you're working on a key generator, you have to constantly track
>various registers and memory locations to figure out what algorithm is
>being used so that you can replicate it. You're not making any
>changes to the actual program.
>...snip
Ah yes of course, I hadn't thought of it like that.
And for added security, the registered user name & serial number could be kept
in two places.
One is just for displaying in any about box, but the other is never used except
if a pirate copy turns up, even if he's fixed the about box he might not know
about the other, so I could find out where the original copy came from.
Thanks for the ideas.
There's quite a few different fairly-robust watermarking schemes possible
with executable files. As long as the cracker doesn't get their hands on a
dozen or so registered versions, the watermark is next to impossible to
remove. So, whenever a warezed version of the software appears, you can
easily see where the software came from. Of course, throw in a few checksum
routines, maybe some SEH-style things (another entry on the "most hated
list"), and store the user name in an encrypted form in several places
through the file for the "about" box.
Incidentally, there are two other great examples of failures of copy
protection schemes:
1) Half Life 2: Valve spends years of effort on Steam, puts in some hefty
technological countermeasures, and the warez version still appears after two
days (though takes some more time to sort out a few bugs). Less than 1 month
after release, a generic method for cracking any steam-based game has been
developed, placing Steam firmly in the "dead in the water" category.
2) IDA (Interactive Disassembler): The small group of guys who write this
piece of software probably know more about reverse engineering software than
everyone at MS and Valve combined. The program is unique to each person,
encrypted to the hilt, and probably the best-secured program out there. And
it's been cracked and de-watermarked (though they don't do the watermarking
too well ...).
Until TCPA/Palladium/whatever-it's-being-called-this-week becomes a reality,
which may be relatively soon given Intel's upoming release of LaGrande,
there is no way to securely protect software. The protected-execution model
of TCPA allows secure protection schemes to be easily implemented, but given
the potential for abuse (from software vendors, for example perfect vendor
lock-in) I wouldn't like to bet on TCPA becoming very widespread for at
least 4 years or so
--
Michael Brown
www.emboss.co.nz : OOS/RSI software and more :)
Add michael@ to emboss.co.nz - My inbox is always open
>Make it so that the full version comes with an encrypted
>license file containing the user's name and serial number. This file
>then gets decrypted and displayed in the About box.
I used to put this information directly into the exe file. Later I used an
external file, to prevent frequent builds of dedicated programs, and protected
that file by a checksum. When everybody knows that he has to give away his
personal key file, containing his full address, he'll be more cautious than if
he doesn't know...
DoDi
Cheers,
Nicholas Sherlock
>What happens when someone registers the software, then posts their key
>on the 'net? Wow, all your work down the drain. Fancy that.
If the key design was done properly, then it won't matter if anyone
posts their key publicly because that specific key will only work for
that specific user, and nobody else.
By "User", do you mean locked to that specific hardware configuration?
Support nightmare.
Cheers,
Nicholas Sherlock
> > If the key design was done properly, then it won't matter if anyone
> > posts their key publicly because that specific key will only work
> > for that specific user, and nobody else.
> By "User", do you mean locked to that specific hardware
> configuration? Support nightmare.
Technically there is no "uncrackable" copy protection. And technically
you cannot prevent keys being made available to the public, that's
right. But if your key needs to hold the name of the licensee together
with his email and postal address, then he cannot post it anonymously
and therefore won't post it anywhere (otherwise a court procedure is
following for him).
--
Stefan Bellon
>By "User", do you mean locked to that specific hardware configuration?
>Support nightmare.
No, it doesn't have to be locked to hardware.
That's a worthless method anyway, because any time the user makes a
change to his computer, he's going to be nagging you for a new key.
What I meant was that you design your key algorithm in such a way that
the serial number is directly tied to the user's name (plus any other
data you want to combine it with, such as his e-mail address).
So if you have a user with the name "John Doe" with an e-mail address
of "joh...@johnsmail.com" and his serial number is
"4318-987-JHT-376", then that serial number will only work for that
particular person with that particular e-mail address. If he decides
to post his key publicly, it'll be a very simple matter to deal with
if you decide to sue him.
>On Tue, 04 Jan 2005 15:26:56 +1300, Nicholas Sherlock
All pointless of course because they just generate a keygen program and use
whatever made up email address they like.
I always thought making a kengen program was difficult, but it clearly isn't at
all.
>All pointless of course because they just generate a keygen program and use
>whatever made up email address they like.
We've already been over this.. :-)
You don't make your program in such a way that it can be registered in
the About box.
You generate the license file for the user and bundle it into the
registered program which they have to download directly from you
(after they've paid for it).
Other than that, the only thing that you distribute publicly is a
crippled version which can't be registered or keygen'd.
> All pointless of course because they just generate a keygen program and
use
> whatever made up email address they like.
Depends. If the program is used in business and if it displays and prints
the "personal" information a false key is far less likely to be acceptable.
OTH in a game played on a private machine displaying this information has no
impact.
Until and unless cpu, and o/s manufacturers show a real interest in
providing license protection its unlikely we'll ever see something that
can't be defeated relatively easily. Putting a great deal of effort into
developing protection seems pointless to me. However, it makes sense to
include some basic protection just to discourage the general population.
Sort of like putting a fence around a front yard. Its not going to keep out
the bad guys, but at least the neighbors will use the sidewalk.
>On Tue, 04 Jan 2005 10:55:15 +0000, Steve <nom...@anywhere.com> wrote:
>
>>All pointless of course because they just generate a keygen program and use
>>whatever made up email address they like.
>
>We've already been over this.. :-)
Yes sorry! I'm losing my mind here!
>
> developing protection seems pointless to me. However, it makes sense to
> include some basic protection just to discourage the general population.
> Sort of like putting a fence around a front yard. Its not going to keep out
> the bad guys, but at least the neighbors will use the sidewalk.
>
Also, everyone seems to be assuming that these schemes, be it hardware
dongle based, keygen based, etc. are intended to defeat hackers or greedy
users. In my company's case (we sell our software as a loss leader to sell
our hardware, where we make most of our money), we include a hardware
dongle to defeat any unscruplous *dealers* of our software. These dealers
might "forget" to submit a purchase order for the software when they go
out and do an end user installation, upgrade two customers with the same
installation cd, etc. Or worse, they might employ a tech who might violate
our licensing agreement simply by ignorance of where and how he can setup
our software, rather than by intention to steal. Many of these dealers
don't have techs who can competantly use a computer, never mind
defeat even the simplest software protection scheme, so as long as we
can prevent these less serious offenses we're happy. We don't ship out a
hardware dongle until the purchase order is in, and after that point they
can do whatever they want with it while we remain comfortable they will
only be able to activate one site with that key. Sure, a dealer could
always employ someone just to defeat our scheme but at that point you have
a legimate business employing an engineer to do something very very
illegal and easy to prove if we ever notice (which we probably will,
unless they've also duplicated our hardware at a cost below our invoice
price and thus can avoid ordering it from us!). That's much different than
having to worry about some dude cracking your latest video game and
posting it on the web for all to see. If there's a small chance someone
could bypass it on an installation here and there, well it's a loss leader
anyway. As long as the dealers soing dozens or hundreds of installs behave
and pay the software fees we're happy.
Note I'm not the biggest fan of our choice to use a hardware dongle, but
from the point of view that it's a reasonably appropriate tool for the
job (which is to keep our dealers behaved, rather than defeat crackers)
I can certainly live with it. Sure the "snail mail" aspect sucks along
with some other things, but given that we only have to keep track of
hundreds, or at worst (a few) thousands of dongles it's not overwhelming.
Also IME the instructions for the aforementioned techs, to whom the
concept of software activation can seem overwhelming, it's a pretty simple
process to plug something into a usb or parallel port.
Dave
> Also, everyone seems to be assuming that these schemes, be it hardware
> dongle based, keygen based, etc. are intended to defeat hackers or greedy
> users. In my company's case (we sell our software as a loss leader to sell
> our hardware, where we make most of our money), we include a hardware
> dongle to defeat any unscruplous *dealers* of our software. These dealers
> might "forget" to submit a purchase order for the software when they go
> out and do an end user installation, upgrade two customers with the same
> installation cd, etc. Or worse, they might employ a tech who might violate
> our licensing agreement simply by ignorance of where and how he can setup
> our software, rather than by intention to steal. Many of these dealers
> don't have techs who can competantly use a computer, never mind
> defeat even the simplest software protection scheme, so as long as we
> can prevent these less serious offenses we're happy. We don't ship out a
If your software sells more of your hardware, why would it matter if dealers
installed lots of it? ISTM that an increase in software installs means an
increase in hardware sales. If this is not true the software really isn't a
loss leader.
About Box -----------
This software is registered to:
Bob Jones
Visa: XXXXXXXXXXXX8700
Publicly 164.13.167.68
Locally 192.168.2.11
Computer Name: BobsLaptop
BobJ...@hotmail.com
* We have your info and we have an executable on your computer so be
good and dont pirate! Or else!
-------------------------
>If he decides
>to post his key publicly, it'll be a very simple matter to deal with
>if you decide to sue him.
Sue e.g. nobody...@dontneedspam.com? ;-)
SCNR
DoDi