Старый 09.02.2014, 09:12   #1
adastmin
 
Регистрация: 09.02.2014
Сообщений: 1
Репутация: 0
По умолчанию Нужен Де-крипт файла лицензии

И так дорогие. Бьюсь с этим уже пол года.

Есть файл в котором по моему предположению с заголовка файла берется ип + дата-время все завернуто в пару шифрований.

Что удалось сделать. Удалось вот это, но пока не пойму за что отвечают другие функции(это собирательный образ как воспринимает файл программа):

Код:
void lookup_thread(void * lpParameter) {
	SoloEntry * pthis = static_cast<SoloEntry *>(lpParameter);
	
	// Open File
	_iobuf * fp = Port_FileOpen(pthis->GetLicense(), "rb");
	if (! fp ) {
		CORE_TRACE("(lookup_thread)license file not found");
		CORE_TRACE(pthis->GetLicense());
		return;
	};
	
	// Get File Size
	_fseek(fp, 0, 2);
	unsigned int file_size = _ftell(fp);
	_fseek(fp, 0, 0);
	
	CRYPTO_INFO data;
	_memset(&data, 0, sizeof(data));
	
	// Get Internal/External flag
	bool is_internal = file_size == sizeof(data) - sizeof(data.time);
	
	if ( is_internal ) {
		if ( _fread(&data, 1, sizeof(data) - sizeof(data.time), fp) != sizeof(data) - sizeof(data.time) ) {
			CORE_TRACE("(lookup_thread)internal license file error");
			CORE_TRACE(pthis->GetLicense());
			_fclose(fp);
			return;
		};
	} else {
		if ( _fread(&data, sizeof(data), 1, fp) != 1 ) {
			CORE_TRACE("(lookup_thread)license file error");
			CORE_TRACE(pthis->GetLicense());
			_fclose(fp);
			return;
		};
	};
	_fclose(fp);
	
	unsigned int sock = pthis->GetOuterListenSock();
	char addr[32];
	// Try to get Outer Socket Name
	if (! Port_SocketGetSockName(sock, addr, sizeof(addr), &port) ) {
		CORE_TRACE("(lookup_thread)network error");
		CORE_TRACE(pthis->GetLicense());
		return;
	};
	
	// Compare Outer Addr
	if ( _strcmp(pthis->GetOuterAddr(), addr) ) {
		CORE_TRACE("(lookup_thread)network address error");
		CORE_TRACE(pthis->GetLicense());
		return;
	};
	
	// Check for Internal Outer Addr
	if ( is_internal && _strcmp(addr, "127.0.0.1") && _memcmp(addr, "192.168.", 8) ) {
		CORE_TRACE("(lookup_thread)not internal address");
		CORE_TRACE(pthis->GetLicense());
		return;
	};
	
	// Prepare Key
	char key[32];
	_memset(key, 0xCC, sizeof(key));
	key = {0x77, 0x56, 0xD3, 0x34, 0x2B, 0x8C, 0xE2, 0x2F, 0xED, 0xAC, 0xB8, 0x15, 0x45, 0x9E, 0x5E, 0xC4};
	CopyString(&key[16], 16, addr);
	md5 alg = new md5();
	alg.Update(key, sizeof(key));
	alg.Finalize();
	unsigned char * res_key = alg.Digest();
	if (! is_internal ) {
		des2key(res_key, 1);
		unsigned char * source = data.time;
		D2des(source, source); 
		
		// Decrypt Time data
		
		unsigned int * pTemp;
		pTemp = static_cast<unsigned int *>(&key[8]);
		pTemp[0] = data.nStartTime;
		pTemp = static_cast<unsigned int *>(&key[12]);
		pTemp[0] = data.nEndTime;
		
		alg.Update(key, sizeof(key));
		alg.Finalize();
		res_key = alg.Digest();
		des2key(res_key, 1);
	} else {
		des2key(res_key, 1);
	};

	// Decode Data
	unsigned char * source = static_cast<unsigned char *>(&data);
	for ( unsigned int i = 0; i < 16; i++ ) {
		D2des(source, source);
		source += 16;
	};
	
	// Calculate CheckSum
	unsigned int check_sum = 0;
	for ( unsigned int k = 0; k < sizeof(data.data); k++ ) {
		check_sum += data.data[k];
	};
	
	// If CheckSum OK
	if ( check_sum == data.nCheckSum ) {
		if (! is_internal ) {
			// Check Licensed Period
			pthis->m_nLicStartTime = data.nStartTime;
			pthis->m_nLicEndTime = data.nEndTime;
			if ( time(0) < data.nStartTime ) { // ************** TODO: FIXME ************** 
				CORE_TRACE("(lookup_thread)license too young!");
				return;
			};
			if ( time(0) > data.nEndTime ) { // ************** TODO: FIXME ************** 
				CORE_TRACE("(lookup_thread)license too old!");
				return;
			};
		};
		pthis->m_nLicenseData0 = data.nLicenseData[0];
		pthis->m_nLicenseData1 = data.nLicenseData[1];
		pthis->m_nLicenseData2 = data.nLicenseData[2];
		pthis->m_nLicenseData3 = data.nLicenseData[3];
		pthis->m_nLicenseData4 = data.nLicenseData[4];
		pthis->m_nLicenseData5 = data.nLicenseData[5];
		pthis->m_nLicenseData6 = data.nLicenseData[6];
		pthis->m_nLicenseData7 = data.nLicenseData[7];
	};
};

Вот файлы лицензии http://rghost.ru/52301463

Их две штуки с разной информацией.

У кого есть свободное время попробуйте, расшифровать. И если получится сделать криптор-декриптор.
adastmin вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot