Simple copy protection done right :)



  • @ulrik thanks for responding. I’ll try on Mac to see if works then. It’s not working for pc or at least Not for me.



  • @BWSounds said in Simple copy protection done right πŸ™‚:

    @ulrik thanks for responding. I’ll try on Mac to see if works then. It’s not working for pc or at least Not for me.

    its working fine on windows here..



  • Sorry to bring this post back up but... I finally got the simple copy protection to work. (Was pretty simple)

    But I updated to the latest commit (needed to) and it’s not working for me. I did the same thing I did to get it to work on the earlier commit (February) but it’s a no go.

    Any one updated to any commit in august and this still works for them?



  • @BWSounds I'm using the script node from 19/8 and it's working here on mac



  • @ulrik wow... ok πŸ˜”



  • Hey guys,
    do you have any tips or tricks on how to automatically populate the Serials.js file with a large number of serials? Since they have to be in a particular format between " " and with , at the end of each line, this will be quite a tedious work to do manually by copy+paste.
    What's your solution?



  • @gorangrooves The "Serial Generator" does this for you. Just uncomment the last line to run this function.

    /** This namespace contains the logic to create a new list of serials. 
        
        Feel free to remove this when not needed. */
    namespace SerialGenerator
    {
        inline function getNewRandomChar()
        {
            // ASCII, fuck yeah!
            local a = String.fromCharCode(Math.randInt(65, 90));
            local b = String.fromCharCode(Math.randInt(48, 57));
        
            return Math.random() > 0.5 ? a : b;
        }
    
        inline function createNewSerial()
        {
            local s = "";
        
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
        
            return s;
        }
    
        const var NUM_SERIALS = 1000;
    
        inline function createNewSerials()
        {
            local d = [];
            d.reserve(NUM_SERIALS);
        
            for(i = 0; i < NUM_SERIALS; i++)
            {
                d.push(createNewSerial());
            }
        
            local obj = { "Data": d };
        
            Engine.dumpAsJSON(obj, "../Serials.js");
        }
    
        // Uncomment this line to regenerate serials.
        //createNewSerials();
    }


  • @dustbro Thanks very much. I will give this a try.

    @orange Have you managed to implement the bundle serials solution and if so, would you mind sharing the working code here, please?



  • @gorangrooves

    • Prepare a bundle serial list .js file (named "List_Main_Bundle_Serials.js" here) like this - I am using 5 simple serial numbers here:
    const var BundlePackSerials = {
      "Data": [
        "BNDL_ABCDEF1",
        "BNDL_ABCDEF2",
        "BNDL_ABCDEF3",
        "BNDL_ABCDEF4",
        "BNDL_ABCDEF5"
      ]
    };
    
    
    • Prepare a single product serial list .js file (named "List_Single_Product_Serials.js" here) like this:
    const var SingleProductSerials = {
      "Data": [
        "SNGL_ABCDEF1",
        "SNGL_ABCDEF2",
        "SNGL_ABCDEF3",
        "SNGL_ABCDEF4",
        "SNGL_ABCDEF5"
      ]
    };
    
    

    Then create an "Authorization.js" file and also below UI components. Also don't forget to include this "Authorization.js" file in the interface script. In "Authorization.js" script:

    • SerialInput is an editable label for typing the serial in it.
    • SubmitButton is a button for submitting the serial
    • Description is a label for the information of the serial validation status.

    For the conditions, I've used "if", "else if" and "else" respectively.

    {
    
    include("List_Main_Bundle_Serials.js");
    include("List_Single_Product_Serials.js");
    
    
        const var SerialInput = Content.getComponent("SerialInput");
        const var SubmitButton = Content.getComponent("SubmitButton");
        const var Description = Content.getComponent("Description");
        
        
        /** Checks if the serial input is valid and stores the result if successful. */
        inline function onSubmitButtonControl(component, value)
        {
          if(!value) 
                return;
        
            local v = SerialInput.getValue();
            Console.print(v);
    	
             
                      
        // Checks if it's in the Bundle Serials List
        
            if(BundlePackSerials.Data.contains(v))
                {
                    Console.print("Serial number found");
            
                    local data = 
                    {
                        "Serial": v
                    };
    
                    Description.set("text", "YOUR LICENSE HAS BEEN SUCCESSFULLY REGISTERED");
                   
                  // Saves as Bundle_RegistrationInfo.js 
                    Engine.dumpAsJSON(data, "../Bundle_RegistrationInfo.js");
                
                    setValidLicense(true);
                }      
    
                
       // Checks if it's in the Single Product Serials List
        
            else if(SingleProductSerials.Data.contains(v))
                {
                    Console.print("Serial number found");
            
                    local data = 
                    {
                        "Serial": v
                    };
    
                    Description.set("text", "YOUR LICENSE HAS BEEN SUCCESSFULLY REGISTERED");
                   
                  // Saves as Bundle_RegistrationInfo.js 
                    Engine.dumpAsJSON(data, "../ProductA_RegistrationInfo.js");
                
                    setValidLicense(true);
                }      
            
            else
                {
                    Console.print("Invalid serial number");
                    Description.set("text", "INVALID KEY THAT DOES NOT MATCH WITH YOUR LICENSE");
                    setValidLicense(false);
                }
        };
    
        Content.getComponent("SubmitButton").setControlCallback(onSubmitButtonControl);
    
    
    
       inline function setValidLicense(isValid)
        {
            // Do whatever you want to do here. 
             
            if(isValid)
            {
    
    
            }
           
            
            else
            {
    
                          
            }
        }
    
    
    
    
        inline function checkOnLoad()
        {
            SerialInput.set("text", "");
            
            // Load the serial from the stored files
             
            local pData_MainBundle = Engine.loadFromJSON("../Bundle_RegistrationInfo.js");
            local pData_SingleProduct = Engine.loadFromJSON("../ProductA_ProductRegistrationInfo.js");
            
            Console.print("Checking serial");
        
           
            
        
        
        // Bundle serials  
        
          if(pData_MainBundle)    
            {
                local v = pData_MainBundle.Serial;
                Console.print("Restored serial: " + v);
            
               if(BundlePackSerials.Data.contains(v))
                {
                    setValidLicense(true);
                    return;
                }      
            }
    
            
       
        // Single Product serials  
        
          if(pData_SingleProduct)    
            {
                local v = pData_SingleProduct.Serial;
                Console.print("Restored serial: " + v);
            
               if(SingleProductSerials.Data.contains(v))
                {
                    setValidLicense(true);
                    return;
                }      
            }
           
    
          setValidLicense(false);
      }    
        
    // Call this on startup
        checkOnLoad();
    
    }
    

    Cheers πŸ˜‰



  • @orange Thanks a lot for this. I really appreciate it! πŸ‘



  • @dustbro Finally got around to trying to generate those serials, but I am having no success. I added the code you provided, at the bottom of my Interface onInit script and removed the "//" from the last line, then compile the script. It compiles OK, but no serials are generated. The Serials.js remains with the same codes and nothing new is added. I get no warning or errors.
    I tried using HISE Master from Oct last year and just now using the latest built from @d-healey's Developer branch, but with no luck.
    Am I missing something?



  • @gorangrooves or should drop them in the root of your project folder



  • @gorangrooves me the generation does not work either but I use https://www.motdepasse.xyz/ and I replace it in the .js file and There you go πŸ™‚



  • @yall Thanks. I am afraid that the tool doesn't quite offer enough flexibility.

    @dustbro said in Simple copy protection done right πŸ™‚:

    @gorangrooves or should drop them in the root of your project folder

    Was a part of your response missing?



  • @gorangrooves said in Simple copy protection done right πŸ™‚:

    Serials.js remains with the same codes and nothing new is added. I get no warning or errors.

    Have you tried deleting the old js file? Maybe it can't overwrite an existing file...



  • @Christoph-Hart I tried only renaming the actual file to "serials.js" (lower case s) to see if it would write a new js file, but it didn't. It only threw an error message that the original Serials.js was missing. It was the copy protection code part of the script that threw the error.

    Should I delete the existing data from the Serials.js?

    BTW I can edit the js file within HISE, when I open it as one of the scripts. So, it is able to write to it.



  • @Christoph-Hart I commented out the copy protection script so that I could delete data from Serials.js and that didn't do the trick. I deleted the js file completely and that didn't do the trick either. The script is not generating a js file.



  • @Christoph-Hart @dustbro After reading the manual on GitHub, I realized that the file is being generated in the root folder of the project. Now I understand what you were referring to, dustbro.
    @yall Check out the root folder of your project and not the Scripts folder for the Serials.js generated by the script.



  • @dustbro said in Simple copy protection done right πŸ™‚:

    @gorangrooves The "Serial Generator" does this for you. Just uncomment the last line to run this function.

    /** This namespace contains the logic to create a new list of serials. 
        
        Feel free to remove this when not needed. */
    namespace SerialGenerator
    {
        inline function getNewRandomChar()
        {
            // ASCII, fuck yeah!
            local a = String.fromCharCode(Math.randInt(65, 90));
            local b = String.fromCharCode(Math.randInt(48, 57));
        
            return Math.random() > 0.5 ? a : b;
        }
    
        inline function createNewSerial()
        {
            local s = "";
        
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += "-";
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
            s += getNewRandomChar();
        
            return s;
        }
    
        const var NUM_SERIALS = 1000;
    
        inline function createNewSerials()
        {
            local d = [];
            d.reserve(NUM_SERIALS);
        
            for(i = 0; i < NUM_SERIALS; i++)
            {
                d.push(createNewSerial());
            }
        
            local obj = { "Data": d };
        
            Engine.dumpAsJSON(obj, "../Serials.js");
        }
    
        // Uncomment this line to regenerate serials.
        //createNewSerials();
    }
    

    I'm Trying To Add A Fixed 4 Digit Name To The Generated Codes, Like:
    "HISE-X44A-6SP4-82AS"
    "HISE-X0IR-Y022-O14Q"
    "HISE-G726-S0GR-C073"

    Any Help?



  • @Natan But EveryTime I Get undefinedundefinedundefinedundefined πŸ™‚ LOL


Log in to reply
 

17
Online

1.2k
Users

3.8k
Topics

33.5k
Posts