Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];

Вниз

Как узнать значения в чужих приложениях?   Найти похожие ветки 

 
Danco ©   (2010-01-29 02:39) [0]

Доброго времени суток мастера :)

Подскажите как узнать значения в чужом приложении, точнее 3D игре, а если еще точнее, то в PerfectWorld?

Если, кто юзал игру, то поймет о чем идет речь. В общем нужны координаты персонажа x и y. Гуглил и нашел только подобный код, но не на делфи а на Autoit:


#include <NomadMemory.au3>
$PID = ProcessExists("elementclient.exe")
$Handle = _MemoryOpen($PID)
$x = _MemoryRead(0x009771BC,$Handle)
$x = _MemoryRead($x+0x20,$Handle)
$x= _MemoryRead($x+0x3C,$Handle)
MsgBox(0,"Test X","your x: " & $x &"." )


Полностью в этом вопросе признаюсь нуб, но может мне кто-нибудь подскажет, как это реализовать на Delphi?
Или дать ссылки на изучения матерьяла :)


 
Leonid Troyanovsky ©   (2010-01-29 09:32) [1]


> Danco ©   (29.01.10 02:39)  

> Или дать ссылки на изучения матерьяла :)

http://msdn.microsoft.com/en-us/library/ms679303(VS.85).aspx
ReadProcessMemory function.

--
Regards, LVT.


 
Danco ©   (2010-01-29 22:47) [2]

Спасибо Leonid Troyanovsky

Немного понял, но совсем немного :)


function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
   ipBase: Pointer;
   IpBuf : longint;
   numberRead: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
ipBase:=ptr($009771BC);
ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead);
CloseHandle(HandleWindow);
end;


Нашел подобную функцию, но что-то не понимаю как ей пользоваться.
MainReadByteIZFile(?,?);
Что именно сюда вписывать? Что такое MainAddress и IDAgent? :/


 
Danco ©   (2010-01-29 23:07) [3]

Немного еще доперло до моих мозгов )

ID процесса можно найти таким методом:


function FindProcess(name: string): Cardinal;
var
 hSnapshot: THandle;
 lppe: TProcessEntry32;
begin
 Result := 0;
 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if hSnapshot = 0 then
   exit;
 lppe.dwSize := SizeOf(TProcessEntry32);
 if Process32First(hSnapshot,lppe) then
   repeat
     if name = ExtractFileName(lppe.szExeFile) then
     begin
       Result := lppe.th32ProcessID;
       break;
     end;
   until not Process32Next(hSnapshot,lppe);
 CloseHandle(hSnapshot);
end;


Но поэксперементировал на своем проекте и выводит пустую строку (память $021D44CC беру через артмани)


function FindProcess(name: string): Cardinal;
var
 hSnapshot: THandle;
 lppe: TProcessEntry32;
begin
 Result := 0;
 hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 if hSnapshot = 0 then
   exit;
 lppe.dwSize := SizeOf(TProcessEntry32);
 if Process32First(hSnapshot,lppe) then
   repeat
     if name = ExtractFileName(lppe.szExeFile) then
     begin
       Result := lppe.th32ProcessID;
       break;
     end;
   until not Process32Next(hSnapshot,lppe);
 CloseHandle(hSnapshot);
end;

function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
   ipBase: Pointer;
   IpBuf : longint;
   numberRead: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
ipBase:=ptr($021D44CC);
ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead);
CloseHandle(HandleWindow);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption:=MainReadByteIZFile(0,FindProcess("Project2.exe"));
end;


Что тут подправить? :(


 
Leonid Troyanovsky ©   (2010-01-30 13:48) [4]


> Danco ©   (29.01.10 23:07) [3]

> Что тут подправить? :(

Во-первых, положено:
Win32Check(HandleWindow <> 0);
Win32Check(ReadProcessMemory());

Во-вторых, MainReadByteIZFile возвращает пустую строку,
а должна была, хотя бы, Result := IntToStr(ipBuf).

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2010-01-30 13:57) [5]


> Danco ©   (29.01.10 23:07) [3]

> Что тут подправить? :(

Во-первых, положено:
Win32Check(HandleWindow <> 0);
Win32Check(ReadProcessMemory());

Во-вторых, MainReadByteIZFile возвращает пустую строку,
а должна была, хотя бы, Result := IntToStr(ipBuf).

--
Regards, LVT.


 
Danco ©   (2010-01-31 15:49) [6]

function FindProcess(name: string): Cardinal;
var
hSnapshot: THandle;
lppe: TProcessEntry32;
begin
Result := 0;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hSnapshot = 0 then
  exit;
lppe.dwSize := SizeOf(TProcessEntry32);
if Process32First(hSnapshot,lppe) then
  repeat
    if name = ExtractFileName(lppe.szExeFile) then
    begin
      Result := lppe.th32ProcessID;
      break;
    end;
  until not Process32Next(hSnapshot,lppe);
CloseHandle(hSnapshot);
end;

function MainReadByteIZFile(MainAddress, IDAgent:Cardinal):String;
var HandleWindow : cardinal;
  ipBase: Pointer;
  IpBuf : longint;
  numberRead: DWORD;
begin
HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
if Win32Check(HandleWindow <> 0) then
begin
 ipBase:=ptr($00000000);
 Win32Check(ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead));
 CloseHandle(HandleWindow);
 Result := IntToStr(ipBuf);
end else
 Result := IntToStr(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption:=MainReadByteIZFile($02253644,FindProcess("Edittitle.exe"));
end;


Теперь выдает ошибку:
Peoject Projec1.exe raised exception class EOSError with message "SystemError. Code:87. Параметр задан не верно". Process stopped. Use Sep or Run to contine.

Какой парамтр не верно? Или я фигню какуюто написал а не код? О_о


 
Leonid Troyanovsky ©   (2010-02-01 11:49) [7]


> Danco ©   (31.01.10 15:49) [6]

ReadProcessMemory(HandleWindow, MainAddress

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
11-1215270055
<>
2008-07-05 19:00
2010.04.04
Почему не работает KEY_PREVIEW?


2-1264843822
Vallos
2010-01-30 12:30
2010.04.04
Определение покрытия рабочего стола


15-1263485249
имя
2010-01-14 19:07
2010.04.04
Юридическая констатация всем давно известного факта


15-1263494897
fford
2010-01-14 21:48
2010.04.04
firebird виснет под Linux


2-1265185615
oleg1963lora
2010-02-03 11:26
2010.04.04
Поймать OnClick в классе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский