Windows 8 Key auslesen - Hilfe bei Übersetzung zu VB.Net benötigt

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von FormFollowsFunction.

    Windows 8 Key auslesen - Hilfe bei Übersetzung zu VB.Net benötigt

    Hallo, ich wollte wissen, ob jemand so nett ist.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. #include <SDKDDKVer.h>
    2. #include <Windows.h>
    3. #include <iostream>
    4. #include <sstream>
    5. union UINT32u
    6. {
    7. UINT32 u32;
    8. UINT16 u16[2];
    9. UINT8 u8[4];
    10. };
    11. union UINT64u
    12. {
    13. UINT64 u64;
    14. UINT32 u32[2];
    15. UINT16 u16[4];
    16. UINT8 u8[8];
    17. };
    18. union UINT128u
    19. {
    20. UINT64 u64[2];
    21. UINT32 u32[4];
    22. UINT16 u16[8];
    23. UINT8 u8[16];
    24. };
    25. void PrintArgs();
    26. int KeyDecode(WCHAR* key0);
    27. int KeyEncode(WCHAR* groupid,WCHAR* keyid,WCHAR* unk);
    28. UINT32 Hash(const UINT128u& key);
    29. bool ConvertChars(const WCHAR key0[29],UINT8 key1[25]);
    30. bool Decode(const UINT8 key1[25],UINT128u& key2);
    31. bool CheckHash(const UINT128u& key2,UINT128u& key3,UINT32u& check);
    32. bool GetInfo(const UINT128u& key3,UINT32u& groupid,UINT32u& keyid,UINT64u& secret);
    33. void SetInfo(const UINT32u groupid,const UINT32u keyid,const UINT64u secret,UINT128u& key3);
    34. void SetHash(const UINT128u& key3,UINT128u& key2,UINT32u& check);
    35. void Encode(const UINT128u& key2,UINT8 key1[25]);
    36. void UnconvertChars(const UINT8 key1[25],WCHAR key0[29]);
    37. static const UINT g_hash_table[256]={
    38. 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
    39. 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
    40. 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
    41. 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
    42. 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
    43. 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
    44. 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
    45. 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
    46. 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
    47. 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
    48. 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
    49. 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
    50. 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
    51. 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
    52. 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
    53. 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
    54. 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
    55. 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
    56. 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
    57. 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
    58. 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
    59. 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
    60. 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
    61. 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
    62. 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
    63. 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
    64. 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
    65. 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
    66. 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
    67. 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
    68. 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
    69. 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};
    70. UINT32 Hash(const UINT128u& key)
    71. {
    72. UINT32 hash=-1;
    73. UINT32 index;
    74. for(UINT i=0;i<16;++i)
    75. {
    76. index=((hash >> 24) ^ key.u8[i]) & 0xff;
    77. hash=(hash << 8) ^ g_hash_table[index];
    78. }
    79. return ~hash & 0x3ff;
    80. }
    81. int wmain(int argc,WCHAR* argv[])
    82. {
    83. switch(argc)
    84. {
    85. case 2:
    86. return KeyDecode(argv[1]);
    87. break;
    88. case 4:
    89. return KeyEncode(argv[1],argv[2],argv[3]);
    90. default:
    91. PrintArgs();
    92. break;
    93. }
    94. return -1;
    95. }
    96. void PrintArgs()
    97. {
    98. std::wcout << L"Key Encoding:" << std::endl;
    99. std::wcout << L" KeyInfo.exe <GroupId> <KeyId> <Secret>" << std::endl;
    100. std::wcout << L" <GroupId> 0-ffffff" << std::endl;
    101. std::wcout << L" <KeyId> 0-3fffffff" << std::endl;
    102. std::wcout << L" <Secret> 0-1fffffffffffff" << std::endl;
    103. std::wcout << L"Key Decoding:" << std::endl;
    104. std::wcout << L" KeyInfo.exe XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" << std::endl;
    105. }
    106. int KeyDecode(WCHAR* key0)
    107. {
    108. UINT8 key1[25];
    109. if(!ConvertChars(key0,key1))
    110. return -1;
    111. UINT128u key2;
    112. if(!Decode(key1,key2))
    113. return -1;
    114. UINT128u key3;
    115. UINT32u hash;
    116. if(!CheckHash(key2,key3,hash))
    117. return -1;
    118. UINT32u groupid;
    119. UINT32u keyid;
    120. UINT64u secret;
    121. if(!GetInfo(key3,groupid,keyid,secret))
    122. return -1;
    123. std::wcout << L"GroupId = " << std::hex << groupid.u32 << std::endl << L" " << std::dec << groupid.u32 << std::endl;
    124. std::wcout << L"KeyId = " << std::hex << keyid.u32 << std::endl << L" " << std::dec << keyid.u32 << std::endl;
    125. std::wcout << L"Secret = " << std::hex << secret.u64 << std::endl << L" " << std::dec << secret.u64 << std::endl;
    126. std::wcout << L"Hash = " << std::hex << hash.u32 << std::endl << L" " << std::dec << hash.u32 << std::endl;
    127. return 0;
    128. }
    129. bool ConvertChars(const WCHAR key0[29],UINT8 key1[25])
    130. {
    131. if(wcsnlen_s(key0,30)!=29)
    132. {
    133. std::wcout << L"Your key must be 29 characters long." << std::endl;
    134. return false;
    135. }
    136. if(key0[5]!=L'-' || key0[11]!=L'-' || key0[17]!=L'-' || key0[23]!=L'-')
    137. {
    138. std::wcout << L"Incorrect hyphens." << std::endl;
    139. return false;
    140. }
    141. if(key0[28]==L'N')
    142. {
    143. std::wcout << L"The last character must not be an N.";
    144. return false;
    145. }
    146. bool n=false;
    147. UINT j=1;
    148. UINT i=0;
    149. while(j<25)
    150. {
    151. switch(key0[i++])
    152. {
    153. case L'N':
    154. if(n)
    155. {
    156. std::wcout << L"There may only be one N in a key." << std::endl;
    157. return false;
    158. }
    159. n=true;
    160. key1[0]=j-1;
    161. break;
    162. case L'B':
    163. key1[j++]=0x00;
    164. break;
    165. case L'C':
    166. key1[j++]=0x01;
    167. break;
    168. case L'D':
    169. key1[j++]=0x02;
    170. break;
    171. case L'F':
    172. key1[j++]=0x03;
    173. break;
    174. case L'G':
    175. key1[j++]=0x04;
    176. break;
    177. case L'H':
    178. key1[j++]=0x05;
    179. break;
    180. case L'J':
    181. key1[j++]=0x06;
    182. break;
    183. case L'K':
    184. key1[j++]=0x07;
    185. break;
    186. case L'M':
    187. key1[j++]=0x08;
    188. break;
    189. case L'P':
    190. key1[j++]=0x09;
    191. break;
    192. case L'Q':
    193. key1[j++]=0x0a;
    194. break;
    195. case L'R':
    196. key1[j++]=0x0b;
    197. break;
    198. case L'T':
    199. key1[j++]=0x0c;
    200. break;
    201. case L'V':
    202. key1[j++]=0x0d;
    203. break;
    204. case L'W':
    205. key1[j++]=0x0e;
    206. break;
    207. case L'X':
    208. key1[j++]=0x0f;
    209. break;
    210. case L'Y':
    211. key1[j++]=0x10;
    212. break;
    213. case L'2':
    214. key1[j++]=0x11;
    215. break;
    216. case L'3':
    217. key1[j++]=0x12;
    218. break;
    219. case L'4':
    220. key1[j++]=0x13;
    221. break;
    222. case L'6':
    223. key1[j++]=0x14;
    224. break;
    225. case L'7':
    226. key1[j++]=0x15;
    227. break;
    228. case L'8':
    229. key1[j++]=0x16;
    230. break;
    231. case L'9':
    232. key1[j++]=0x17;
    233. break;
    234. case L'-':
    235. break;
    236. default:
    237. std::wcout << L"Invalid character in key." << std::endl;
    238. return false;
    239. }
    240. }
    241. if(!n)
    242. {
    243. std::wcout << L"The character N must be in the product key." << std::endl;
    244. return false;
    245. }
    246. return true;
    247. }
    248. bool Decode(const UINT8 key1[25],UINT128u& key2)
    249. {
    250. key2.u64[0]=0;
    251. key2.u64[1]=0;
    252. UINT64u res;
    253. for(UINT ikey=0;ikey<25;++ikey)
    254. {
    255. res.u64=24ULL*key2.u32[0]+key1[ikey];
    256. key2.u32[0]=res.u32[0];
    257. res.u64>>=32;
    258. res.u64+=24ULL*key2.u32[1];
    259. key2.u32[1]=res.u32[0];
    260. res.u64>>=32;
    261. res.u64+=24ULL*key2.u32[2];
    262. key2.u32[2]=res.u32[0];
    263. res.u64>>=32;
    264. res.u64+=24ULL*key2.u32[3];
    265. key2.u32[3]=res.u32[0];
    266. res.u64>>=32;
    267. }
    268. return true;
    269. }
    270. bool CheckHash(const UINT128u& key2,UINT128u& key3,UINT32u& check)
    271. {
    272. check.u32=0;
    273. memcpy_s(&key3,16,&key2,16);
    274. key3.u8[12]&=0x7f;
    275. key3.u8[13]=0;
    276. key3.u8[14]&=0xfe;
    277. check.u8[0]=(key2.u8[13] << 1) | (key2.u8[12] >> 7);
    278. check.u8[1]=((key2.u8[14] << 1) | (key2.u8[13] >> 7)) & 3;
    279. UINT32 hash=Hash(key3);
    280. if(hash!=check.u32)
    281. {
    282. std::wcout << L"Invalid key. The hash is incorrect." << std::endl;
    283. return false;
    284. }
    285. return true;
    286. }
    287. bool GetInfo(const UINT128u& key3,UINT32u& groupid,UINT32u& keyid,UINT64u& secret)
    288. {
    289. groupid.u32=0;
    290. keyid.u32=0;
    291. secret.u64=0;
    292. groupid.u8[0]=key3.u8[0];
    293. groupid.u8[1]=key3.u8[1];
    294. groupid.u8[2]=key3.u8[2] & 0x0f;
    295. keyid.u8[0]=(key3.u8[2] >> 4) | (key3.u8[3] << 4);
    296. keyid.u8[1]=(key3.u8[3] >> 4) | (key3.u8[4] << 4);
    297. keyid.u8[2]=(key3.u8[4] >> 4) | (key3.u8[5] << 4);
    298. keyid.u8[3]=((key3.u8[5] >> 4) | (key3.u8[6] << 4)) & 0x3f;
    299. secret.u8[0]=(key3.u8[6] >> 2) | (key3.u8[7] << 6);
    300. secret.u8[1]=(key3.u8[7] >> 2) | (key3.u8[8] << 6);
    301. secret.u8[2]=(key3.u8[8] >> 2) | (key3.u8[9] << 6);
    302. secret.u8[3]=(key3.u8[9] >> 2) | (key3.u8[10] << 6);
    303. secret.u8[4]=(key3.u8[10] >> 2) | (key3.u8[11] << 6);
    304. secret.u8[5]=(key3.u8[11] >> 2) | (key3.u8[12] << 6);
    305. secret.u8[6]=(key3.u8[12] >> 2) & 0x1f;
    306. return true;
    307. }
    308. int KeyEncode(WCHAR* sgroupid,WCHAR* skeyid,WCHAR* sunk)
    309. {
    310. UINT32u groupid;
    311. UINT32u keyid;
    312. UINT64u secret;
    313. std::wstringstream ss;
    314. ss << std::hex << sgroupid;
    315. ss >> groupid.u32;
    316. ss.clear();
    317. ss << std::hex << skeyid;
    318. ss >> keyid.u32;
    319. ss.clear();
    320. ss << std::hex << sunk;
    321. ss >> secret.u64;
    322. if(groupid.u32>0xffffff)
    323. {
    324. std::wcout << L"GroupId must be in the range 0-ffffff" << std::endl;
    325. return -1;
    326. }
    327. if(keyid.u32>0x3fffffff)
    328. {
    329. std::wcout << L"KeyId must be in the range 0-3fffffff" << std::endl;
    330. return -1;
    331. }
    332. if(secret.u64>0x1fffffffffffff)
    333. {
    334. std::wcout << L"Secret must be in the range 0-1fffffffffffff" << std::endl;
    335. return -1;
    336. }
    337. UINT128u key3;
    338. SetInfo(groupid,keyid,secret,key3);
    339. UINT128u key2;
    340. UINT32u hash;
    341. SetHash(key3,key2,hash);
    342. UINT8 key1[25];
    343. Encode(key2,key1);
    344. WCHAR key0[30]={0};
    345. UnconvertChars(key1,key0);
    346. std::wcout << key0 << std::endl;
    347. return 0;
    348. }
    349. void SetInfo(const UINT32u groupid,const UINT32u keyid,const UINT64u secret,UINT128u& key3)
    350. {
    351. key3.u64[0]=0;
    352. key3.u64[1]=0;
    353. key3.u8[0]=groupid.u8[0];
    354. key3.u8[1]=groupid.u8[1];
    355. key3.u8[2]|=groupid.u8[2] & 0x0f;
    356. key3.u8[2]|=keyid.u8[0] << 4;
    357. key3.u8[3]=(keyid.u8[1] << 4) | (keyid.u8[0] >> 4);
    358. key3.u8[4]=(keyid.u8[2] << 4) | (keyid.u8[1] >> 4);
    359. key3.u8[5]=(keyid.u8[3] << 4) | (keyid.u8[2] >> 4);
    360. key3.u8[6]|=(keyid.u8[3] >> 4) & 0x3;
    361. key3.u8[6]|=secret.u8[0] << 2;
    362. key3.u8[7]=(secret.u8[1] << 2) | (secret.u8[0] >> 6);
    363. key3.u8[8]=(secret.u8[2] << 2) | (secret.u8[1] >> 6);
    364. key3.u8[9]=(secret.u8[3] << 2) | (secret.u8[2] >> 6);
    365. key3.u8[10]=(secret.u8[4] << 2) | (secret.u8[3] >> 6);
    366. key3.u8[11]=(secret.u8[5] << 2) | (secret.u8[4] >> 6);
    367. key3.u8[12]|=((secret.u8[6] << 2) | (secret.u8[5] >> 6)) & 0x7f;
    368. }
    369. void SetHash(const UINT128u& key3,UINT128u& key2,UINT32u& check)
    370. {
    371. memcpy_s(&key2,16,&key3,16);
    372. check.u32=Hash(key2);
    373. key2.u8[12]|=check.u8[0] << 7;
    374. key2.u8[13]=(check.u8[0] >> 1) | (check.u8[1] << 7);
    375. key2.u8[14]|=(check.u8[1] >> 1) & 0x1;
    376. }
    377. void Encode(const UINT128u& key2,UINT8 key1[25])
    378. {
    379. UINT128u cur=key2;
    380. UINT64u res;
    381. UINT32u rem;
    382. UINT i=25;
    383. do
    384. {
    385. res.u64=cur.u32[3];
    386. cur.u32[3]=static_cast<UINT32>(res.u64/24);
    387. rem.u32=res.u64 % 24;
    388. res.u32[0]=cur.u32[2];
    389. res.u32[1]=rem.u32;
    390. cur.u32[2]=static_cast<UINT32>(res.u64/24);
    391. rem.u32=res.u64 % 24;
    392. res.u32[0]=cur.u32[1];
    393. res.u32[1]=rem.u32;
    394. cur.u32[1]=static_cast<UINT32>(res.u64/24);
    395. rem.u32=res.u64 % 24;
    396. res.u32[0]=cur.u32[0];
    397. res.u32[1]=rem.u32;
    398. cur.u32[0]=static_cast<UINT32>(res.u64/24);
    399. rem.u32=res.u64 % 24;
    400. key1[--i]=rem.u8[0];
    401. }
    402. while(i>0);
    403. }
    404. void UnconvertChars(const UINT8 key1[25],WCHAR key0[29])
    405. {
    406. UINT n=key1[0];
    407. n+=n/5;
    408. UINT j=1;
    409. for(UINT i=0;i<29;i++)
    410. {
    411. if(i==n)
    412. key0[i]=L'N';
    413. else if(i==5 || i==11 || i==17 || i==23)
    414. key0[i]=L'-';
    415. else
    416. {
    417. switch(key1[j++])
    418. {
    419. case 0x00:
    420. key0[i]=L'B';
    421. break;
    422. case 0x01:
    423. key0[i]=L'C';
    424. break;
    425. case 0x02:
    426. key0[i]=L'D';
    427. break;
    428. case 0x03:
    429. key0[i]=L'F';
    430. break;
    431. case 0x04:
    432. key0[i]=L'G';
    433. break;
    434. case 0x05:
    435. key0[i]=L'H';
    436. break;
    437. case 0x06:
    438. key0[i]=L'J';
    439. break;
    440. case 0x07:
    441. key0[i]=L'K';
    442. break;
    443. case 0x08:
    444. key0[i]=L'M';
    445. break;
    446. case 0x09:
    447. key0[i]=L'P';
    448. break;
    449. case 0x0a:
    450. key0[i]=L'Q';
    451. break;
    452. case 0x0b:
    453. key0[i]=L'R';
    454. break;
    455. case 0x0c:
    456. key0[i]=L'T';
    457. break;
    458. case 0x0d:
    459. key0[i]=L'V';
    460. break;
    461. case 0x0e:
    462. key0[i]=L'W';
    463. break;
    464. case 0x0f:
    465. key0[i]=L'X';
    466. break;
    467. case 0x10:
    468. key0[i]=L'Y';
    469. break;
    470. case 0x11:
    471. key0[i]=L'2';
    472. break;
    473. case 0x12:
    474. key0[i]=L'3';
    475. break;
    476. case 0x13:
    477. key0[i]=L'4';
    478. break;
    479. case 0x14:
    480. key0[i]=L'6';
    481. break;
    482. case 0x15:
    483. key0[i]=L'7';
    484. break;
    485. case 0x16:
    486. key0[i]=L'8';
    487. break;
    488. case 0x17:
    489. key0[i]=L'9';
    490. break;
    491. default:
    492. key0[i]=L'?';
    493. }
    494. }
    495. }
    496. }


    55/5000kann jemand diesen Code in vb .net konvertieren? dank

    ausgelagert aus Windows 8 Product Key auslesen, Spoiler hinzugefügt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wenn ich das richtig sehe, ist das C++.
    Probiere es doch erstmal selber, ansonsten ist es wohl was für den Marktplatz.
    tangiblesoftwaresolutions.com/…vb_converter_details.html

    Oder du recherchierst noch ein bischen (Eigeninitiative). Ich habe auf anhieb, hier im Forum, etwas gefunden,
    was auf Windows 10 anstandslos funktioniert, also denke ich, daß es dann auch mit Windows 8 funktioniert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FormFollowsFunction“ ()