Форум программистов, компьютерный форум CyberForum.ru

С++ Изменение значения в адресе ХЕлП (DLL) - C++

Восстановить пароль Регистрация
 
ThePanix
0 / 0 / 0
Регистрация: 20.06.2014
Сообщений: 52
20.06.2014, 02:01     С++ Изменение значения в адресе ХЕлП (DLL) #1
Длл инжекторная если посмотрите под спойлером.
Проблема в след. надо изменить значение по конкретному адресу на конкретное число типо как типо как в Cheat Engine меняется коллво денег или жизней на другое.
Так вот как это реализовать в C++ и желательно нажатием кнопки.
Если не поняли спрашивайте уточню.
Вот что пытался всунуть но хз что наверное не так делаю или вообще не подходит этот вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
const int Offset = 0x1; //смещение
const int PAdress = 0x012DFC; //адрес указателя на адрес переменной, которая нам нужна
int Adress; //переменная для адреса, нужной нам переменной
int Data; //переменная которая нам нужна
ReadProcessMemory(ProcessHandle,&PAdress, &Adress, sizeof(int), &ReadBytes); //читаем из указателя адресс переменной, которая нам нужна, и записываем в Adress
Adress += Offset;// добавляем к адресу смещение
ReadProcessMemory(ProcessHandle,&Adress, &Data, sizeof(int), &ReadBytes) // Читаем значение переменной, которая нам нужна.
 
Data += 10000; //Прибавляем к нужной переменной 10000
 
WriteProcessMemory(ProcessHandle, (void*)Adress, &Data, sizeof(int), NULL); //и переписываем
Вот весь код DLL-ки
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <Windows.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
#include <WinBase.h>
 
HANDLE phandle = GetCurrentProcess();
 
void CreateConsole()
{
    int hConHandle = 0;
    HANDLE lStdHandle = 0;
    FILE *fp = 0;
    AllocConsole();
    SetConsoleTitle(L"ThePanix");
    lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    hConHandle = _open_osfhandle(PtrToUlong(lStdHandle), _O_TEXT);
    fp = _fdopen(hConHandle, "w");
    *stdout = *fp;
    setvbuf(stdout, NULL, _IONBF, 0);
}
 
void Status()
{
    CreateConsole();
    printf("This ko-ko-ko is made specifically for ko-ko-ko");
    for (;; Sleep(100))
    {
        DWORD Players = (DWORD)GetModuleHandleA("engine.dll")+ 0x00611CB8;
        DWORD Players_1 = *(DWORD*)(Players); 
        DWORD Players_2 = *(DWORD*)(Players_1 + 0x54); 
        DWORD Players_3 = *(DWORD*)(Players_2 + 0x2C0); 
        DWORD Players_Adress = Players_3 + 0x1e4;    
 
 
        DWORD InGameA=(DWORD)GetModuleHandleA("engine.dll") + 0x3B93BC; 
        int InGame = *(int*)(InGameA);
 
        if(InGame == 1)
        {
            DWORD PlayerCountA=(DWORD)GetModuleHandleA("server.dll") + 0x509DD0; 
            int PlayerCount = *(int*)(PlayerCountA);
            if(GetAsyncKeyState(VK_NUMPAD1)){printf("PlayerCount = [%d] \n",PlayerCount);}
        
 
            for (int i =0; i<PlayerCount; i++)// Тут мы делаем перебор на 64 игрока ( от 0 до 64 ) 
                { 
                    int Team = *(int*)(Players_Adress+i*0x140+0x20);//Команды игроков 
                    char *name = (char*)(Players_Adress+i*0x140+0x0);//Имена игроков 
                    int HP = *(int*)(Players_Adress+i*0x140+0x24);//Здоровье игроков 
                    if(GetAsyncKeyState(VK_NUMPAD2)){printf("   NAME = [%s] HP = [%d] TEAM = %d \n",name,HP,Team);}
 
                    float *POSITION_X = (float*)(Players_Adress + i * 0x140 + 0x28);//Позиция игроков X 
                    float *POSITION_Y = (float*)(Players_Adress + i * 0x140 + 0x2C);//Позиция игроков Y     
                    float *POSITION_Z= (float*)(Players_Adress + i * 0x140 + 0x30);//Позиция игроков Z 
                    /*
                    if (GetAsyncKeyState(VK_NUMPAD3)){ printf(" POSITION_X = %d\n   POSITION_Y = %d\n POSITION_Z = %d\n \n", POSITION_X, POSITION_Y, POSITION_Z); }
                    */ //пока не реализованно флоат значение не пишется нету указателей
                }
        }
            
    }
}
 
DWORD APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Status,NULL,NULL,NULL);
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return true;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2014, 02:01     С++ Изменение значения в адресе ХЕлП (DLL)
Посмотрите здесь:

C++ Изменение значения статической переменной
C++ Изменение значения переменной во время исполнения
C++ Создайте класс, который содержит информацию об имени и адресе
изменение значения символа в строке C++
C++ Остановить процесс загрузки файла в память на конкретном адресе
Проверка на число которое находится в определленом адресе C++
C++ Изменение значения указателя
Изменение цвета точки в зависимости от значения температуры C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 18:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru