Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Delphi

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 26.10.2011, 17:57   #1
Заблокирован
 Рыцарь-капитан
Аватар для semoder
 
semoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе цену
Регистрация: 02.05.2009
Сообщений: 525
Популярность: 4586
Золото Zhyk.Ru: 20
Сказал(а) спасибо: 37
Поблагодарили 767 раз(а) в 220 сообщениях
 
По умолчанию Delphi

2 день изучения делфи, и я уже туплю...
Суть, по нажатию кнопки считать байты хп, мп и т.д.
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
base_addr=$00B27A04;
BStruct=$34;
offLvL=$0488;
offHP=$0490;
offMP=$0494;
offMaxHP=$04C8;
offMaxMP=$04CC;
var
WndHndl:THandle;
ipbuf,PID,hProcess,BytesCount:dword;
LvL,HP,MP,MaxHP,MaxMP:dword;
begin
  WndHndl:=findwindow('ElementClient Window',nil);
  GetWindowThreadProcessId(WndHndl, @PID);
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
  if hProcess <> 0 then
    try
    begin
      ReadProcessMemory(hProcess, ptr(base_addr), @ipbuf, sizeof(ipbuf), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+$1C), @ipbuf, sizeof(ipbuf), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+BStruct), @ipbuf, sizeof(ipbuf), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+offLvL), @LvL, sizeof(LvL), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+offHP), @HP, sizeof(HP), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+offMP), @MP, sizeof(MP), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+offMaxHP), @MaxHP, sizeof(MaxHP), BytesCount);
      ReadProcessMemory(hProcess, ptr(ipbuf+offMaxMP), @MaxMP, sizeof(MaxMP), BytesCount);
    end;
    finally
      closehandle(hProcess);
end;
end;
При компиляции, все операции чтения с процесса вызывают ошибку
Код:
 [DCC Error] nechto.pas(59): E2033 Types of actual and formal var parameters must be identical
Где ошибка??
P.S. использую Rad Stufio XE2

Последний раз редактировалось semoder; 26.10.2011 в 18:27.
  Ответить с цитированием
Пользователь сказал cпасибо:
VortexWhy (29.01.2012)
Старый 26.10.2011, 18:50   #2
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 111
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Delphi

Если бы ты еще указал какую строкуу подсвечивает - цены бы тебе не было (справка это будет 59 строка листинга)
________________
Ни одно доброе дело не остается безнаказанным.

Программы:
PW:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
JD:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
Статьи:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).


Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  Ответить с цитированием
Старый 26.10.2011, 18:57   #3
Заблокирован
 Рыцарь-капитан
Аватар для semoder
 
semoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе цену
Регистрация: 02.05.2009
Сообщений: 525
Популярность: 4586
Золото Zhyk.Ru: 20
Сказал(а) спасибо: 37
Поблагодарили 767 раз(а) в 220 сообщениях
 
По умолчанию Re: Delphi

В каждой строке где идёт чтение с памяти,
[DCC Error] nechto.pas(59): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(60): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(61): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(62): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(63): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(64): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(65): E2033 Types of actual and formal var parameters must be identical
[DCC Error] nechto.pas(66): E2033 Types of actual and formal var parameters must be identical

Добавлено через 24 минуты
Темку можно закрыть/удалить, скачал 7 Delphi и ошибки ушли....

Последний раз редактировалось semoder; 26.10.2011 в 19:21. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 26.10.2011, 22:16   #4
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 111
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Delphi

Зачем же удалять. Вообще у меня такое подозрение что в XE последний параметр функции чтения из памяти должен быть не DWord.
________________
Ни одно доброе дело не остается безнаказанным.

Программы:
PW:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
JD:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
.
Статьи:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
,
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).


Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
  Ответить с цитированием
Старый 26.10.2011, 23:11   #5
 Пехотинец
Аватар для DAcorp
 
DAcorp на правильном пути
Регистрация: 27.02.2010
Сообщений: 72
Популярность: 71
Сказал(а) спасибо: 27
Поблагодарили 35 раз(а) в 16 сообщениях
Отправить сообщение для DAcorp с помощью ICQ
 
