1+ #pragma once
2+ #include " encryption/xorstr.hpp"
3+ #include < iostream>
4+ #include < Windows.h>
5+ #include < winsvc.h>
6+ #include < random>
7+ #include < winioctl.h>
8+ #pragma warning(disable:4191 4099)
9+ #pragma warning(disable:4996)
10+
11+ #define BLACK 0
12+ #define BLUE 1
13+ #define GREEN 2
14+ #define CYAN 3
15+ #define RED 4
16+ #define MAGENTA 5
17+ #define BROWN 6
18+ #define LIGHTGRAY 7
19+ #define DARKGRAY 8
20+ #define LIGHTBLUE 9
21+ #define LIGHTGREEN 10
22+ #define LIGHTCYAN 11
23+ #define LUGHTRED 12
24+ #define LIGHTMAGENTA 13
25+ #define YELLOW 14
26+ #define WHITE 15
27+
28+ namespace Util
29+ {
30+ RECT rc;
31+ std::string random_string (const int len)
32+ {
33+ const std::string alpha_numberic (" ABCDEFGHIJKLMNOPRSTUVZabcdefghijklmnoprstuvz1234567890" );
34+ std::default_random_engine generator{ std::random_device{}() };
35+ const std::uniform_int_distribution< std::string::size_type > distribution{ 0 , alpha_numberic.size () - 1 };
36+ std::string str (len, 0 );
37+ for (auto & it : str)
38+ {
39+ it = alpha_numberic[distribution (generator)];
40+ }
41+ return str;
42+ }
43+
44+ /* set the gay fucking color */
45+ void SetColor (unsigned short color)
46+ {
47+ HANDLE con = 0 ;
48+ con = GetStdHandle (STD_OUTPUT_HANDLE);
49+ SetConsoleTextAttribute (con, color);
50+ }
51+
52+ /* clear the console */
53+ void Clear ()
54+ {
55+ COORD topLeft = { 0 , 0 };
56+ HANDLE console = GetStdHandle (STD_OUTPUT_HANDLE);
57+ CONSOLE_SCREEN_BUFFER_INFO screen;
58+ DWORD written;
59+ GetConsoleScreenBufferInfo (console, &screen);
60+ FillConsoleOutputCharacterA (console, ' ' , screen.dwSize .X * screen.dwSize .Y , topLeft, &written);
61+ FillConsoleOutputAttribute (console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize .X * screen.dwSize .Y , topLeft, &written);
62+ SetConsoleCursorPosition (console, topLeft);
63+ return ;
64+ }
65+
66+ /* get hwid */
67+ static std::string get_hwid () {
68+ std::string m_sResult;
69+
70+ HANDLE m_hFile = CreateFileW (L" \\\\ .\\ PhysicalDrive0" , 0 , FILE_SHARE_READ | FILE_SHARE_WRITE, NULL , OPEN_EXISTING, 0 , NULL );
71+ if (m_hFile == INVALID_HANDLE_VALUE)
72+ return { };
73+
74+ std::unique_ptr< std::remove_pointer <HANDLE >::type, void (*)(HANDLE) > m_hDevice
75+ {
76+ m_hFile, [](HANDLE handle)
77+ {
78+ CloseHandle (handle);
79+ }
80+ };
81+
82+ STORAGE_PROPERTY_QUERY m_PropertyQuery;
83+ m_PropertyQuery.PropertyId = StorageDeviceProperty;
84+ m_PropertyQuery.QueryType = PropertyStandardQuery;
85+
86+ STORAGE_DESCRIPTOR_HEADER m_DescHeader;
87+ DWORD m_dwBytesReturned = 0 ;
88+ if (!DeviceIoControl (m_hDevice.get (), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof (STORAGE_PROPERTY_QUERY),
89+ &m_DescHeader, sizeof (STORAGE_DESCRIPTOR_HEADER), &m_dwBytesReturned, NULL ))
90+ return { };
91+
92+ const DWORD m_dwOutBufferSize = m_DescHeader.Size ;
93+ std::unique_ptr< BYTE[] > m_pOutBuffer{ new BYTE[m_dwOutBufferSize] { } };
94+
95+ if (!DeviceIoControl (m_hDevice.get (), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof (STORAGE_PROPERTY_QUERY),
96+ m_pOutBuffer.get (), m_dwOutBufferSize, &m_dwBytesReturned, NULL ))
97+ return { };
98+
99+ STORAGE_DEVICE_DESCRIPTOR* m_pDeviceDescriptor = reinterpret_cast <STORAGE_DEVICE_DESCRIPTOR*>(m_pOutBuffer.get ());
100+ const DWORD m_dwSerialNumberOffset = m_pDeviceDescriptor->SerialNumberOffset ;
101+ if (m_dwSerialNumberOffset == 0 )
102+ return { };
103+
104+ m_sResult = reinterpret_cast <const char *>(m_pOutBuffer.get () + m_dwSerialNumberOffset);
105+ m_sResult.erase (std::remove_if (m_sResult.begin (), m_sResult.end (), std::isspace), m_sResult.end ());
106+
107+ return m_sResult;
108+ }
109+ }
0 commit comments