Не появляется сообщение в консоли после инжекта

194
12 июля 2018, 01:20

Решил научиться писать DLL, просто ради интереса посмотреть, что из этого получится. Нашёл несколько видео по этой теме и, начал пытаться разбираться в том, что собственно пишет данный человек, спустя 3 просмотра данного видеоролика я преступил к коду, но писал его не на игре, которая светилась в видео (Просто потому что я не люблю повторять всё 1 в 1). В результате вышло следующее: Hack.cpp

#include <Windows.h>
#include <iostream>
#include "ExMachina.h"
#include <io.h>
#include <stdio.h>
#include <fcntl.h>

Создание потока.

DWORD WINAPI ExMachina_Thread(LPVOID lpReserved);

Внедрение.

DWORD APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        CreateThread(NULL, NULL, ExMachina_Thread, NULL, NULL, NULL);
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return true;
};

Дальше метод вызова консоли.

void CreateConsole() {
    int hConHandle = 0;
    HANDLE lStdHandle = 0;
    FILE *fp = 0;
    AllocConsole();
    SetConsoleTitle("ExMachina Debug");
    lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(PtrToUlong(lStdHandle), _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stdout = *fp;
    setvbuf(stdout, NULL, _IONBF, 0);
}

Ну и соответственно сам поток и его функции:

DWORD WINAPI ExMachina_Thread(LPVOID lpReserved) {
    CreateConsole();
    DWORD Address = (DWORD)GetModuleHandle("hta.exe") + 0x6135E4;
    ExMachina* EXMACHINA = ExMachina::Singleton(Address, 0x118);
    for (;;Sleep(75)) {
        printf("Succesfly inject 0x%x", EXMACHINA);
        std::cout << "Succesfly inject 0x%X", EXMACHINA;
    }
}

Как можно увидеть из подключенных библиотек есть и stdio.h и iostream, но ни то, ни другое информацию, которая мне нужна, не выводит. Что можно с этим сделать?

READ ALSO
Синхронизация двух потоков

Синхронизация двух потоков

Здравствуйте возник вопрос в синхронизации отдельной части приложения, вот пример:

202
Бинарная запись. С++

Бинарная запись. С++

Объясните, пожалуйста, как производится запись? Есть файл с такими строками:

214
Очередь(Добавление элементов)

Очередь(Добавление элементов)

Нужно создать функцию, добавление элементов в очередь, выводится ошибка:"Выражение должно быть допустимым для изменение левосторонним значением"...

371