По умолчанию Re: Delphi

Код:
const
  BASEADRESS=$B27A04;
  GASTEP=$1C;
  CHARENTRY=$34;
  CUR_HP=$490;
  MAX_HP=$4D0;

...
Procedure GetHPMP;
var
 HP_Cur, HP_Max, CharBuf: integer;
 wr, PId, Handle: cardinal;
 MyCharName, CharName, MyGuildName, GuildName: String;
begin
 Handle:=FindWindow(nil,pChar(cbWindowName.Text)); //кто как ищет :)
 if Handle<>0 then begin
  GetWindowThreadProcessId(Handle, @PId);
  process:=OpenProcess(PROCESS_ALL_ACCESS, false, PId);
  if (process<>0) then begin
   readprocessmemory(process, ptr(BASEADRESS), @CharBuf, sizeof(CharBuf), wr);
   readprocessmemory(process, ptr(CharBuf+GASTEP), @CharBuf, sizeof(CharBuf), wr);
   readprocessmemory(process, ptr(CharBuf+CHARENTRY), @CharBuf, sizeof(CharBuf), wr);
   readprocessmemory(process, ptr(CharBuf+CUR_HP), @HP_Cur, sizeof(HP_Cur), wr);
   readprocessmemory(process, ptr(CharBuf+MAX_HP), @HP_Max, sizeof(HP_Max), wr);
   CloseHandle(process);
 end;
end;
  Ответить с цитированием
Пользователь сказал cпасибо:
semoder (27.10.2011)
Старый 30.10.2011, 23:32   #6
 Разведчик
Аватар для yeyebvz
 
yeyebvz никому не известный тип
Регистрация: 04.09.2010
Сообщений: 20
Популярность: 10
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Delphi

Ребят, объясните плиз - один пишет
Цитата:
Сообщение от semoderПосмотреть сообщение
base_addr=$00B27A04;
BStruct=$34;
offHP=$0490;

тогда как ниже в другом примере

Цитата:
Сообщение от DAcorpПосмотреть сообщение
const BASEADRESS=$B27A04; GASTEP=$1C; CHARENTRY=$34; CUR_HP=$490;

как трактовать эти нолики впереди. И еще одно, как не менял параметры, а код
Цитата:
Сообщение от DAcorpПосмотреть сообщение
readprocessmemory(process, ptr(CharBuf+CUR_HP), @HP_Cur, sizeof(HP_Cur), wr);

выдаёт 4. что для макс_хп что для просто_хп. значение я так понял из wr нужно брать?
  Ответить с цитированием
Старый 31.10.2011, 00:44   #7
 Разведчик
Аватар для HellD
 
HellD на правильном путиHellD на правильном пути
Регистрация: 07.02.2011
Сообщений: 38
Популярность: 143
Сказал(а) спасибо: 5
Поблагодарили 20 раз(а) в 11 сообщениях
Отправить сообщение для HellD с помощью ICQ
 
По умолчанию Re: Delphi

wr это количество байт... вот и получает у тебя всегда 4...
а считывать значение надо из HP_Cur

а на нолики не обращай внимания... можешь с ними, можешь без... по факту разницы нет )
  Ответить с цитированием
Старый 31.10.2011, 01:49   #8
 Разведчик
Аватар для yeyebvz
 
yeyebvz никому не известный тип
Регистрация: 04.09.2010
Сообщений: 20
Популярность: 10
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Delphi

Спасибо, была такая мысль, но пока она появилась - офсеты уже были "исправлены" и в переменных был очередной мусор))
В принципе, теперь понятно как читать, и что значит чтение по цепочке. Мучают еще 2 вопроса:

1. Обязательно ли делать CloseHandle(process); после чтения каждого значение, или достаточно закрывать (указатель, или как оно правильно) - только в конце полного цикла чтения / самой программы ?

