Simple copy protection done right :)



  • Ok, new problem (which prob. is a simple fix) but iv'e been compiling ALL DAY and my codes work in hise but once i compile none are working in the vsti.

    I seen someone have the same issue but the response was deleted, so im guessing the fix is easy... I just cant figure it out. Any help would be greatly appreciated.



  • This post is deleted!


  • i updated to the latest commit, still having the same issue, so it’s not that.



  • 1 add the auth. Script to your oninit
    2 add generator script to create serial.js
    3 remove generator script
    4 copy new script from root folder, add to script sub folder
    5 add the const var text at the beginning, “;” at the end
    6 oh and add the components from the auth. Script
    7 and add “include serial.js” to your oninit

    Should work right?? What am I missing because it’s not working for me on my compiled vsti



  • Does anyone have the copy protection working on a compiled vsti?



  • @BWSounds Yes, it's working on my compiled au, vst3 and vst plugins for mac
    (I have only tried then on the Mac platform)
    I use the "Global mute" version, you can use them for 20 min then it gets silent.



  • @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?


Log in to reply
 

28
Online

810
Users

3.0k
Topics

25.5k
Posts