I am looking for a good software protection solution and I came here since I decided that VMProtect is everything I really need for a great price.
I am programming in C++, C# and Delphi so it really has everything I need. Except .NET C#.
I tested C++ licensing and it works great. It recognizes all [Procedure] points. But when I tried to load Delphi license example it says:
“Procedure “TForm1.tryBtnClick” is not found in objects list”
then
“Procedure “TForm1.edSerialNumberChange” is not found in objects list”
and
“Procedure “TForm1.FormCreate” is not found in objects list”
I didn’t modify anything, I just compiled the project in Delphi 2010 and opened the TestApp.exe with VMProtect. Same as I did with C++, but Delphi won’t work. I checked the TestApp.exe.vmp and all those procedures are there under [Procedure]. C++ project file also has three of them but of course in different format.
Any ideas why VMProtect cannot read those procedures? Is it because of compiler or?
After compilation in Delphi 2010 these procedures will have such names:
“Unit1.TForm1.tryBtnClick”
“Unit1.TForm1.edSerialNumberChange”
“Unit1.TForm1.FormCreate”
Try to add these procedures manually through GUI of VMProtect.
Ok, I’ve done that. Added all three procedures but TestApp.vmp.exe will not accept the key. I tried adding procedures both manually and edited the .vmp file and added Unit1. before those three procedures. Nothing works. INVALID_STATE always.
I reproduced every step from C++ example and it won’t work.
Only difference I notice is that C++ exe has (key) in front of 0042D650 ProtectedCode(struct HWND__ *) and there is no (key) in Delphi procedures.
Just few more questions before purchase… Sorry for this but I want to know everything about the product before purchase. This is also important to me, but not dealbreaker.
Question 1:
When I pack a .EXE/.DLL with VMProtect. Every PE Identifier will show that an is packed with VMProtect.
Does VMProtect offers “packer” confusion like some others do?
Is there any trick to rick PE identifiers so they cannot make a positive result?
And third is obvious: After I packed my exe/dll with VMP, Can I use another packer to mask the packer signature?
And PS. Maybe you could implement a dropbox full of packers for user to select to completely confuse the cracker.
Question 2:
I know that there is a very nice help inside VMProtect install folder, but I was wondering is there some other documentation? Any kind will do but my focus is at “pen-test” VMProtected software and such.
Question 2:
If I protect my Delphi application with VMP 2.05 and use VMP Licensing System… what are the chances it will be cracked? I never tried to do VMP UnPackme or similar so I don’t know how licensing system is strong.
The demo-version of VMProtect has fixed and known signatures. The full version doesn’t and it is quite hard to detect VMProtect in the packed file if you want to hide it.
See #1
See #1
I tell you more that we don’t recommend to mix packers.
All the documentation is shipped with VMProtect. No other documentation exists.
One of the most important feature of VMProtect is its virtualization engine. Even if a hacker spends lots of time to crack your application, you just need to re-protect it and he has to start from the beginning. Each time you protect the application, VMProtect creates a set of completely different virtual machines and virtualizes everything related to licensing. So every protected application has a completely different virtualized licensing code. It is very difficult even to analyze it.
In the upcoming version 2.06 this scheme will be improved, so it will be much harder to crack the licensing system.
I just did a test on a simple HelloWorld app and got this:
[File Heuristics] -> Flag : 00000000000001001100001100000111 (0x0004C307)
[!] VM Protect v1.60 - v2.05 (or newer) detected !
- Scan Took : 0.844 Second(s)
So it looks like it can see the packer with no problem, unless I use that trick. But I don’t know what the trick is? If you can tell me where should I make that trick? Is it the scripts? I am asking because I didn’t find it in the help files and I want to confuse PE identifiers.
As for the cracking of licensing system, I am pleased with that. If a cracker needs few weeks to dump VM and then keygen it, it is enough. And especially if I set 2 or 3 VMs
Thanks!
PS. Great product you have here. I am myself in RCE business (for fun) and I think I never saw more complicated protection. Hell, they were saying Securom 7 was unbreakable and then Bioshock (game) came and me and other two cracked it in 3 weeks. Only because we had to dump the VM and do a complete code reconstruction. But this is really great.
Hi. I started having a really strange problem. I am now testing the licensing on a simple app just to see the functionality.
When you instructed me to add Procedures manually, it worked. Now, I can’t see any procedures of any EXE I open. Even the TestApp.exe from Example directory.
First I guessed I did something wrong in my app, but then I tried your Example and it still doesn’t work.
When I click “All Procedures” I only see
0045EF28 EntryPoint
I tried Delphi and C++. Can’t see any procedures except EntryPoint. I tried reinstalling the VMP Demo and still nothing.
It still gives Warning that those objects cannot be found. And when I try manually, there are no procedures except EntryPoint?
What happened?
EDIT:
C++ EXES work. I tried opening my old apps and it reads Procedures with no problems, but Delphi won’t.
Can the problem be in newly installed components for Delphi 2010? When it all worked, I was coding in fresh installed Delphi 2010. Now I have some components added. But I didn’t use those components in my test app. And also I didn’t use them in your TestApp.exe example.
Can it be that compiler changed somehow and VMProtect cannot read the procedures in the EXE? But then that doesn’t make sense since it also cannot read Procedures from EXES compiled a long time ago in Delphi…
We have analyzed “File Heuristics” (hehe - if it can be named a heuristic )) of ProtectionID 0.6.4 and we`ll plan to circumvent this analysis in the next version of VMProtect.
About your problems with procedures list - I think that you did not set the creation of MAP file in your compiler (Project → Options → Linker → Map file) or MAP file does`t exist at application directory.
Heh it worked. I didn’t notice that Delphi has turned MAP off. It was creating it before. Dunno why it disabled it.
Just another quick question. When I compile test example and run the TestApp.vmp.exe and press the “Try to execute protected code” button I get the right message and I didn’t enter any serial. When I enter a valid serial, I get the same message. Is there some check if key is right so if it not I get some error?
Here is RAR archive of the app. I couldn’t attack it because it is 900kb. Files: TestApp.vmp.exe, VMProtectSDK32.dll and serial.txt (valid serial inside). .EXE is created with default code from your Delphi Example. Nothing was modified. Check it out.
In your application “tryBtnClick” is not locked by serial number (the demo version can protect ONLY one random procedure from your list of procedures for protection).
P.S. VMProtectSDK32.dll is not need for protected application.
Believe me, I don’t go asking around… I study alot! But these things eluded me in my quest to make a test app.
I am testin VMP for 2 full days now but it is not easy! You must admit that. Even with help.
So, can you help me for the last time with my testapp? Please
If it is not a problem can you please show me (explain in code, I understand) how to “LOCK “tryBtnClick” to the SERIAL NUMBER”? so when I press that button I get error unless valid serial is provided.
And also, if you can write a small Delphi application. It is just drag and drop. I want to see how would you handle it. I am coding an app that has elements mentioned below. App should look like this:
Blank Delphi Form - nothing to do here
Add Menu to form → Edit → here make 3 master menus, every master has 2 childs and every child has 1 baby. I hope you understand
In a nutshell, I need to disable 3 master menus for unregistered. After key is entered it all unlocks. As you see this is 5min of work so please help me
And if you have other advices about Menus, please say . And also, please send me complete source so I can see what have you done.
Thanks a bunch!
And BTW - If you for some reason need IDA Pro 5.7 Advanced, we can do something about that.
Read the post carefully.
I don’t see any error message. I get “Protected code succesfully executed” when I click the button which is not common sense since valid key needs to be inputted so when yo press the button, THEN you get “Protected code succesfully executed”. If Memo is empty or key invalid, user should get ERROR message saying "Invalid key bla bla bla).
Then how to make that when you click that button:
if(serial==invalid)
displaymessage "Wrong Serial"
else if (serial==valid)
displaymessage "Registered!"
Please I really need this, because when I created my test app (with 1 procedure), I can’t register it because every time I click the button, disabled features become enabled. So please if you can help me here. It is 5-10min work MAX. I really need this so I can see options on how to implement it. Just to this:
Create Blank Delphi Form and leave it empty.
Add Menu to Form and Edit it. For example -
make 3 master menus, every master has 2 childs and every child has 1 baby.
In a nutshell, I need to disable 3 master menus for unregistered. After key is entered it all unlocks. As you see this is 5min of work so please help me
And if you have other advices about Menus, please say . And also, please send me complete source so I can see what have you done.
I’ve already written that before to ask - check the help of VMProtect. But I dont understand why you dont want to do it.
There is the source from help file (“The software licensing system - Example of usage - Step #2: Add license checking code”):
#include <windows.h>
#include <stdio.h>
#include "VMProtectSDK.h"
int main(int argc, char **argv)
{
char *serial = "X-serial-number";
int res = VMProtectSetSerialNumber(serial);
printf("res = 0x%08X\n", res);
if (res)
{
printf("please register!\n");
return 0;
}
printf("We are registered.\n");
return 0;
}
P.S. “Licensing module API”:
VMProtectSetSerialNumber
Function passes serial number to the licensing module. Full specification follows:
INT __stdcall VMProtectSetSerialNumber(const char *SerialNumber);
Parameter SerialNumber should contain text string with serial number generated by the License Manager or by standalone generator. Serial number is base-64-encoded string, terminated by ‘\0’. Function returns set of bit flags, like the VMProtectGetSerialNumberState() does. Flags show if serial number is correct or invalid and describe why. If serial number is correct, function returns 0.
VMProtectGetSerialNumberState
Function returns state of serial number, set by VMProtectSetSerialNumber() call. Full specification is simple:
INT __stdcall VMProtectGetSerialNumberState();
If at least one bit of returned value is set - key is invalid and application should terminate or fall back to the demo mode. Below is a description of possible flags:
Flag Value Description
SERIAL_STATE_FLAG_CORRUPTED 0x00000001 - Licensing module is corrupted. This may be caused by cracking attempts. Usually you will never get this flag.
SERIAL_STATE_FLAG_INVALID 0x00000002 - Serial number is invalid. You will get this flag if licensing module will be unable to decrypt serial number of if the serial number is not yet set or it is empty.
SERIAL_STATE_FLAG_BLACKLISTED - 0x00000004 Serial number is correct, but it was blacklisted in the License Manager.
SERIAL_STATE_FLAG_DATE_EXPIRED - 0x00000008 Serial number is expired. You will get this flag if serial number has expiration date chunk and this date is in the past. You may read the expiration date by calling VMProtectGetSerialNumberData() function.
SERIAL_STATE_FLAG_RUNNING_TIME_OVER - 0x00000010 Running time limit for this session is over. You may read limit value by calling VMProtectGetSerialNumberData() function.
SERIAL_STATE_FLAG_BAD_HWID - 0x00000020 Serial number is locked to another hardware identifier.
SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED - 0x00000040 Serial number will not work with this version of application, because it has “Max Build Date” block and the application was build after those date. You may read maximal build date by calling VMProtectGetSerialNumberData() function.