2. возможен ли перебор всех окон игр кроме как через - GetNextWindow(Wd,GW_HWNDNEXT) ? )
  Ответить с цитированием
Старый 02.11.2011, 15:03   #9
 Разведчик
Аватар для Moder Death
 
Moder Death на правильном пути
Регистрация: 15.06.2010
Сообщений: 48
Популярность: 20
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
 
По умолчанию Re: Delphi

может кто-нибудь привести пример кода

враги: 0
клан: 0
альянс: 0
всего: 0

врагов - вписать ид варкланов не в отдельный файл, а прям тут же. ид варклана естесственно сам поищу.
клан - сколько соклан в радиусе радара
союзников - тоже самое что и с врагами
всего - общее количество персонажей в пределе радара. не врагов и союзников.. а вообще всех кто лазит в пределе радара
  Ответить с цитированием
Старый 16.11.2011, 20:01   #10
Заблокирован
 Рыцарь-капитан
Аватар для semoder
 
semoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе цену
Регистрация: 02.05.2009
Сообщений: 525
Популярность: 4586
Золото Zhyk.Ru: 20
Сказал(а) спасибо: 37
Поблагодарили 767 раз(а) в 220 сообщениях
 
По умолчанию Re: Delphi

Помогите с инжектом ходьбы, вроде адреса правильные, на процедуру Walk идут правильные значения, [Ссылки могут видеть только зарегистрированные пользователи. ]

HP,MP, и прочее с игры читаются, но инжект ходьбы ни в какую(крэш клиента), в чём может быть проблема?

Код:
.......
PParams = ^TParams;
  TParams = packed record
    Param1:DWord;
    x,y,z:single;
end;
.......
hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PrID);
......
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer; aParamsSize: DWord);
  var
    hThread: THandle;
    lpNumberOfBytes: DWord;
    ThreadAddr, ParamAddr: Pointer;
  begin
    if ProcessID <> 0 then
    begin
      // ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
      ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
      WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

      // ---- Также запишем параметры к ней
      ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
      WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

      // ---- Создаем поток, в котором все это будет выполняться.
      hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);

      // ---- Ожидаем завершения функции
      WaitForSingleObject(hThread, INFINITE);

      // ---- подчищаем за собой
      CloseHandle(hThread);
      VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
      VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
    end
  end;


procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
    x,y,z:single;
    flying:DWORD;
begin
CallAddress1:=Pointer($0046E410);
CallAddress2:=Pointer($004728E0);
CallAddress3:=Pointer($0046E880);
x:=aPParams^.x;
y:=aPParams^.y;
z:=aPParams^.z;
flying:=aPParams^.Param1;
 asm
  pushad
  mov eax, dword ptr [game_add]
  mov esi, dword ptr [eax+$34]
  mov ecx, dword ptr [esi+$1050]
  push 1
  call CallAddress1
  mov edi, eax
  lea eax, dword ptr [esp+$18]
  push eax
  push flying
  mov ecx, edi
  call CallAddress2
  mov ecx, dword ptr [esi+$1050]
  push 0
  push 1
  push edi
  push 1
  call CallAddress3
  mov eax, dword ptr [game_add]
  mov eax, dword ptr [eax+$34]
  mov eax, dword ptr [eax+$1050]
  mov eax, dword ptr [eax+$30]
  mov ecx, dword ptr [eax+$4]
  mov eax, x
  mov dword ptr[ecx+$20], eax
  mov eax, z
  mov dword ptr[ecx+$24], eax
  mov eax, y
  mov dword ptr[ecx+$28], eax
  popad
 end;
end;

procedure Walk(x,y,z:single);
var aParams: TParams;
ipbuf,BytesCount,BaseWalkMode:dword;
begin
ReadProcessMemory(hProcess, ptr(GAME_ADD), @ipbuf, sizeof(ipbuf), BytesCount);
ReadProcessMemory(hProcess, ptr(ipbuf+$34), @ipbuf, sizeof(ipbuf), BytesCount);
ReadProcessMemory(hProcess, ptr(ipbuf+$64C), @BaseWalkMode, sizeof(BaseWalkMode), BytesCount);
if BaseWalkMode = 0 then aParams.Param1:=0 else aParams.Param1:=1;
aParams.x:=x;
aParams.y:=y;
aParams.z:=z;
InjectFunc(hProcess,@WalkCall,@aParams,SizeOf(aParams));
end;
  Ответить с цитированием
