PDA

Просмотр полной версии : [C++] Вытащить значение адресса из процесса


Solker
26.11.2008, 01:58
Все наверное знают программу ArtMoney.
Допустим мы из какой-нить простенькой игры хотим вытащить значение. Тот же сапер, находим адресс в процессе, которые несет в себе информацию по количеству мин оставшихся на поле. Ну не суть какой, например мы нашли его: 01005194 .
Теперь собственно вопрос, как написать простейшее приложение на Си, которое будет вытаскивать из этой программы, по данному адрессу его значение.

т.е запускаем, она находит процесс, выдирает значение у этого адресса и выдает нам:
Мин осталось: 55

Си знаю на уровне cout << "Hello, i'm noob";
Буду рад ссылкам на умные ресурсы.

Jes
26.11.2008, 02:16
WinApi + ReadProcessMemory ?

Solker
26.11.2008, 03:08
Спасибо, вот что получилось:

#include <iostream.h>
#include <windows.h>

int main()
{
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, 3564);
if(hProcess)
{
DWORD dwRead;
WORD dos_signature;
if(ReadProcessMemory(hProcess, (LPVOID)0x01005194, &dos_signature, sizeof(dos_signature), &dwRead))
{
cout << dos_signature;
}
}
}

И что значит (LPVOID)0x01005194 - (LPVOID). И как представтиь ее в виде отдельнйо переменной, а не пихать прямо в функцию, Пробывал void, const void, int, DWORD и прочее.. всегда ошибки возникают.

2) Я работаю в консоле, и заношу в цыкл, чтение из памяти программы. И хочу что бы он мне не писал постоянно новое значение, а просто заменял старое. Т.е.
щяс он мне выводит 2 2 2 2 2 3 3 3 3 3 4 4 4 4 44 5 5 5 5 5 5.
А хотелось бы, что бы на экране была всегда одна цыфра, которую он бы изменял.. Надеюсь правильно выразился.

0x0c0de
26.11.2008, 06:35
1)LPVOID == void *
2)
HANDLE hCons = GetStdHandle(STD_OUTPUT_HANDLE);
int i=0;
CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo;
while(true){
GetConsoleScreenBufferInfo(hCons,&ConsoleScreenBufferInfo);
printf("%X",i);
SetConsoleCursorPosition(hCons,ConsoleScreenBuffer Info.dwCursorPosition);
i++;
Sleep(100);
}