Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменяем память сторонего приложения 
:(
    Опции темы
lips
Дата 6.11.2012, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



Прочитал пару статей... где с помощью ArtMoney и VisualC++ написали тренер для игры...
опираясь на эти записи написал код:
Код

    HWND pHandle;
    int a = 12345;//число которое будет записано
    DWORD address = 0x00AB0C62;     //адрес был найден в артмании
    pHandle=FindWindow(NULL,Edit1->Text.c_str());
    SetWindowText(pHandle,L"Окно Захвачено!!");   //проверка на всякий случай
    ReadProcessMemory(pHandle, (LPCVOID)address, &address, 8, 0);//правильно или нет? 
    WriteProcessMemory(pHandle, (LPVOID)address, (LPVOID)a, 8, NULL);//правильно или нет?

пытаюсь взломать пинбол(стандартн), но почему-то не работает...
пишу в рад студии
Уважаемые программисты гляньте на несколько строчек кода найдите ошибку!
PM MAIL ICQ   Вверх
Zhunko
Дата 6.11.2012, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



По моему, чтение неправильно. Почему-то приём в ту же переменную, что содержит адрес.
Возможно это правильно в смысле, что работать будет, но это неправильно так писать.
Да, ещё там, в первом параметре должен быть дескриптор процесса, а не окна.

Это сообщение отредактировал(а) Zhunko - 6.11.2012, 20:29
PM MAIL   Вверх
feodorv
Дата 6.11.2012, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 11
Всего: 45



Цитата(lips @  6.11.2012,  20:55 Найти цитируемый пост)
   ReadProcessMemory(pHandle, (LPCVOID)address, &address, 8, 0);//правильно или нет? 
    WriteProcessMemory(pHandle, (LPVOID)address, (LPVOID)a, 8, NULL);//правильно или нет?

8 байт - это нормально? У Вас sizeof(int) равна 8 байтам? Не четырём?

Добавлено через 1 минуту и 59 секунд
Цитата(Zhunko @  6.11.2012,  21:16 Найти цитируемый пост)
 Почему-то приём в ту же переменную, что содержит адрес.

Поддерживаю вопрос. 
Цитата(lips @  6.11.2012,  20:55 Найти цитируемый пост)
    int a = 12345;//число которое будет записано

Это значение будет затёрто при ReadProcessMemory. Зачем вообще читать, когда писать надо?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Zhunko
Дата 6.11.2012, 20:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Цитата(feodorv @  6.11.2012,  21:22 Найти цитируемый пост)
8 байт - это нормально? У Вас sizeof(int) равна 8 байтам? Не четырём?

Это тоже неправильно. Но не имеет значения здесь. При записи INT не испортит чужую память. Адрес-то правильный, наверно.  smile 

Получается, что сначала читает адрес. Модифицирует уже существующий. Пишет по новому адресу, что прочитан ранее.

Это сообщение отредактировал(а) Zhunko - 6.11.2012, 20:32
PM MAIL   Вверх
lips
Дата 6.11.2012, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



насчёт той же переменной я описался, а вот что там с хэндлом процесса? как его узнать?
а CreateProcess необязательно использовать? 
спасибо за ответы

Добавлено через 56 секунд
у меня артмания выдала что там 8 байт..
PM MAIL ICQ   Вверх
Zhunko
Дата 6.11.2012, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Цитата(lips @  6.11.2012,  21:59 Найти цитируемый пост)
насчёт той же переменной я описался, а вот что там с хэндлом процесса? как его узнать?а CreateProcess необязательно использовать? спасибо за ответы

У меня так сделано:
Код

    // 2.2.1. Метод возвращает системный дескриптор процесса по его идентификатору.
    //        Дескриптор может быть использован в любой функции, которая требует дескриптора процесса, в такой,
    //        как  функции ожидания (wait functions), предоставляя соответствующие права доступа, которые были затребованы.
    //        Когда Вы завершаете работать с дескриптором, убедитесь, что закрыли его, используя функцию CloseHandle().
    static HANDLE GetHandle(const DWORD dwProcessID) // ID процесса, для которого возвращается системный дескриптор.
     {
      HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwProcessID);
      if (hProcess == NULL) throw(_T("Ошибка в методе \"Utils::Process::GetHandle()\".\nСистемный дескриптор процесса не получен.") + LAST_ERROR);
      return(hProcess);
     }

static можно убрать.
PM MAIL   Вверх
lips
Дата 6.11.2012, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



Zhunko спасибо! сейчас буду пробовать
PM MAIL ICQ   Вверх
lips
Дата 6.11.2012, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



Получилось как то так:
но естественно не работает 
Код

    DWORD PID = 0;
    HWND HandleWindow = 0;
    HandleWindow = FindWindowA("Window", "123"); // находим окно
    GetWindowThreadProcessId(HandleWindow, &PID); // ищем ИД процесса которому принадлежит окно
    HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, TRUE, PID);
    //if (hProcess == NULL) throw(("Ошибка в методе \"Utils::Process::GetHandle()\".\nСистемный дескриптор процесса не получен."));
    WriteProcessMemory(hProcess, (LPVOID)0x00AB0C62, &i, 8, NULL);

