C ++ - AllocConsole崩溃+打印到控制台

时间:2016-06-14 12:54:41

标签: c++ windows memory-management dll-injection

好的,我有几个关于使用AllocConsole的问题,我找不到很多答案,我发现的一些解决方案与我的代码或其他东西不兼容,因为它们没有做我想让他们做的事情。

所以在我开始之前是我的代码:

#include "stdafx.h" // don't forget to include "Windows.h" inside stdafx.h
#include <iostream>

DWORD LocalPlayer_Offset = 0xA30504;
DWORD FlashDuration_Offset = 0xA2F8;
DWORD Jump_Offset = 0x4EE0D38;
DWORD Flag_Offset = 0x100;
DWORD BaseAddress = 0;
DWORD* Jump = nullptr;
DWORD* LocalPlayer = nullptr;

int flashActive = 1;
int bhopActive = 1;

using namespace std;

void Init()
{
    BaseAddress = reinterpret_cast< DWORD >(GetModuleHandle("client"));
    Jump = reinterpret_cast< DWORD* >(BaseAddress + Jump_Offset);
    LocalPlayer = reinterpret_cast< DWORD* >(BaseAddress + LocalPlayer_Offset);

    //These don't print to the console?
    AllocConsole();
    printf("injected");
    cout << "injected";
}
void InitStub() { return; }

DWORD WINAPI functions(LPVOID lpParam)
{
    while (1)
    {
        if (*LocalPlayer) // check for nullptr
        {
            if (bhopActive) {
                if (*reinterpret_cast<BYTE*>(*LocalPlayer + Flag_Offset) & 1 &&
                    GetAsyncKeyState(VK_SPACE) & (1 << 15)) 
                    *Jump = 6; 
            }
            if (flashActive) {
                if (*reinterpret_cast<float*>(*LocalPlayer +     FlashDuration_Offset) > 0.f)
                    *reinterpret_cast<float*>(*LocalPlayer + FlashDuration_Offset) = 0.f;
            }
        }
    }
}
void functionsStub() { return; }

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID     lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        Init();
        CreateThread(nullptr, 0, functions, nullptr, 0, nullptr);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
        return TRUE;
    case DLL_PROCESS_DETACH:
        return TRUE;
    }
    return TRUE;
}

这一切都很好,所以不要因为代码而激怒我,我对内部人员来说很新,我正在努力学习。

我的问题是在Init()函数中,printf和cout不会向AllocConsole()函数打印任何内容。它确实成功打开一个控制台,该过程使用该控制台,所以我知道它工作正常。为什么不打印到控制台,我可以在程序中使用其他功能的控制台。

此外,这个AllocConsole自行关闭时会崩溃应用程序,这是因为它不是免费的吗?我不确定如何成功使用FreeConsole,因为AllocConsole也没有按照我想要的方式工作。

0 个答案:

没有答案