Date Lock

Potency Medium
Resilience Medium
Cost Medium
Tags: date, lock, code

Description

Date Lock locks the code to a period of time. There are three ways to lock your code to a period of time:

  • Lock the code to only allow execution after a specific date (known as startDate)
  • Lock the code to expire after a specific date (known as endDate)
  • Lock the code to only allow execution between two dates (startDate and endDate)

This is a good transformation to enforce license agreements. Countermeasures can be specified (optionally) to be executed when the code is executed in an invalid period of time.

Consider combining this transformation with obfuscation transformations to harden the resulting code making it more resilient to automated de-obfuscator tools and harder to understand by a human. You may also find useful to combine this transformation with other locks:

Code Annotation Example

// @jscrambler define dateLock {startDate: 2017/01/01, endDate: 2020/12/31, countermeasures: {deleteCookies: 1, redirect: https://www.example.com}} as dl1

Option Types

Name Required Default Value Description
startDate Yes N/A The code won't run in a date that is previous to the startDate.
endDate Yes N/A The code won't run in a date after the endDate.
countermeasures Yes {"deleteCookies": false,"breakApplication": true,"realTimeNotifications": false} List of available countermeasures

Countermeasures

Name Description
customCallback Name of the function to be called as a countermeasure.
deleteCookies Deletes all the cookies accessible via JavaScript.
redirect Redirects the user to a specific URL.
breakApplication Breaks the application's functionality.
realTimeNotifications Sends a notification when a violation occurs.

API Parameters

Example:

{
  "keys": {
    "accessKey": "XXXXXX",
    "secretKey": "YYYYYY"
  },
  "applicationId": "ZZZZZZ",
  "params": [
    {
      "name": "dateLock",
      "options": {
        "startDate": "2016-06-01",
        "endDate": "2016-06-01",
        "countermeasures": {
          "customCallback": null,
          "deleteCookies": false,
          "redirect": null,
          "breakApplication": true,
          "realTimeNotifications": false
        }
      }
    }
  ]
}