Старый 16.11.2011, 23:31   #11
 Разведчик
Аватар для aktivizion15
 
aktivizion15 никому не известный тип
Регистрация: 25.03.2010
Сообщений: 6
Популярность: 16
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 2 сообщениях
Отправить сообщение для aktivizion15 с помощью ICQ
 
По умолчанию Re: Delphi

Цитата:
Сообщение от semoderПосмотреть сообщение
lea eax, dword ptr [esp+$18]

lea eax, dword ptr [esp+$0C]
  Ответить с цитированием
Старый 16.11.2011, 23:54   #12
Заблокирован
 Рыцарь-капитан
Аватар для semoder
 
semoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе цену
Регистрация: 02.05.2009
Сообщений: 525
Популярность: 4586
Золото Zhyk.Ru: 20
Сказал(а) спасибо: 37
Поблагодарили 767 раз(а) в 220 сообщениях
 
По умолчанию Re: Delphi

Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1:TButton;
    Edit1:TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 PParams = ^TParams;
  TParams = packed record
    Param1:cardinal;
    x,y,z:single;
end;
var
  Form2: TForm2;
  aHandle:THandle;
  TID,wh:dword;

Const
  game_add: dword = $B280C4;

implementation

{$R *.dfm}



procedure InjectFunc(ProcessID: Cardinal; Func: Pointer; aParams: Pointer;
  aParamsSize: DWORD);
var
  hThread: THandle;
  lpNumberOfBytes: DWORD;
  ThreadAddr, ParamAddr: Pointer;
begin
   if ProcessID <> 0 then
  begin
    ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT,
      PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

    ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT,
      PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize,
      lpNumberOfBytes);

    hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0,
      lpNumberOfBytes);

    WaitForSingleObject(hThread, INFINITE);

    CloseHandle(hThread);
    VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
    VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
  end
end;


procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
    x,y,z:single;
    flying:cardinal;
begin
CallAddress1:=Pointer($0046E410);
CallAddress2:=Pointer($004728E0);
CallAddress3:=Pointer($0046E880);
x:=aPParams^.x;
y:=aPParams^.y;
z:=aPParams^.z;
flying:=aPParams^.Param1;
 asm
  pushad
  mov eax, dword ptr [game_add]
  mov esi, dword ptr [eax+$34]
  mov ecx, dword ptr [esi+$1050]
  push 1
  call CallAddress1
  mov edi, eax
  lea eax, dword ptr [esp+$0c]
  push eax
  push flying
  mov ecx, edi
  call CallAddress2
  mov ecx, dword ptr [esi+$1050]
  push 0
  push 1
  push edi
  push 1
  call CallAddress3
  mov eax, dword ptr [game_add]
  mov eax, dword ptr [eax+$34]
  mov eax, dword ptr [eax+$1050]
  mov eax, dword ptr [eax+$30]
  mov ecx, dword ptr [eax+$4]
  mov eax, x
  mov dword ptr[ecx+$20], eax
  mov eax, z
  mov dword ptr[ecx+$24], eax
  mov eax, y
  mov dword ptr[ecx+$28], eax
  popad
 end;
end;

procedure Walk(x,y,z:single);
var aParams: TParams;
ipbuf,BytesCount,BaseWalkMode:dword;
begin
ReadProcessMemory(wh, ptr(GAME_ADD), @ipbuf, sizeof(ipbuf), BytesCount);
ReadProcessMemory(wh, ptr(ipbuf+$34), @ipbuf, sizeof(ipbuf), BytesCount);
ReadProcessMemory(wh, ptr(ipbuf+$64C), @BaseWalkMode, sizeof(BaseWalkMode), BytesCount);
if BaseWalkMode = 0 then aParams.Param1:=0 else aParams.Param1:=1;
aParams.x:=x;
aParams.y:=y;
aParams.z:=z;
InjectFunc(wh,@WalkCall,@aParams,SizeOf(aParams));
end;

