2 / 2 / 1
Регистрация: 09.06.2015
Сообщений: 30
1

Запись значения в адрес с помощью WriteProcessMemory по смещениям

09.06.2015, 01:16. Показов 1467. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как записать значение в адрес через 5 смещений? На сколько я понимаю нужно 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
#include <iostream>
#include <windows.h>
#include <TlHelp32.h>
 
bool IsProcessRun(const char * const processName) //Проверка статуса процесса
{
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hSnapshot, &pe);
 
    while (1) 
    {
        if (strcmp(pe.szExeFile, processName) == 0) return true;
        if (!Process32Next(hSnapshot, &pe)) return false;
    }
}
 
 
int main()
{
    bool stat = IsProcessRun("Process.exe"); //Выводим статус
    if (stat == true)  std::cout << "Process is ready\n";
    else std::cout << "Process isn't run\n";
 
    DWORD p1;
    DWORD p2;
    DWORD p3;
    DWORD p4;
    DWORD p5;
    HWND hWnd;
    HANDLE hProcess;
    DWORD pID;
    int value = 99;
 
    hWnd = FindWindow (NULL, "Titile");                      //Запрашиваем все необходимое
    GetWindowThreadProcessId(hWnd, &pID);
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pID);
 
 
    ReadProcessMemory(hProcess, (LPCVOID) 0x10FFF9D8, &p1, sizeof(p1), NULL);   //Берем начальный адрес и прибавляем к нему казатели по очереди
    p1 = p1 + 0x2a8; // 1
    ReadProcessMemory(hProcess, (LPCVOID)p1, &p2, sizeof(p2), NULL);
    p2 = p2 + 0x320; // 2
    ReadProcessMemory(hProcess, (LPCVOID)p2, &p3, sizeof(p2), NULL);
    p3 = p3 + 0x4b8; // 3
    ReadProcessMemory(hProcess, (LPCVOID)p3, &p4, sizeof(p2), NULL);
    p4 = p4 + 0x448; // 4
    ReadProcessMemory(hProcess, (LPCVOID)p4, &p5, sizeof(p2), NULL);
    p5 = p5 + 0x3f0; // 5
    ReadProcessMemory(hProcess, (LPCVOID)p5, &value, 4, NULL);
    
    WriteProcessMemory(hProcess, (LPCVOID*)p5, &value, 4, NULL); //Пишем в память
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2015, 01:16
Ответы с готовыми решениями:

Запись значения в адрес
К примеру есть адрес 0х777 и его значение в формате int 1234567 , мне необходимо в этот адрес...

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей...

Разобрать длинную строку по смещениям
Добрый день. Есть самодельный файл с данными - данные идут блоками по 1024 байта с четко...

Как получить в программе адрес файла, при попытке открыть его с помощью функции "открыть с помощью"
Доброго времени суток. Второй день ищу ответ на вопрос: как получить в программе адрес файла,...

1
2 / 2 / 1
Регистрация: 09.06.2015
Сообщений: 30
10.06.2015, 00:26  [ТС] 2
Есть указатель, 5 смещений. Нужно каким-то образом обозначить вот эту строчку за адрес "Process.exe"+0021E69C, она вроде бы статическая,но почему-то всегда указывает на разные адреса. После этого надо прибавить по очереди 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
#include <iostream>
#include <windows.h>
#include <TlHelp32.h>
 
bool IsProcessRun(const char * const processName)                             //Статус процесса
{
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pe;
    pe.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hSnapshot, &pe);
    while (1) 
    {if (strcmp(pe.szExeFile, processName) == 0) return true;
    if (!Process32Next(hSnapshot, &pe)) return false;}
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    bool stat = IsProcessRun("Process.exe");
    if (stat == true)  std::cout << "Process is ready\n";
    else std::cout << "Process isn't run\n";                //Вывод статуса
    DWORD Offset1 = 0x2c4;                              //Смещения
    DWORD Offset2 = 0x2b0;
    DWORD Offset3 = 0x170;
    DWORD Offset4 = 0x5b0;
    DWORD Offset5 = 0x6f4;
    DWORD PAdress = 0x0CF95078;
    int value = 99;
    HWND hWnd;
    HANDLE hProcess;
    DWORD pID;
    
    hWnd = FindWindow(NULL, "Title");
 
    GetWindowThreadProcessId(hWnd, &pID);
 
    std::cout << "...   pID =" << pID << "\n";
    if (hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pID))
    {
        std::cout << "...    Открыли процесс\n";
    }
    else std::cout << "...   Не удалось открыть процесс\n";
 
    DWORD Adress = (PAdress += Offset1 += Offset2 += Offset3 += Offset4 += Offset5);
    
    ReadProcessMemory(hProcess, &PAdress, &Adress , sizeof(int), NULL);
    if (WriteProcessMemory(hProcess, &PAdress, &value, 4, 0))
    {
    std::cout << "...    Пишем в память\n";
    }
    else std::cout << "...   Запись в память не удалась\n";
    CloseHandle(hProcess);
    return 0;
}
0
10.06.2015, 00:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2015, 00:26
Помогаю со студенческими работами здесь

Как пропатчить по трем смещениям несколько файлов по нажатию кнопки?
В папке есть 55 файлов. Надо сделать, чтоб по нажатию кнопки, произошло умножение значений сразу в...

Составить программу с помощью которой можно добавить запись, удалить запись и распечатать дешевое издание.
program _file_LB7_Zeleniuk; type zurnal=record name:string; tiraz:integer; vartist:integer;...

Вернуть адрес виртуальной функции с помощью __asm вставки
Есть: class two{ public: }; class one{

Запись в указанный адрес
есть адрес памяти пример 0x5483 нужно записать в этот адрес число из переменной bool a на пример...

Замените все четные значения введённого с клавиатуры массива нулями и вывести скорректированные значения (с помощью указателей)
Дорогие форумчане! Помогите пожалуйста с заданием!:cry: Введите с...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru