View difference between Paste ID: ZJnzkDmh and vdyKbK4v
SHOW: | | - or go back to the newest paste.
1
if (cr != check_revision_result_success)
2
	printf("[BNCS] Error | Failed to calculate executable hash\n");
3
else
4
{
5
	if (this->m_Config->ReadValue("Global", "UseExp"))
6
	{
7
		std::string classic_output, classic_public, xpac_output, xpac_public;
8
9
		if (hash_d2key(this->m_Config->ReadString("Global", "ClassicKey"), this->ClientToken, this->ServerToken, classic_output, classic_public))
10
		{
11
			if (hash_d2key(this->m_Config->ReadString("Global", "XpacKey"), this->ClientToken, this->ServerToken, xpac_output, xpac_public))
12
			{
13
				Client::SID_AUTH_CHECK_ALT Pkt;
14
15
				Pkt.ClientToken		= this->ClientToken;
16
				Pkt.ExeVersion		= 0x01000001;
17-
				Pkt.ExeHash			= nHash;
17+
				Pkt.ExeHash		= nHash;
18
				Pkt.KeyCount		= 0x02;
19-
				Pkt.Spawn			= 0x00;
19+
				Pkt.Spawn		= 0x00;
20
21
				Pkt.KeyLengthA		= 0x10;	// 16 in decimal
22-
				Pkt.ProductA		= 0x06; // Not sure bout this, should work with 6
22+
				Pkt.ProductA		= 0x06; // Product of 6, got this from heroin library
23
				Pkt.PublicA			= atoi(classic_public.c_str());
24
				Pkt.UnknownA		= 0x00;
25
				
26-
				const char* classic	= classic_output.c_str();
26+
				const char* classic	= classic_output.c_str(); // This should copy the data over
27
				memcpy(&Pkt.KeyDataA[0], classic, 4);
28
				memcpy(&Pkt.KeyDataA[1], classic + 4, 4);
29
				memcpy(&Pkt.KeyDataA[2], classic + 8, 4);
30
				memcpy(&Pkt.KeyDataA[3], classic + 12, 4);
31
				memcpy(&Pkt.KeyDataA[4], classic + 16, 4);
32
33
				Pkt.KeyLengthB		= 0x10;
34-
				Pkt.ProductB		= 0x0A; // Product is 10
34+
				Pkt.ProductB		= 0x0A; // Product is 10, again from heroin
35
				Pkt.PublicB			= atoi(xpac_public.c_str());
36
				Pkt.UnknownB		= 0x00;
37
38
				const char* xpac	= xpac_output.c_str();
39
				memcpy(&Pkt.KeyDataB[0], xpac, 4);
40
				memcpy(&Pkt.KeyDataB[1], xpac + 4, 4);
41
				memcpy(&Pkt.KeyDataB[2], xpac + 8, 4);
42
				memcpy(&Pkt.KeyDataB[3], xpac + 12, 4);
43
				memcpy(&Pkt.KeyDataB[4], xpac + 16, 4);
44
45
				char* exeinfo	= this->m_Config->ReadString("Hash", "Info");
46
				int exe_len		= strlen(exeinfo)+1;
47
48
				char* owner		= this->m_Config->ReadString("Global", "Owner");
49
				int owner_len	= strlen(owner)+1;
50
51
				Pkt.ExeInfo		= new char[exe_len];
52
				Pkt.KeyOwner	= new char[owner_len];
53
54
				memcpy(Pkt.ExeInfo, exeinfo, exe_len);
55
				memcpy(Pkt.KeyOwner, owner, owner_len);
56
57
				nLength = sizeof(Client::SID_AUTH_CHECK_ALT) - 8 + exe_len + owner_len;
58
59
				char* pBuf = new char[nLength];
60
				memcpy(pBuf, &Pkt, nLength);
61
62
				this->Send(0x51, nLength, pBuf);
63
64
				delete[] pBuf;
65
			}
66
			else
67
				printf("[BNCS] Error | Failed to hash xpac cdkey\n");
68
		}
69
		else
70
			printf("[BNCS] Error | Failed to hash classic cdkey\n");
71
	}
72
	else
73
	{
74
		// classic hashing only here
75
	}