Как создать ESP с нуля?(на stalcraft)

Начинающий
Статус
Оффлайн
Регистрация
10 Июн 2024
Сообщения
8
Реакции[?]
1
Поинты[?]
1K
че за бред? аномалии через drawArraysIntanced, это первое, а второе в drawElements игроки рисуются это факт

а нахуя тебе искать эту функцию? можешь просто найти сигу на jvm, я так делал:

C++:
auto main_vm = GetAbsoluteAddress< JavaVM* >( FindPattern( "jvm.dll", "48 8D 0D ?? ?? ?? ?? 45 33 C0 FF D0" ), 3 );
SCJniEnv* env = nullptr;
printf( "virtual machine: %p\n", main_vm );
main_vm->AttachCurrentThread( reinterpret_cast<void**>( &env ), nullptr );
printf( "env: %p\n", env );
jclass _main = env->FindClass( "exbo/stalcraft/client/Main" );
//std::cout << _main << "\n";
Байткод в первой строке это начало и конец сталкрафта? Или где его нашел, я просто в памяти сколько не рылся все время разное было
 
Начинающий
Статус
Оффлайн
Регистрация
10 Июн 2024
Сообщения
8
Реакции[?]
1
Поинты[?]
1K
че за бред? аномалии через drawArraysIntanced, это первое, а второе в drawElements игроки рисуются это факт

а нахуя тебе искать эту функцию? можешь просто найти сигу на jvm, я так делал:

C++:
auto main_vm = GetAbsoluteAddress< JavaVM* >( FindPattern( "jvm.dll", "48 8D 0D ?? ?? ?? ?? 45 33 C0 FF D0" ), 3 );
SCJniEnv* env = nullptr;
printf( "virtual machine: %p\n", main_vm );
main_vm->AttachCurrentThread( reinterpret_cast<void**>( &env ), nullptr );
printf( "env: %p\n", env );
jclass _main = env->FindClass( "exbo/stalcraft/client/Main" );
//std::cout << _main << "\n";
Кстати, файл с объявлением функций можно?
 
Начинающий
Статус
Оффлайн
Регистрация
10 Июн 2024
Сообщения
8
Реакции[?]
1
Поинты[?]
1K
Сурс Simple ESP тебе ничем не поможет от слова совсем. Хукать нужно DrawElements. Просто хукнуть его недостаточно, нужное ещё кое что сделать. А вообще, использовать хуки - прошлый век, нужно использовать классы.
Можно инфу по нахождению классов? Найти смог только дебаг при старте JVM, но со сталкрафтом такое не работает. Так же разбирал все jar файлы и некоторые dll, в jar классов не нашел, только классы лаунчера. А в dll там много всего, найти нужное будет сложновато
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
671
Реакции[?]
106
Поинты[?]
69K
Байткод в первой строке это начало и конец сталкрафта? Или где его нашел, я просто в памяти сколько не рылся все время разное было
какой еще байткод? не понимаю о чем ты. это паттерн на инструкцию в jvm, где юзается main_vm(я его получаю с инструкции просто)|

Кстати, файл с объявлением функций можно?
каких функций? джиниишки? там они у ск оффсеты на них каждый апдейт меняются, можешь себе просто паттерны как я сделать на их оффсеты от таблицы методов и все
 
Начинающий
Статус
Оффлайн
Регистрация
10 Июн 2024
Сообщения
8
Реакции[?]
1
Поинты[?]
1K
какой еще байткод? не понимаю о чем ты. это паттерн на инструкцию в jvm, где юзается main_vm(я его получаю с инструкции просто)|


каких функций? джиниишки? там они у ск оффсеты на них каждый апдейт меняются, можешь себе просто паттерны как я сделать на их оффсеты от таблицы методов и все
Объявление функций GetAbsoluteAddress и FindPattern
Ну и типы данных SCJniEnv* и jclass
Я просто поискал подобное, у них входные данные другие, хочется посмотреть как твое выглядит
 
Пользователь
Статус
Оффлайн
Регистрация
23 Авг 2021
Сообщения
521
Реакции[?]
53
Поинты[?]
20K
Объявление функций GetAbsoluteAddress и FindPattern
Ну и типы данных SCJniEnv* и jclass
Я просто поискал подобное, у них входные данные другие, хочется посмотреть как твое выглядит
чувак тебе не дадут код ctrl c + ctrl v, тут нужно думать самому, он тебе и так подсказал как это может быть реализовано
тебе нужно сделать систему поиска паттернов, SCJniEnv* это просто указатель на структуру JNIEnv, жкласс это структура для понимания, учи джаву
 
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2024
Сообщения
2
Реакции[?]
0
Поинты[?]
0
А надо обязательно dll файл делать для сталкрафта или заменять файлы? Сорри я новичок
 
Начинающий
Статус
Оффлайн
Регистрация
10 Июн 2024
Сообщения
8
Реакции[?]
1
Поинты[?]
1K
А надо обязательно dll файл делать для сталкрафта или заменять файлы? Сорри я новичок
Замену файлов не пробовал, но думаю либо в игру не пустит либо забанит быстро. Подсветка артефактов раньше была заменой файлов, банило быстро
 
Пользователь
Статус
Оффлайн
Регистрация
26 Авг 2023
Сообщения
365
Реакции[?]
30
Поинты[?]
29K
Замену файлов не пробовал, но думаю либо в игру не пустит либо забанит быстро. Подсветка артефактов раньше была заменой файлов, банило быстро
можешь попробовать external сделать, просто рисовать вх поверх игры, как в кс сделано.
 
