Крашит DLL, помогите.

otherwise

Участник
Автор темы
46
7
Видео: https://radikal.ru/video/iPnKJeFCG6D

Почему то не могу загружать его в месте с игрой как .asi, поэтому я использую инжектор(возможно, в этом проблема.

Код:

C++:
#include "pch.h"

float* position = (*(DWORD*)0xB6F5F0) ? (float*)(*(DWORD*)(*(DWORD*)0xB6F5F0 + 0x14) + 0x30) : NULL;



void teleportfunc(float x, float y, float z) {
    while(true) {
        if (GetAsyncKeyState(VK_END)) {
            float xsteps = x - position[0] / 20.0f;
            float xsteps_d = 0.0f;
            float ysteps = y - position[1] / 20.0f;
            float zsteps = z - position[2] / 20.0f;
            while (position[0] != x || position[0] > x&& position[1] != y || position[0] > y&& position[2] != z || position[2] > z)
            {
                if (GetAsyncKeyState(VK_INSERT)) {
                    break;
                }
                Sleep(50);
                x > position[0] ? position[0] += 0.7f : position[0] -= 0.7f;
                y > position[1] ? position[1] += 0.7f : position[1] -= 0.7f;
                z > position[2] ? position[2] += 3.0f : position[2] -= 3.0f;
            }
        }
    }
}


BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    {
        teleportfunc(1000.0f, 1000.0f, 1000.0f);
    }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 
Решение
C++:
void init()
{
    while (*(DWORD*)0xC8D4C0 != 9)
        Sleep(100);
    // ...
    return 0;
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)init, NULL, NULL, NULL);
    return TRUE;
}

#Rin

Известный
Всефорумный модератор
1,214
1,036
Ты сразу проводишь действия с игрой, которая на момент исполнения твоего кода, еще не инициализировалась.
И у тебя бесконечный цикл в точке входа в Dll, а такого делать нельзя.
 
  • Нравится
Реакции: otherwise

otherwise

Участник
Автор темы
46
7
Ты сразу проводишь действия с игрой, которая на момент исполнения твоего кода, еще не инициализировалась.
И у тебя бесконечный цикл в точке входа в Dll, а такого делать нельзя.
а как сделать правильно? Помоги пж
Ты сразу проводишь действия с игрой, которая на момент исполнения твоего кода, еще не инициализировалась.
И у тебя бесконечный цикл в точке входа в Dll, а такого делать нельзя.

так нормально?
C++:
#include "pch.h"

float* position = (*(DWORD*)0xB6F5F0) ? (float*)(*(DWORD*)(*(DWORD*)0xB6F5F0 + 0x14) + 0x30) : NULL;



void teleportfunc(float x, float y, float z) {
    while(true) {
        if (GetAsyncKeyState(VK_END)) {
            float xsteps = x - position[0] / 20.0f;
            float xsteps_d = 0.0f;
            float ysteps = y - position[1] / 20.0f;
            float zsteps = z - position[2] / 20.0f;
            while (position[0] != x || position[0] > x&& position[1] != y || position[0] > y&& position[2] != z || position[2] > z)
            {
                if (GetAsyncKeyState(VK_INSERT)) {
                    break;
                }
                Sleep(50);
                x > position[0] ? position[0] += 0.7f : position[0] -= 0.7f;
                y > position[1] ? position[1] += 0.7f : position[1] -= 0.7f;
                z > position[2] ? position[2] += 3.0f : position[2] -= 3.0f;
            }
        }
    }
}


BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    {
        Sleep(5000);
        if (GetAsyncKeyState(VK_DELETE)) {
            teleportfunc(1000.0f, 1000.0f, 1000.0f);
        }
    }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 
Последнее редактирование:

otherwise

Участник
Автор темы
46
7
В точке входа (DllMain) создай поток:
C++:
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)init, NULL, 0, 0);
Сверху сделай функцию:
C++:
void init() {
// еще бы чекнуть что игра инициализировалась
}
Спасибо! Не подскажешь как проверить, инициализировалась ли игра?
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
C++:
void init()
{
    while (*(DWORD*)0xC8D4C0 != 9)
        Sleep(100);
    // ...
    return 0;
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)init, NULL, NULL, NULL);
    return TRUE;
}
 

otherwise

Участник
Автор темы
46
7
C++:
void init()
{
    while (*(DWORD*)0xC8D4C0 != 9)
        Sleep(100);
    // ...
    return 0;
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)init, NULL, NULL, NULL);
    return TRUE;
}
Огромное спасибо! Не подскажешь откуда ты взял 0xC8D4C0? На двух сайтах с адресами посмотрел, там такого нет. Сам искал?
 

#Rin

Известный
Всефорумный модератор
1,214
1,036
Не подскажешь откуда ты взял 0xC8D4C0?
Давно известный адрес, хранит состояние GameState.

На двух сайтах с адресами посмотрел
В исходниках какие-то читов можно поискать, ну или просто вбей в поисковике этот адрес.
 

Dark_Knight

Me, me and me.
Друг
4,064
2,078
  • Нравится
Реакции: Rei и otherwise