Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable application after expiry date for trial

I am writing a simple application for a semi-trusted client, and have no say on certain specifics. The client must be given a copy of a binary, myTestApp, which makes use of proprietary code in an external library, libsecrets. It is a Windows application that will run on a few separate Windows 7 laptops. I have been informed that after the application has served its purpose, it will be deleted. I know there is no perfect solution to this, but I would like to implement an expiry date in the program, and hinder efforts to potentially reverse engineer the code, or at least to prevent the contents of libsecrets from being exposed too easily.

So, my first step will be to statically link myTestApp against libsecrets so everything is contained in one binary, so only the needed pieces of libsecrets is included in the final binary, and its interfaces are no longer published.

Second, I want to implement some sort of getTime mechanism that is not naive. Is there anything in Windows that does a "secure" getTime call, so it can't be tricked by changing the time in the system tray or the BIOS?

Thirdly, if there is no "secure" getTime call, I could also modify myTestApp to use NTP to query a trusted time server, and fail if it can't get the time from it or the trial period has elapsed. But this could be fooled by messing with DNS on the gateway, unless there is some sort of certificates mechanism in place to verify the time server. I don't know much about this though, and would need some suggestions on how to implement it.

Next, is there some way to alter the binary so that it is impractical for individuals to attempt to reverse engineer it by viewing the assembly code? Maybe some sort of wrapper that encrypts the binary and requires a third-party authentication tool? Or maybe some sort of certificate I create that is required to run it and expires later?

Finally, is there any software out there (ie: packaging or publishing software) that can do this for me, either by repacking the final .exe or as some sort of plugin for Microsoft Visual Studio?

Thank you all in advance.


Edit: This is NOT meant to be a bullet proof system, and if it fails, that is acceptable. I just want to make it inconvenient for a non-technical person to attempt to crack. The people using it are technical Luddites, and the only way the software would be cracked is if they hired someone to do it. Since the names and company name are watermarked into the application, and only one person could benefit from its use, it's unlikely they would redistribute it.

like image 503
Cloud Avatar asked Dec 19 '13 18:12

Cloud


People also ask

How do you use a trial expired application again?

Reinstall Windows. This method will erase all data from your computer's hard drive, including all personal data such as pictures and documents. Back up all of your computer files and reinstall Windows. Reinstall the trial software and you will be able to use it again.

Can applications expire?

Mobile Apps do not expire. Since Mobile Apps and galleries are actually completely different entities, even if a gallery expires or is deleted, the Mobile App is unaffected. Regardless of the status of a gallery, the Mobile App will continue to work.


1 Answers

You can't make things complete secure, but you can make it hard(er).

Packing with UPX adds some level of complexity to the hacker.

You can check at runtime if you're running under a debugger in several places or if you're running under a virtual machine.

You can encrypt a DLL you're using and load it manually (complicated).

You can write a loader that checks a hash of your application and your application can check the hash of the loader.

You can get the system time and compare it to a system time you already wrote to disk and see that it's monotonic. All depends on the level of protection you want.

If you go to PirateBay or any other torrent site, you'll see that everything get's hacked if hackers are interested.

like image 141
egur Avatar answered Sep 18 '22 21:09

egur