procedure TForm2.Button1Click(Sender: TObject);
Var
PID:dword;
begin
aHandle := FindWindow(nil, PWideChar(edit1.text));
if (aHandle <= 0) then
begin
MessageBox(Handle, 'Отсутствует окно', 'Error!',
MB_ICONERROR + MB_OK);
exit;
end;
TId := GetWindowThreadProcessId(aHandle, @PId);
wh := OpenProcess(PROCESS_ALL_ACCESS, False, PId);
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
walk(1500.1, 600.6, 280.8);
end;

end.
Простенький pas без наворотов.... Хоть $0с хоть $18 всёравно вылет
  Ответить с цитированием
Старый 17.11.2011, 08:57   #13
 Разведчик
Аватар для Sanych89
 
Sanych89 на правильном пути
Регистрация: 09.09.2010
Сообщений: 32
Популярность: 82
Сказал(а) спасибо: 16
Поблагодарили 37 раз(а) в 12 сообщениях
 
По умолчанию Re: Delphi

Код:
game_add = $B280C4;
ня
Код:
game_add: dword = $B280C4;
не ня
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
БагНаркотик (17.11.2011), semoder (17.11.2011)
Старый 18.11.2011, 09:31   #14
 Разведчик
Аватар для Prom4eg
 
Prom4eg никому не известный тип
Регистрация: 25.08.2009
Сообщений: 49
Популярность: 16
Сказал(а) спасибо: 38
Поблагодарили 3 раз(а) в 2 сообщениях
 
По умолчанию Re: Delphi

Код:
procedure TForm1.btn1Click(Sender: TObject);
const
base_addr=$00B27A04;
game_addr_offset=$1C;
player_struct_offset=$34;
hp_offset=$0490;
player_name_offset=$638;
//fly_offset=$668;
Var
    Wd : HWnd;
    buf,Nm: array [0..255] of Char;
    i: integer;
    buffer1:Word;
    pname: array [0..32] of WideChar;
    PID,hProcess,ipbuf,BytesCount: dword;
begin
    i:= 0;
    mmo1.Clear;         // Очистим список перед началом поисков
    Wd:=FindWindow(nil,nil);          // Найдем первое окно верхнего уровня любого класса
    While (Wd<>0) do              // Если такое окно существует
    Begin
        GetClassName(wd,@buf,100);    //Получаем класс окна (Чувствителен к регистру)
        if buf='ElementClient Window' then  // Если наше
          begin
            GetWindowThreadProcessId(wd, @PID);
            hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID);
            GetWindowText(Wd,Nm,255);       //получаем название окна
            cbb1.Items.Add(Nm);
            try
              ReadProcessMemory(hProcess, ptr(base_addr), @ipbuf, sizeof(ipbuf), BytesCount);
              ReadProcessMemory(hProcess, ptr(ipbuf+game_addr_offset), @ipbuf, sizeof(ipbuf), BytesCount);
              ReadProcessMemory(hProcess, ptr(ipbuf+player_struct_offset), @ipbuf, sizeof(ipbuf), BytesCount);
              ReadProcessMemory(hProcess, ptr(ipbuf+hp_offset), @buffer1, sizeof(buffer1), BytesCount);
              ReadProcessMemory(hProcess, ptr(ipbuf+player_name_offset), @pname, sizeof(pname), BytesCount);

            finally

            end;

            mmo1.Lines.Add('Class: '+buf);         // Добавим в список
            mmo1.Lines.Add('Window: '+Nm);
            mmo1.Lines.Add('HWnd: '+IntToStr(Wd));
            mmo1.Lines.Add('HP: '+IntToStr(buffer1));
            mmo1.Lines.Add('Plaer Name: ');
            mmo1.Lines.Add('');
            inc(i);
            CloseHandle(hProcess);
            //hProcess:= 0;
          end;
        Application.ProcessMessages;         // Дадим возможность поработать другим
        Wd:=GetNextWindow(Wd,GW_HWNDNEXT);   // Найдем следующее окно в системе.
    End;
    mmo1.Lines.Add('Найдено окон: '+inttostr(i));
