↪ Jump to Section → [C++] Project64 Machine ID Generation

project64 nag removal

»  while Project64 is free to use, the developers have added a nag dialog, asking for donations.
»  this modification allows any registration code to be accepted, thus disabling the dialog.
»  the trick is to modify two conditional jump instructions; avoiding the rejection of invalid codes.

how to patch it yourself;
»  open primary executable (Project64.exe) in a hex editor
»  search & replace the original values with NOP (90) at these addresses;
— 00048448 // this block allows acceptance without internet connection
— 00048449
— 0004844A
— 0004844B
— 0004844C
— 0004844D

— 00048455 // this block is required
— 00048456
— 00048457
— 00048458
— 00048459
— 0004845A

— 00048560 // this block is required
— 00048561

for use of version; Project64 3.0.1-5664-2df3434

Quick How To Instructions;
»  Place "Project64_patched.exe" within the installation directory along side of "Project64.exe".
»  Run the patched executable. If the registration dialog doesn't automatically appear, then click on the tab Help->SupportProject64.
»  On this dialog you'll see a blue clickable link, this opens another dialog to enter in a unique registration code.
»  Enter any text into the box & click OK. If you're using the patched executable, it will accept the code.
»  A registry key is created for future registration validation.
»  You can now exit & continue to use the original unpatched executable.
»  Optionally, you can delete the patched executable, as it is no longer needed.
»  Now when you click the tab Help->SupportProject64, that once blue clickable link is now grey & disabled, meaning it is registered.
»  The support dialog with timer will no longer appear.

other info
»  the "Machine ID" is generated by using the computer's NAME, HDD SERIAL, & MachineGuid registry key combined, seperated by periods & then md5 hashed.

MD5 hashs
»  EC5B993905B89F85BB6A9BB718FDC603 Project64_original.exe
»  1ED2C0349482FE1D2F7A672C084EB299 Project64_patched.exe

executables;  Project64_original.exe  Project64_patched.exe

below is a screenshot with ollydbg for a better reference. ollydbg.png

[C++] Project64 Machine ID Generation

»  Here is a source code on how Project64 generates Machine ID in the registration process.

»  tested, working under Windows 7. compiled with mingw32.
»  Do not use speed optimization flags with the compiler as it will give inaccurate results.
»  The Machine ID consists of the PCName, HDD Serial, & Guid registry key, then performing a MD5 hash on them -- formatted like this: < PCName.HDDSERIAL.GUIDREG >
*	[C++] Project64 Machine ID Generation
*	Written by Phillip Housden @ https://starwolf.net/

#include <windows.h>
#include <iostream>

int main() {
	HKEY hKey;
	unsigned char dwReturn[64];
	for(int k=0; k<64; k++) dwReturn[k]=0x00;
	unsigned long dwBufSize=sizeof(dwReturn);

	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Cryptography",0,KEY_QUERY_VALUE | KEY_WOW64_64KEY,&hKey) == ERROR_SUCCESS) {
		if(RegQueryValueEx(hKey,"MachineGuid",0,0,dwReturn,&dwBufSize) == ERROR_SUCCESS) {
		} else {
			printf("RegQueryValueEx Failed");

	} else {
		printf("RegOpenKeyEx Failed");

	unsigned long dwPCNAME;
	char szPCNAME[64];
	for(int y=0; y<64; y++) szPCNAME[y]=0x00;


	char szMachineCode[128];
	for(int q=0; q<128; q++) szMachineCode[q]=0x00;

	unsigned long disk_serialINT;

	printf("\nString to MD5 hash: %s\n\n",szMachineCode);

	int iMachineCode=strlen(szMachineCode);


	unsigned char rgbHash[16];
	char rgbDigits[]="0123456789ABCDEF";

	unsigned char byteMachineCode[128];
	for(int q=0; q<128; q++) {


	unsigned long cbHash=16;
	printf("Your unique Machine ID is: ");
	for (unsigned long i=0x00; i<cbHash; i++) {




	return 0;