Software Protection

User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Software Protection

Post by Jeff Barnes »

Hi Everybody,

With help from Antonio, I have tested some software that could be a very cost effective way to protect your software from unwanted copying.

The software is called AntiDuplicate.
( http://www.alkonost.com/antiduplicate/ )

Is basically modifies a standard USB Flash drive and allows you to check the USB Flash drive to see if it has this modification. You can NOT make a copy of the USB Flash drive ... You MUST use the AntiDuplicate software to create the drives.

The software costs $129.00 (usd).

I have also located a company in the US that will sell me some 32MB usb flash drives for $3.50each ... I have a couple on order so I can test and make sure these drives will work with AntiDuplicate.

You can see how this can offer a decent protection at a very low cost.

I just thought I'd pass this one along ... Enjoy.
Thanks,
Jeff Barnes

(FWH 12.01, xHarbour 1.2.1, Bcc582)
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Jeff,

Glad to know that it is working fine for you.

If someone else is interested, we can publish here the required PRG functions (and C code) to use this protection
regards, saludos

Antonio Linares
www.fivetechsoft.com
norberto
Posts: 566
Joined: Thu Aug 30, 2007 3:40 pm
Location: BR

Post by norberto »

Antonio, please publish it... thanks
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Here it is the code:

Code: Select all

#include "FiveWin.ch" 

function Main()

  CheckIt()
  
return nil  

function CheckIt() 

   local cArray := FillArray(), aInfo

   if Fddig1( 0 ) < 7
      MsgAlert( "No Key drive in the USB port!" )
      return 0
   endif   

   Accdd1( cArray )
   aInfo = GetValues( cArray ) 

   MsgInfo( aInfo[ 1 ], "LicType" )
   MsgInfo( aInfo[ 2 ], "TokenId1" )
   MsgInfo( aInfo[ 3 ], "TokenId3" )
   
return nil 

DLL FUNCTION ACCDD1( pValues AS LPSTR ) AS VOID PASCAL ;
FROM "Accdd1" LIB "Aas973.dll" 

DLL FUNCTION FDDIG1( nVal AS LONG ) AS LONG PASCAL ;
FROM "Fddig1" LIB "Aas973.dll" 

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

static LONG accm[] = {
        0,
        0x...,
        0x...,
        0x...,
        0x...,
        0x...,
        0x...,
        0x...,
        0x...,
        0x...
};

HB_FUNC( FILLARRAY )
{
   LONG acck[ 100 ];
   LONG accNa, accUr;
   int i;
   
   srand( GetTickCount() );
   accUr = rand();
	
   for( i = 1; i < 100; i++ )
     acck[ i ] = rand();

   for( i = 1; i < 100; i++ )
     accUr = acck[ ( acck[ i ] ^ ( accUr & 0x0ff ) ) % 99 ] ^ ( accUr >> 8 );

   accUr = ( accm[ 6 ] ^ accUr ) & 0x0ffff;
   
   hb_retclen( ( char * ) acck, 100 * sizeof( LONG ) );
}      

HB_FUNC( GETVALUES )
{
   LONG * acck = ( LONG * ) hb_parc( 1 );
   LONG accr1, accr2, accr3, accr4;
   LONG accNa, accUr;
   LONG LicType, TokenId1, TokenId2;
   BOOL OrigDrive;
   
   accNa = ( acck[ 99 ] ^ accm[ 5 ] ) & 1061109567;
   accr1 = accm[ 1 ] ^ acck[ LOBYTE( LOWORD( accNa ) ) ];
   accr2 = accm[ 2 ] ^ acck[ HIBYTE( LOWORD( accNa ) ) ];
   accr3 = accm[ 3 ] ^ acck[ LOBYTE( HIWORD( accNa ) ) ];
   accr4 = accm[ 4 ] ^ acck[ HIBYTE( HIWORD( accNa ) ) ];

   OrigDrive = accr4 == ( ( ( accr2 - ~accr1 / accUr ) ^ accr3 ) - accUr );
   LicType = TokenId1 = TokenId2 = 0;

   hb_reta( 3 );
   
   if( OrigDrive )
   {
      LicType = acck[ 64 + ( HIBYTE( HIWORD( accNa ) ) % 35 ) ] ^ acck[ LOBYTE( LOWORD( accNa ) ) ];
      if( LicType == ( accm[ 1 ] ^ accm[ 3 ] ^ accm[ 4 ] ^ accm[ 5 ] ) )  
         LicType = 1; 
      else
			   if( LicType == ( accm[ 1 ] ^ accm[ 2 ] ^ accm[ 4 ] ^ accm[ 5 ] ) )  
			      LicType = 2; 
			   else
				    LicType = 0;

			TokenId1 = accm[ 7 ] ^ acck[ LOBYTE( LOWORD( accNa ) ) + 1 ];
			TokenId2 = accm[ 8 ] ^ acck[ HIBYTE( LOWORD( accNa ) ) + 1 ];

      hb_stornl( LicType, -1, 1 );
      hb_stornl( TokenId1, -1, 2 );
      hb_stornl( TokenId2, -1, 3 );
   }
   else
   {
      hb_stornl( 0, -1, 1 );
      hb_stornl( 0, -1, 2 );
      hb_stornl( 0, -1, 3 );
   }   
}   
   
#pragma ENDDUMP         
Last edited by Antonio Linares on Fri Nov 02, 2007 2:03 pm, edited 1 time in total.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Marc Vanzegbroeck
Posts: 1102
Joined: Mon Oct 17, 2005 5:41 am
Location: Belgium
Contact:

Post by Marc Vanzegbroeck »

Jeff,

Does the software install some files on the flash-drive that are visible?
I'am just wondering because if the client delete them, the drive won't work anymore...

Thanks,
Marc
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Post by nageswaragunupudi »

A bit out of topic, if the friends here dont mind answering me.

I used to think that piracy and unauthorised use / distribution of software are problems only developing countries like mine ( India ). Is it a problem in developed countries too? like canada or usa ? Now even in India things have changed a lot and we see authorised software only in all corporate sector. Though students and small timers still run for pirated software. I am just curious to know whats happening in developed countries.

For copy protection, I still like my old friend's solution. He used to encrypt and store company name and address , etc in the exe file. No other company likes to print invoices or documents with other company's name and address. That way redistribution of software or resale of software is prevented ( even among sister companies in a group).

What remains is the number of users in the client organisation using the software simultaneously. In the good old Novell days we could mornitor this very easily with Semaphores. ( Novell's API was ( and is ) very simple and reliable )

Even now with windows servers there should be some easier way. A crude but sure way is to manage the count of record locks on a specified shared table on the server. Or if we are using ADS, we can find the number of users who opened a particular table.

Though I dont need any protection for my software, I do keep track of number of users and simultaneous users (for information purposes), using ADS management functions.

Won't these simpler methods be adequate and protect the developers' interests? Merit being that it costs nothing and the customer does not get the feeling that we "do not trust" him.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Hi Marc,

Yes ... There will be some Hidden Protected Operating System Files added to the USB Drive.

If the customer completely deletes the drive you can re-make the drive in seconds (you will need to physically have the drive to do this)


I am sure there is software out there that can "lock" a flash drive from accidental deletes ... I will take a look.
Thanks,
Jeff Barnes

(FWH 12.01, xHarbour 1.2.1, Bcc582)
Marc Vanzegbroeck
Posts: 1102
Joined: Mon Oct 17, 2005 5:41 am
Location: Belgium
Contact:

Post by Marc Vanzegbroeck »

Jeff,

The problem is that you need to physically have the drive to re-make the drive. Then the customer have to send the key to me, and I have to send it back.

Regards,
Marc
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Hi Marc,

I never said it was the "perfect" way to protect your software, just cost effective :wink:

If you write-protect the drive and the customer still manages to delete the data than I guess they should not complain about any down time or the cost of sending the key back for re-programming.
Thanks,
Jeff Barnes

(FWH 12.01, xHarbour 1.2.1, Bcc582)
Roberto Parisi
Posts: 116
Joined: Thu Oct 13, 2005 5:14 pm
Location: Italy

Post by Roberto Parisi »

How to get aaa973.dll? I have only acc_de.dll.

Regards,
Roberto Parisi
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Roberto,

Aas993.dll is only provided when you purchase the software.
(might be different for each version purchased)

You can download a demo copy of the software from:

http://www.alkonost.com/antiduplicate/



Jeff
Thanks,
Jeff Barnes

(FWH 12.01, xHarbour 1.2.1, Bcc582)
MOISES
Posts: 824
Joined: Wed Aug 22, 2007 10:09 am

Post by MOISES »

Jeff,

When I compile Antonio´s code, I get some errors on the c part. I am using Harbour and FWH from octouber. Can you upload, please, the files to Rapidshare to do a test?. Thank you very much!!!


These are the errors:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ FiveWin for Harbour 7.10 - Oct. 2007 Harbour development power ³Ü
³ (c) FiveTech, 1993-2007 for Microsoft Windows 95/98/NT/2000/ME/XP/Vista ³Û
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
Compiling...
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
demo.c:
Error E2322 demo.prg 40: Incorrect number format
Error E2039 demo.prg 40: Misplaced decimal point
Error E2223 demo.prg 40: Too many decimal points
Error E2322 demo.prg 41: Incorrect number format
Error E2039 demo.prg 41: Misplaced decimal point
Error E2223 demo.prg 41: Too many decimal points
Error E2322 demo.prg 42: Incorrect number format
Error E2039 demo.prg 42: Misplaced decimal point
Error E2223 demo.prg 42: Too many decimal points
Error E2322 demo.prg 43: Incorrect number format
Error E2039 demo.prg 43: Misplaced decimal point
Error E2223 demo.prg 43: Too many decimal points
Error E2322 demo.prg 44: Incorrect number format
Error E2039 demo.prg 44: Misplaced decimal point
Error E2223 demo.prg 44: Too many decimal points
Error E2322 demo.prg 45: Incorrect number format
Error E2039 demo.prg 45: Misplaced decimal point
Error E2223 demo.prg 45: Too many decimal points
Error E2322 demo.prg 46: Incorrect number format
Error E2039 demo.prg 46: Misplaced decimal point
Error E2223 demo.prg 46: Too many decimal points
Error E2322 demo.prg 47: Incorrect number format
Error E2039 demo.prg 47: Misplaced decimal point
Error E2223 demo.prg 47: Too many decimal points
Error E2322 demo.prg 48: Incorrect number format
Error E2228 demo.prg 48: Too many error or warning messages
*** 26 errors in Compile ***
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: Unable to open file 'DEMO.OBJ'
* There are errors
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Moises,

You will not be able to do a test in Fivewin.

If you download the demo version you can do the following:
-create a usb key
-test the usb key you created

Then you can try to manually make a "copy" of the usb key and run the test program again.

You will get a message from the test program that tells you if the key is real or not.

If they were to supply an actual working sample, they would be giving away the software.
Thanks,
Jeff Barnes

(FWH 12.01, xHarbour 1.2.1, Bcc582)
MOISES
Posts: 824
Joined: Wed Aug 22, 2007 10:09 am

Post by MOISES »

oK. THANK YOU, but I would like to test the Fivewin code. If I buy now the software, I still get the same compilation error.

Can you please, provide, us a working example, without the registered dll?. Thank you.
User avatar
Jeff Barnes
Posts: 912
Joined: Sun Oct 09, 2005 1:05 pm
Location: Ontario, Canada
Contact:

Post by Jeff Barnes »

Sorry, I can not supply a working sample without giving away the software.

With the purchased version you still need to use the "make key" program (which is slightly different for each purchased version via the dll)

This section will be different for each user:

static LONG accm[] = {
0,
0x...,
0x...,
0x...,
0x...,
0x...,
0x...,
0x...,
0x...,
0x...



Jeff
Thanks,
Jeff Barnes

(FWH 12.01, xHarbour 1.2.1, Bcc582)
Post Reply