end;
Объясните плиз безграмотному как мне имя персонажа то отобразить

Добавлено через 2 часа 51 минуту
Вопрос временно снят с повестки дня =) оказывается я совершенно неправильно пытался это делать =)

Код:
pname[0]:=#0;
            j:=0;
            try
              repeat
                ReadProcessMemory(hProcess, ptr(ipbuf), @ch, sizeof(ch), BytesCount);
                pname[j]:=ch;
                ipbuf:=ipbuf+2;
                inc(j);
              until (ord(ch) = 0) or (j >= 10);
            finally end;

            if j <= 1 then begin
              St := IntToStr(Random(MaxInt));
              StringToWideChar(St, pname, 11);
            end else
              pname[j] := #0;
вот как то так нада было =)

Последний раз редактировалось Prom4eg; 18.11.2011 в 15:25. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 19.11.2011, 20:37   #15
Заблокирован
 Рыцарь-капитан
Аватар для semoder
 
semoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе ценуsemoder знает себе цену
Регистрация: 02.05.2009
Сообщений: 525
Популярность: 4586
Золото Zhyk.Ru: 20
Сказал(а) спасибо: 37
Поблагодарили 767 раз(а) в 220 сообщениях
 
По умолчанию Re: Delphi

Почемуто раз через раз получается прочитать ITEM_BUFFER_ADD, толи после перезагрузки копа становится всё нормально, толи что-то другое ...

Код:
var i:integer;
ITEM_ADD, ITEM_BUFFER_ADD, BytesCount,:dword;
ITEMX,ITEMY,ITEMZ:single;
begin
ReadProcessMemory(hProcess, ptr(GAME_ADD), @ITEM_ADD, sizeof(ITEM_ADD), BytesCount);
ReadProcessMemory(hProcess, ptr(ITEM_ADD+$1C), @ITEM_ADD, sizeof(ITEM_ADD), BytesCount);
ReadProcessMemory(hProcess, ptr(ITEM_ADD+$28), @ITEM_ADD, sizeof(ITEM_ADD), BytesCount);
ReadProcessMemory(hProcess, ptr(ITEM_ADD+$18), @ITEM_ADD, sizeof(ITEM_ADD), BytesCount);
For I:= 1 To 768  do
begin
ReadProcessMemory(hProcess, pointer(ITEM_ADD + I * 4), @ITEM_BUFFER_ADD, sizeof(ITEM_BUFFER_ADD), BytesCount);
If ITEM_BUFFER_ADD <> 0 Then 
      begin
      ReadProcessMemory(hProcess, ptr(ITEM_BUFFER_ADD+4), @ITEM_BUFFER_ADD, sizeof(ITEM_BUFFER_ADD), BytesCount);
      ReadProcessMemory(hProcess, ptr(ITEM_BUFFER_ADD+60), @ITEMX, sizeof(ITEMX), BytesCount);
      ReadProcessMemory(hProcess, ptr(ITEM_BUFFER_ADD+68), @ITEMY, sizeof(ITEMy), BytesCount);
      ReadProcessMemory(hProcess, ptr(ITEM_BUFFER_ADD+64), @ITEMZ, sizeof(ITEMz), BytesCount);
..................
У Item_add считывает нормально, а вот ITEM_BUFFER_ADD уже 0.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Помощь в Delphi 7 и в других версиях Delphi Babls77 Pascal/Delphi 4 03.11.2011 22:27
Delphi Misterio[UA] Вопросы и ответы, обсуждения 1 07.11.2010 15:57

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 20:30.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net