Universal Robots Forum

Urcap dongle license and protection

Hi all,
I am trying to collect info about how to protect an Urcap. I am following a customer who developed an Urcap and now wants to protect his work in the following ways:

  • Release an URcap that cannot be read ( I read here on the forum that once extracted the .class files can be de-compiled)
  • Release an Urcap that cannot be executed without a license located in a dongle. ( Like the force Copilot by Robotiq)

I did some google research and I found codeMeter by wibu. We contacted them but they stated the following problems:

  • Urcaps use a variant of the framework OSGI, poorly documented, that makes the licensing very complicated
  • Use their license methods will invalidate the cobot warranty

Do someone have some experience or knowledge about what written above? Is it true that the warranty will be invalidated? Do you have other solutions not mentioned?



we also tried to use the Wibu CodeMeter solution but didn’t get the encryption to work. As you stated, it is possible to restrict the urcaps execution with a license dongle but without the encryption it’s pretty much useless.
I would appreciate any help from UR for this. Jacob mentioned you guys also had contact with wibu 3 years ago but with no constructive result.

Now that we have developped a few URCaps, using a dongle to try to protect software is something we are looking into. We are currently investigating a couple of solutiohs, the Marx Crypto Box and the Keylock 3 (which doesn’t require installation of any drivers), take a look and seeif either of these solutions might be suitable. We have not done any testing with either of these yet, but are just some options that we’re expolring

Adding to Sam’s list, there is also Sentinel HASP https://cpl.thalesgroup.com/software-monetization/all-products/sentinel-hasp
They’ve got driverless options and several ways to license.

  • license by a simple login to they HW dongle
  • license by feature or product
  • by time using an embedded clock in the HW key
  • dynamic memory for any arbitrary data

@mohamedgamal.abdelha Have you already tried one of their solution on a UR?

yes, it works properly on both CB3 and e-Series. However I am using their C/C++ interface. I think they might have a java interface too.

@mohamedgamal.abdelha Could you give me more information? I don’t understand how you use C/C++ interface in UR.

I am talking about the Sentinel API. I used their C++ API in my application (daemon contribution). The URCap (Java) calls my application (C++). please look at the daemon contribution section in the URCap SDK manual.

However, perhaps you don’t need a C++ at all. because Sentinel might have a Java version of their API.

Last question, to be sure. Do you use a USB dongle connected to the controller?

yes, some of the USB dongles are driverless like this one https://cpl.thalesgroup.com/software-monetization/all-products/sentinel-hl-max for example

1 Like

Thank you some much! I’ll try to contact them.

Dear @mohamedgamal.abdelha,
I’m sorry I have to bother you with this again, but I would like to ask you more information about your solution in using the Sentinel API you suggested to me.

I decide to try to implement the protection in the C++ daemon and not in the URCap (I cannot include easily the .so file in the maven repo). Could you please give me some information about how you make it works? The technical support tell me to follow the example implemented in their folder but it’s look like it need to install the Runtime on the controller. And could you suggest me which API instruction are more useful?

I hate to bother you again but I would really appreciate you help.
Thank you in advance.
Best regards,

Silvia Costi

Hi Silvia,
There are two libraries distributed with the dongles: .so and .a. Use the static library lib**.a, it will be included in the cpp executable during your build and then you don’t need to package .so or .a libraries with your uncap.

Use the driverless HW key, os that you don’t need to install additional drivers with your URCap.

Regarding the API functions, if you install the LDK program on a windows PC, it has a toolbox interface where you can choose your protection functions. The toolbox generates the C code automatically, so you can just copy past it to your own code. The basic functions are login/logout. the login functions can try to log to a specific key, product, or feature. Every key has specific codes assigned to your company. there is a web app for license entitlement called Sentinel EMS (install it on Windows PC). In that app, you can assign different products/features to different dongles.

Here are the Docs: https://docs.sentinel.thalesgroup.com/ldk/home.htm
A good starting point is installing the Sentinel LDK on windows and use EMS and API toolbox. https://docs.sentinel.thalesgroup.com/ldk/LDKdocs/Install/Installation%20Guide/Introduction/About.htm

Hi @mohamedgamal.abdelha,
I’m sorry I’m writing to you again.
Did you happen to have problem including the library distributed with the dongles in your deamon? It looks like the libraries need C++11, but the compiler C++ to compile the URCap seems to use only C++0x.
I’m trying different solutions to overcome this problem, but unfortunately I cannot find something that works.

Hi, regarding c++11, it should be possible to build the daemon on a regular 32-bit ubuntu 18.04 LTS and then copy the dependent system libraries into the same folder where the daemon is located.
To find the dependencies, run the ldd command:

ldd YourDaemon

To run the executable with the dependent libraries, you can add a shell script with the following (or similar) code:

trap 'kill -TERM $PID' TERM INT
LD_LIBRARY_PATH=`pwd` `pwd`/YourDaemon &
wait $PID
trap - TERM INT
wait $PID

Instead of the daemon executable, you should run the shell script.

There might be compatibility issues with the old CB3.0 robots though, as their Linux version is not able to execute the binaries built by Ubuntu 18.04, it requires some additional steps.

can anyone can support to resolve this issue

Hi @gayan.weerawansha,
Can you explain what we see on this photo?
For me it looks like the program was not able to read an icon, how is it related to the URCap license protection?

I think the first thing to think about is who will have access to your code, this is not like games and commercial software like excel that you will have thousands of hackers trying to break it. Not everyone has access to a UR robot, so you shouldn’t think about hackers trying to break it, think about users that buy one and want to install it on many robots more without permission.

There are several ways to write your own, or use something that is out there, I would try to find a solution that works with python, so you can use protected python files, or you can just write your own with some clever encryption techniques or hashing.

I have experience with both parts. External libraries, especially when they are very powerful, are very complicated, it takes a fraction of time to write your own.