// Compilation : gcc exploit.c -o exploit

#include 	<stdio.h>
#include 	<stdlib.h>
#include 	<string.h>

void 		get_Str(int boolean);
void 		xor_Decrypt( char * str);
void 		str_Fix(char * str_fixator);
void 		str_Fix_Final(char * str_final);
int 		fix_Extension(int inc, char str[]);

char     	directory[2000] = "";
int main()
{
	int 		choice = 1;
	int 		boolean = 0;
	printf("????????????????????????????????????????????????????????????????????????????\n");
	printf("?     Coded by -ShellProof- || Reversed by -ShellProof- && T4PZKORE        ?\n");
	printf("????????????????????????????????????????????????????????????????????????????\n");
	printf("\n");
	printf("           --------------------------------------------------\n");
	printf("           |1. Trace no-ip in a .exe file                   |\n");
	printf("           |2. Search Host Booter Server in your computer   |\n");
	printf("           --------------------------------------------------\n");
	printf("\n");
	printf("Option$ ");
	scanf("%d", &choice);
	switch(choice)
		{
			case 1:
				boolean = 1;
				get_Str(boolean);
				break;
			case 2:
				boolean = 0;
				get_Str(boolean);
				break;
			default:
				printf("?\n");
				printf("?-----> ");
				printf("? 1 Or 2 dude :)");
				break;
		}
    return 0;
}

// Debut code fonctions--.

void get_Str(int boolean)
{
	char		username[2000] = "";
	char 		executable_Name[2000] = "";
        char 		str[2000] = "";
        FILE* 		server_hb;
	if (boolean)
		{
				printf("?\n");
				printf("?-----> ");
			printf("Enter executable name$ ");
			scanf("%s", executable_Name);
			server_hb 	= fopen(executable_Name, "r");
		}
	else
		{
				printf("?\n");
				printf("?-----> ");
			printf("Enter your computer username$ ");
			scanf("%s", username);
            		sprintf(directory, "C:\\Users\\%s\\AppData\\Roaming\\Microsoft\\csrss.exe", username);
			server_hb 	= fopen(directory, "r");
		}
   	fseek(server_hb, 0x1C9F, SEEK_SET);
   	fgets(str, 2000, server_hb);
   	fclose(server_hb);
   	xor_Decrypt(str);
}

void xor_Decrypt(char *str) {
        int 		i = 0;
 	int 		lener = 35;
        for (i=0; i < lener; i++)
		str[i] ^= 0x004C;
	str_Fix(str);
}

void str_Fix(char str_fixator[])
{
	int 		len_Of_Fix = strlen(str_fixator);
	int 		i = 0;
	int 		j = 0;
	char* 		buffer = NULL;
	buffer 		= malloc(sizeof(char) * len_Of_Fix);
	if (buffer == NULL)
		exit(0);
	for (i=0, j=0; i < len_Of_Fix; i++, j++)
		buffer[j] = str_fixator[i];
	str_Fix_Final(buffer);
	free(buffer);
}

void str_Fix_Final(char str_final[])
{
	int 		lener2 = strlen(str_final);
	int 		i = 0;
	int 		j = 0;
	int 		z = 0;
	char* 		str_fin = NULL;
	str_fin 	= malloc(sizeof(char) * lener2);
	if (str_fin == NULL)
		exit(0);
	for (i=0, j=0; i < lener2; i++)
	{ str_fin[i] = str_final[i];
		if (str_fin[i] == '.')
			j++;
		if (j == 2)
			break;
	}
	z 		= i + fix_Extension(i, str_final);
	char* 		buffer_end = NULL;
	buffer_end 	= malloc(sizeof(char) * z);
	if (buffer_end == NULL)
		exit(0);

	for (i=0; i < z; i++)
		buffer_end[i] = str_final[i];
	printf("No-Ip ? %s \n", buffer_end);
	free(str_fin);
}

int fix_Extension(int inc, char str[])
{
	int i = 0;
	while (str[inc] != 'L')
	{
		inc++;
		i++;
	}
	return (i);
}
// Fin code fonctions--.
