如何阻止 C++ 控制台输出“tick”

时间:2021-01-20 03:48:10

标签: c++

我根本无法在网上找到有关此的任何其他信息。我有一个简单的身份验证程序,其中写入了一个 .dll 注入器。如果密钥与数据库中的密钥匹配,它将运行注入器,并不断检查以确保密钥仍然处于活动状态。出于某种原因,我的控制台窗口大约每秒输出“滴答”。当注入器被取出时,它只是身份验证器,它不会这样做。

#include <iostream>
#include <string>
#include <Windows.h>
#include <thread>
#include <WinInet.h>
#include <TlHelp32.h>
#include <fcntl.h> 
#include <io.h>
#include <fcntl.h> 
#include <cstdio>
#include <chrono>




#include "include/c0gnito.h"



std::string Key;
std::string hwid = GetHardwareID(); //Gets the hwid


char* StringToChar(std::string string) //A function to convert a string to a char
{
    return _strdup(string.c_str());
}

template <class T>
void msg(T msg) 
{
    std::cout << msg << std::endl;
}

bool FileExists(const std::string& fileName)
{
    struct stat buffer;
    return (stat(fileName.c_str(), &buffer) == 0);
}

void WriteStringToIni(std::string string, std::string file, std::string app, std::string key)
{
    WritePrivateProfileStringA(app.c_str(), key.c_str(), string.c_str(), file.c_str());
}

std::string ReadStringFromIni(std::string file, std::string app, std::string key)
{
    char buf[100];
    GetPrivateProfileStringA(app.c_str(), key.c_str(), "NULL", buf, 100, file.c_str());
    return (std::string)buf;
}

LONG address = 0x0;
BYTE newvalue[] = { 0x0 };
HWND hwnd;
HANDLE phandle;
DWORD pid;

DWORD GetProcId(const char* procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (!_stricmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));
        }
    }
    CloseHandle(hSnap);
    return procId;
}

const char* dllPath = "C:\\Windows\\System32\\sysproc.dll";
const char* procName = "Project1.exe";
DWORD procId = 0;

int main() //Entry point
{
    system("color b"); //Sets the color to blue

    Initialize("B2wVksYPzgCBOtNq8SFQ05GCuKrzwNIRytotMczYWCSv59sypLJhPEnLY9w8cmml"); //Connects to the authentication server

    if (FileExists("./Config.ini")) 
    {
        Key = ReadStringFromIni("./Config.ini", "License", "Key"); //Gets the key saved in the file 
    }
    else
    {
        std::cout << "Welcome, please enter your license key: ";
        std::cin >> Key; //Gets the user's key
        if (Authenticate(StringToChar(Key), (StringToChar(hwid)))) {}// Authenticates key & hwid
        else
        {
            std::cout << "Invalid Key!" << std::endl; 
            exit(2000);
        }
        WriteStringToIni(Key, "./Config.ini", "License", "Key"); //Creates a file that stores the key entered
    }

    if (Authenticate(StringToChar(Key), (StringToChar(hwid)))) // Authenticates key & hwid
    {
        std::cout << "Sucessfully Authenticated!" << std::endl; 
        Sleep(2000);
        while (!procId)
        {
            procId = GetProcId(procName);
            Sleep(30);
        }

        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, procId);

        if (hProc && hProc != INVALID_HANDLE_VALUE)
        {
            void* loc = VirtualAllocEx(hProc, 0, MAX_PATH, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

            WriteProcessMemory(hProc, loc, dllPath, strlen(dllPath) + 1, 0);

            HANDLE hThread = CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, loc, 0, 0);

            if (hThread)
            {
                CloseHandle(hThread);
            }
        }

        if (hProc)
        {
            CloseHandle(hProc);
        }
    }
    else
    {
        exit(0);
    }


    system("cls"); 
    std::cout << "Hardware ID: " << hwid << std::endl;
    
    std::cout << "_______________________________________________________" << std::endl;
    std::cout << " " << std::endl;

    std::thread auth([&]() //Authentication Thread that keep on checking the connection and user previleges
        {
            while (true)
            {
                std::cout << "Auth is checking..." << std::endl;
                if (!Authenticate(StringToChar(Key), (StringToChar(hwid)))) 
                {
                    exit(0);
                }
                std::cout << "Sucessfully Authenticated!" << std::endl;
                Sleep(60000); 
            }
        });

    std::cin.get();
}

0 个答案:

没有答案
相关问题