Подскажите?

Это сообщение отредактировал(а) lips - 6.11.2012, 22:09
PM MAIL ICQ   Вверх
Zhunko
Дата 6.11.2012, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Прочитайте оттуда, что записали, и сравните. Возможно, что работает, но Ваши ожидания иные от той программы.

Это сообщение отредактировал(а) Zhunko - 6.11.2012, 22:36
PM MAIL   Вверх
lips
Дата 6.11.2012, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



Цитата(Zhunko @ 6.11.2012,  22:14)
Прочитайте оттуда, что записали и сравните. Возможно, что работает, но Ваши ожидания иные от той программы.

Код

    WriteProcessMemory(hProcess, (LPVOID)0x00AB0C62, &i, 4, NULL);
    ReadProcessMemory(hProcess, (LPCVOID)0x00AB0C62, &a, 4, 0);//
    Label1->Caption = a;

значение "a" не изменяются
PM MAIL ICQ   Вверх
Zhunko
Дата 6.11.2012, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Надо бы весь код посмотреть.
PM MAIL   Вверх
lips
Дата 6.11.2012, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



GetLastError(); возвращает 87 неверный параметр
хелп!

Добавлено через 1 минуту и 59 секунд
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
 #include <windows.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int a = 12345;
    int i = 800000;
    DWORD PID = 0;
    HWND HandleWindow = 0;
    HandleWindow = FindWindowA("Window", "Пинбол для Windows - \"Звездный юнга\""); // находим окно
    GetWindowThreadProcessId(HandleWindow, &PID); // ищем ИД процесса которому принадлежит окно
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    Label1->Caption = GetLastError();
    WriteProcessMemory(hProcess, (LPVOID)0x00AB0C62, &i, 4, NULL);
    ReadProcessMemory(hProcess, (LPCVOID)0x00AB0C62, &a, 4, 0);//
}
//---------------------------------------------------------------------------



ну это и так весь код ))

Добавлено через 7 минут и 55 секунд
вот что удалось выяснить:
после 
HandleWindow = FindWindowA("Window", "Пинбол для Windows - \"Звездный юнга\""); 
2: Общая ошибка
после 
GetWindowThreadProcessId(HandleWindow, &PID);
1400: Недопустимый дескриптор окна.
ну а дальше пошло поехало...
как исправить?
PM MAIL ICQ   Вверх
Zhunko
Дата 6.11.2012, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Вы, что-то про 8 байт говорили?
Может так попробывать:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    INT64 a = 12345;
    INT64 i = 800000;
    DWORD PID = 0;
    HWND HandleWindow = 0;
    ::SetLastError(0);
    HandleWindow = ::FindWindow(_T("Window"), _T("Пинбол для Windows - \"Звездный юнга\"")); // находим окно
    ::GetWindowThreadProcessId(HandleWindow, &PID); // ищем ИД процесса которому принадлежит окно
    HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    Label1->Caption = GetLastError();
    ::WriteProcessMemory(hProcess, (LPVOID)0x00AB0C62, &i, 8, NULL);
    ::ReadProcessMemory(hProcess, (LPCVOID)0x00AB0C62, &a, 8, 0);
}

Ещё поставте анализ ошибок после каждой функции. Надо привыкать сразу так писать с исключениями. Пример в моём методе. Так сразу ошибки проявляются.

Это сообщение отредактировал(а) Zhunko - 6.11.2012, 22:52
PM MAIL   Вверх
lips
Дата 6.11.2012, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.10.2012

Репутация: нет
Всего: нет



аа всё всё всё разобрался всем спасибо!! я тупанул вот так надо было писать 
Код

FindWindowA(NULL, "Пинбол для Windows - \"Звездный юнга\"");

вот код всё работает!! всем ещё раз спасибо!!
Код

    int i = 800000;
    DWORD PID = 0;
    HWND HandleWindow = 0;
    HandleWindow = FindWindowA(NULL, "Пинбол для Windows - \"Звездный юнга\""); // находим окно
    GetWindowThreadProcessId(HandleWindow, &PID); // ищем ИД процесса которому принадлежит окно
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    WriteProcessMemory(hProcess, (LPVOID)0x00AB0C62, &i, 4, NULL);


Добавлено через 1 минуту и 19 секунд
а и ему всёравно что 8 что 4... работает в любом случае =)
PM MAIL ICQ   Вверх
Zhunko
Дата 6.11.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 4.11.2009

Репутация: нет
Всего: нет



Цитата(lips @  6.11.2012,  23:39 Найти цитируемый пост)
вот что удалось выяснить:после HandleWindow = FindWindowA("Window", "Пинбол для Windows - \"Звездный юнга\""); 2: Общая ошибка

FindWindow()
Что Вы за параметры туда вставляете?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1366 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.