Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 29.11.2021
Сообщений: 2

WriteProcessMemory записывает ноль

17.12.2021, 22:28. Показов 2049. Ответов 1

Студворк — интернет-сервис помощи студентам
Решил написать чит который меняет уровень в игре BabyType. Получил адрес переменной которая отвечает за уровень с помощью программы CheatEngine далее вызывал функцию WriteProcessMemory, но по какой то причине она записала ноль хотя я передавал ей
C++
1
 float a = 5;
Код:
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
78
79
80
81
82
std::uint32_t Find_Prossec(std::wstring obj) {
    PROCESSENTRY32 peProcessEntry;
    HANDLE CONST hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (INVALID_HANDLE_VALUE == hSnapshot) {
        return 0;
    }
 
    peProcessEntry.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hSnapshot, &peProcessEntry);
    do {
        if (peProcessEntry.szExeFile == obj) {
            CloseHandle(hSnapshot);
            return  peProcessEntry.th32ProcessID;
        }
    } while (Process32Next(hSnapshot, &peProcessEntry));
 
    CloseHandle(hSnapshot);
    return 0;
}
 
std::int32_t Find_Module(std::wstring obj, std::int32_t ID) {
    HANDLE  ModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ID );
    if (INVALID_HANDLE_VALUE == ModuleSnap) {
        return 0;
    }
    MODULEENTRY32 me{ sizeof(me) };
    if ((Module32First(ModuleSnap, &me)) == FALSE){
        CloseHandle(ModuleSnap);
        return 0; 
    }
    do {
        if (me.szModule == obj) {
            CloseHandle(ModuleSnap);
            return  reinterpret_cast<std::uint32_t>(me.modBaseAddr); 
        }
    } while (Module32Next(ModuleSnap, &me));
 
    CloseHandle(ModuleSnap);
    return 0;
}
 
 
std::int32_t find_address(HANDLE hndl, std::uint32_t moduleAddress, const std::uint32_t offsets) {
    std::uint32_t prevAddress = moduleAddress;
    prevAddress += offsets;
 
    std::uint32_t readBuffer = 0;
    SIZE_T byteReadCount = 0;
    if (ReadProcessMemory(hndl, reinterpret_cast<void*>(prevAddress), &readBuffer, sizeof(readBuffer), NULL) == FALSE) {
        return 0;
    }
    //prevAddress = readBuffer; 
 
    
    return prevAddress; 
   
}
 
 
INT main() {
    HANDLE CONST hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    std::int32_t ID = Find_Prossec(L"BABYTYPE.EXE");
    HANDLE hamachiHAndle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ID);
    std::int32_t baseAddress = Find_Module(L"BABYTYPE.EXE", ID);
 
    std::uint32_t lvl = find_address(hamachiHAndle, baseAddress, 0x4AE04);
 
    float  a = 5; 
    while (true) 
    {
         if (WriteProcessMemory(hamachiHAndle, reinterpret_cast<void*>(lvl), &a, sizeof(a), NULL) != 0) {
            std::cout << "Succeful!" << std::endl;
        }
        else {
            std::cout << "Error!" << std::endl;
        }
        std::this_thread::sleep_for(std::chrono::seconds(3)); 
 
    }
    
    return 0; 
}
В чем моя ошибка?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.12.2021, 22:28
Ответы с готовыми решениями:

В память процесса WriteProcessMemory записывает только один байт
Есть код, с помощью которого можно писать в память процесса по адресу, но он пишет только первый байт, и то не понятно что. Помогите...

Напишите программу, которая создает файл, записывает в него три предложения и записывает их в обратном порядке
Напишите программу, которая создает файл, записывает в него три предложения и записывает их в обратном порядке в другой файл.

WriteProcessMemory
нужно изменит байты с чего начать помогите пожалуйста

1
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
18.12.2021, 01:51
Цитата Сообщение от Pozitiv4ik1 Посмотреть сообщение
В чем моя ошибка?
Например в том, что игра интерпретирует этот адрес как переменную иного (не float) типа данных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2021, 01:51
Помогаю со студенческими работами здесь

WriteProcessMemory
Не работает код ,всегда возращает False .Все права вроде получаю using System; using System.Collections.Generic; using System.Linq; ...

Построить ε-НКА, допускающий язык, состоящий из цепочек, имеющих ноль или несколько а, ноль или несколько b, ноль или несколько с.
Построить ε-НКА, допускающий язык, состоящий из цепочек, имеющих ноль или несколько а, ноль или несколько b, ноль или несколько с.

Сделать, чтобы при попытке деления на ноль, выводилось сообщение: «Деление на ноль»
Создайте консольное приложение. В нем реализуйте нахождение значения выражения 1/(x+n), где n – ваш вариант, а вместо х должно вводиться...

WriteProcessMemory - lpBuffer
BOOL WINAPI WriteProcessMemory( _In_ HANDLE hProcess, _In_ LPVOID lpBaseAddress, _In_ LPCVOID lpBuffer, _In_ SIZE_T ...

Если в матрице встречается ноль, то нужно обнулить столбец и строку, где находится этот ноль
Дан двумерный массив n на m. Если в массиве встречается ноль, то нужно обнулить столбец и строку ,где находится этот ноль.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru