Num3 wrote:Tommeh wrote:Uhmm... i of course have worried about protection and found out the best way is to have some kind of online verification.
The idea is good, but...
Just take these things into consideration...
a)
Your technique would require each single executable to be diferent (so you could have diferent gaps to fill in)
b)
If your making small shareware software, and only count to have a few users, don't even bother, warez and cracker teams want big fish that has a market value of hundreds of euros, for name and reputation.
c)
PB executables are small, and any warez site would just buy a licence and distribute the entire registered program instead of wasting time cracking it...
as to your
point b):
Num3,
I don't think so...
I stumbled across keys/cracks for an app that has a maximum worldwide market volume of some 10.000 copies, a market that is shared by at least 10 major players and numerous smaller players, so go figure.... Admitted: the crack was for one of the major players, but a player in a very small market nonetheless...
In my opinion, you have only two choices really:
- go OpenSource, or
- otherwise protect your app.
I don't think there's anything viable in between...
As to protection:
- you have to tie it to a hardware profile, otherwise your point d) is valid.
- if you implement a protection scheme, don't use any technique that the compiler ultimately translates into JMP, JNE, etc. A somewhat smarter idea would be to use a combined hardware profile and key based code to somehow fill a table that is used for indirect function or module addressing.
Another crazy idea:
I could envision a software distribution method, that includes the free demo version of PB or a freeware linker. The installation routine should somehow ascertain that every function/module is linked into the final installation in random order. Perhaps this order could be generated by using a local hardware profile. If final compilation is done at the users' client, theoretically every binary image out there will differ, hence your point d) becomes invalid and the indirect function/module addressing table idea described above will be different as well...
just my two €-cents (that got devaluated a bit today...)