Начинающий
Статус
Оффлайн
Регистрация
3 Апр 2021
Сообщения
114
Реакции[?]
15
Поинты[?]
1K
Сурс Simple ESP тебе ничем не поможет от слова совсем. Хукать нужно DrawElements. Просто хукнуть его недостаточно, нужное ещё кое что сделать. А вообще, использовать хуки - прошлый век, нужно использовать классы.
А что еще сделать после хука?
 
Новичок
Статус
Оффлайн
Регистрация
19 Июн 2024
Сообщения
1
Реакции[?]
0
Поинты[?]
0
пробовал сделать чамсы в итоге не рисует картинку ниже код, кто знает в чем ошибка?

Код:
#include <Windows.h>
#include <string>
#include <iostream>
#include "GL/glew.h"
#include "options.h"
#pragma comment(lib, "glew32s.lib")
#include "hooks.h"
#include <GL/gl.h>
#pragma comment(lib, "OpenGL32.lib")

void WINAPI Hooks::hk_glDrawArrays(GLenum mode, GLint first, GLsizei count) {

    static bool toggleSee2 = false;
    static bool keyDown = false;

    GLenum currMode = mode;

    if (GetAsyncKeyState(menu::bToggleInsightOne) & 0x8000) {
        if (!keyDown) {
            toggleSee2 = !toggleSee2;
            keyDown = true;
        }
    }
    else {
        keyDown = false;
    }

    if (toggleSee2 && menu::bInsightOne) {
        mode = GL_POINTS;
    }

    fn_glDrawArrays(mode, first, count);

    if (toggleSee2 && menu::bInsightOne) {
        mode = currMode;
    }
}

unsigned char color[4] = { options::chamsColor.x, options::chamsColor.y, options::chamsColor.z, options::chamsColor.w};

void WINAPI Hooks::hk_glDrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices) {

    static bool glewInitialized = false;

    if (!glewInitialized) {
        if (glewInit() != GLEW_OK) {
            MessageBoxA(NULL, "Íå óäàëîñü èíèöèàëèçèðîâàòü GLEW", "Îøèáêà", MB_ICONERROR);
        }
        glewInitialized = true;
    }

    static bool toggleChams = false;
    static bool keyDown = false;

    if (GetAsyncKeyState(menu::bToggleChams) & 0x8000) {
        if (!keyDown) {
            toggleChams = !toggleChams;
            keyDown = true;
        }
    }
    else {
        keyDown = false;
    }

    GLint currentTexture;
    glGetIntegerv(GL_TEXTURE_BINDING_2D, &currentTexture);

    bool isReady = count > 5000 && count < 300000 && mode == 4;
    bool canRet = false;

    GLint currentProgram;
    glGetIntegerv(GL_CURRENT_PROGRAM, &currentProgram);

    GLfloat emissionColor[4];

    if (toggleChams && menu::bChamsEnabled) {
        if (isReady) {
            GLint location = glGetUniformLocation(currentProgram, "isAnimated");
            GLint isAnimated;

            if (location == -1) {
                goto THE_END;
            }
            else {
                glGetUniformiv(currentProgram, location, &isAnimated);
            }

            if (isAnimated != 1) goto THE_END;

            location = glGetUniformLocation(currentProgram, "emissionColor");

            if (location == -1) {
                goto THE_END;
            }
            else {
                glGetUniformfv(currentProgram, location, emissionColor);
                glUniform3f(location, options::chamsColor.x, options::chamsColor.y, options::chamsColor.z);
            }

            GLint numTextures;
            glGetProgramiv(currentProgram, GL_ACTIVE_UNIFORMS, &numTextures);

            canRet = true;

            static GLuint textureGreen = 0;

            if (textureGreen == 0) {
                glGenTextures(1, &textureGreen);
            }

            for (GLint i = 0; i < numTextures; ++i) {
                location = glGetUniformLocation(currentProgram, ("usedTextures[" + std::to_string(i) + "]").c_str());

                if (location != -1) {
                    GLint sampler;
                    glGetUniformiv(currentProgram, location, &sampler);

                    glActiveTexture(GL_TEXTURE0 + sampler);
                    glBindTexture(GL_TEXTURE_2D, textureGreen);

                    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, color);

                    glDepthRange(0.0, 0.1);
                }
            }
        }
    }

THE_END:

    fn_glDrawElements(mode, count, type, indices);

    if (toggleChams && menu::bChamsEnabled) {
        if (isReady && canRet) {
            glDepthRange(0.0, 1.0);
            GLint location = glGetUniformLocation(currentProgram, "emissionColor");
            glUniform3f(location, emissionColor[0], emissionColor[1], emissionColor[2]);
            glBindTexture(GL_TEXTURE_2D, currentTexture);
        }
    }
}

BOOL WINAPI Hooks::hk_SwapBuffers(HDC hDC) {

    glPopAttrib();
    glDepthFunc(GL_LEQUAL);

    static bool toggleSee = false;
    static bool keyDown = false;

    if (GetAsyncKeyState(menu::bToggleInsightTwo) & 0x8000) {
        if (!keyDown) {
            toggleSee = !toggleSee;
            keyDown = true;
        }
    }
    else {
        keyDown = false;
    }

    if (toggleSee && menu::bInsightTwo) {
        glDepthFunc(GL_ALWAYS);
    }

    glPushAttrib(GL_DEPTH);
    return fn_SwapBuffers(hDC);
}
 
Сверху Снизу