Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2009, 13:18   #41
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Niklan Посмотреть сообщение
... У меня стоял IntToStr, но постоянно ноль казал. Пойду с другой программой попробую.
А во что записывается значение указанного адреса?
ReadProcessMemory(h, Pointer(addr), @buf, 11, outbytes);
в buf или outbytes?
Смотрим MSDN
p.s. сколько можно уже ?
BOBAH13 вне форума Ответить с цитированием
Старый 20.11.2009, 14:15   #42
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Смотрим MSDN
p.s. сколько можно уже ?
почитал и понял что из моего кода он будет записывать в buf: dword;
Вопрос, а что в коде означает @, считывать надо вседаки с buf или @buf.
Вот новый код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure value;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  WindowName: integer;
ProcessId: integer;
ThreadId: integer;
HandleWindow: Integer;
write, outbytes: cardinal;
buf,too, addr: dword;
pTemp: Pointer;
value: Word;
h: hwnd;


implementation

{$R *.dfm}

procedure TForm1.value;
begin
  addr := $2E68DDC8;
  h:=FindWindow(nil, 'name');
  ThreadId := GetWindowThreadProcessId(h ,@ProcessId);
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
  ReadProcessMemory(h, Pointer(addr), @buf, 4, outbytes);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:=IntTostr(buf);
end;

end.
Также при помощи Cheat Engine я смог найти в игре значение. Такое же и пишут на буржуйских форумах.
Но что именно надо вставлять в addr я не понимаю. Точнее говоря я не вижу разницу между ними.
Niklan вне форума Ответить с цитированием
Старый 20.11.2009, 14:21   #43
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Короче, вроде понимаите и в то же время полное не понимае.

Код:
addr := $2E68DDC8; // тут кстати может быть и обратная ситуация, всегда путаюсь
// т.е. писать наоборот: $c8dd682e
  HandleWindow :=FindWindow(nil, 'name');
  if(HandleWindow  <> 0) then
  begin
    GetWindowThreadProcessId(HandleWindow  ,@ProcessId);
    h := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    if(h <> 0) then
    begin
        // buf: DWORD;

        if(ReadProcessMemory(h, Pointer(addr), @buf, sizeof(DWORD), outbytes) and (outbytes = sizeof(DWORD))) then
        begin
          // о да прочитали... теперь ваше 4х байтовое значение в buf
        end;
      CloseHandle(h);
    end;
p.s. Niklan: очень надеюсь но то, что что-то но отложилось в голове, т.к. когда даеш все готовое, обычно это ноль. Рад за вас.

Последний раз редактировалось BOBAH13; 20.11.2009 в 14:39.
BOBAH13 вне форума Ответить с цитированием
Старый 20.11.2009, 14:36   #44
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Короче, вроде понимаите и в то же время полное не понимае.

Код:
addr := $2E68DDC8; // тут кстати может быть и обратная ситуация, всегда путаюсь
// т.е. писать наоборот: $c8dd682e
  HandleWindow :=FindWindow(nil, 'name');
  if(HandleWindow  <> 0) then
  begin
    GetWindowThreadProcessId(HandleWindow  ,@ProcessId);
    h := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
    if(h <> 0) then
    begin
        // buf: DWORD;

        if(ReadProcessMemory(h, Pointer(addr), @buf, sizeof(DWORD), outbytes) and (outbytes = sizeof(DWORD))) then
        begin
          // о да прочитали... теперь ваше 4х байтовое значение в buf
        end;
      CloseHandle(h);
    end;
ОГРОМНЕЙШЕЕ СПАСИБО!!!!! Просто в восторге! ОН ВЫВЕЛ ЭТО ЗНАЧЕНИЕ!!!!!!!!!!!!!!!!!

так рад что аж слов нету
Niklan вне форума Ответить с цитированием
Старый 20.11.2009, 15:55   #45
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Game.dll+8EDDC8
Как это в addr написать?
Это надо сделать для того чтобы значение было постоянным.
Так значение будет постоянно статичным.
Как я понимаю его надо найти и вбить в переменную
Niklan вне форума Ответить с цитированием
Старый 20.11.2009, 16:24   #46
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Код:
uses ..., TlHelp32;
...
Function GetModuleBase(PID: DWord; moduleName: PChar): dword;
var
   snapshot: THandle;
   modules: TModuleEntry32;
begin
  result := 0;
  snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
  modules.dwSize := sizeof(TModuleEntry32);
  if Module32First(snapshot, modules) then
    While Module32Next(snapshot, modules) do
    if StrComp(moduleName, modules.szModule) = 0 then
      begin
       CloseHandle(snapshot);
       result := dword(modules.modBaseAddr);
       exit;
      end;
   CloseHandle(snapshot);
end;
опять кто-то варкрафт ломает
пыщь

Последний раз редактировалось JTG; 20.11.2009 в 16:27.
JTG вне форума Ответить с цитированием
Старый 20.11.2009, 17:37   #47
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от JTG Посмотреть сообщение
Код:
uses ..., TlHelp32;
...
Function GetModuleBase(PID: DWord; moduleName: PChar): dword;
var
   snapshot: THandle;
   modules: TModuleEntry32;
begin
  result := 0;
  snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
  modules.dwSize := sizeof(TModuleEntry32);
  if Module32First(snapshot, modules) then
    While Module32Next(snapshot, modules) do
    if StrComp(moduleName, modules.szModule) = 0 then
      begin
       CloseHandle(snapshot);
       result := dword(modules.modBaseAddr);
       exit;
      end;
   CloseHandle(snapshot);
end;
опять кто-то варкрафт ломает
спасибо, потом разберусь когда встречу данные адреса, пока нашел обычные без game.dll+
p.s. даже близко не варкрафт, и нифига мы не ломаем =)
Niklan вне форума Ответить с цитированием
Старый 20.11.2009, 18:28   #48
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Кароче ввел я адреса, он выводит все правильно.
Но перезапустив игру он выдает на все лейбелы значение 21.
Хотя все адреса прежние...
На сколько я понимаю это проблемма из-за того что id или еще что-то у game.dll или ехе программы изменилось.
За место Game.dll+8EDDC8 я писал 2E75DDC8, и он выводил, перезапустив игру стало 2E78DDC8.
Как при помощи кода выше писать в addr:
addr:= Game.dll+8EDDC8;
или чтобы он заместо Game.dll+8E вставлял что нужно.

Код тот что выше выдал нам 770637824
Как из этого нам взять первые 4 цифры которые меняются, точнее говоря как определить где они.
Или что это он выдал?

И еще заметил что из первых 4ех чисел что заменют game.dll+8E, 4 цифра меняется, остальные статические.

Последний раз редактировалось Niklan; 20.11.2009 в 20:27.
Niklan вне форума Ответить с цитированием
Старый 20.11.2009, 21:19   #49
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
result := dword(modules.modBaseAddr);
Вам же дали, вот ведь он тот самый Game.dll (я вам давным давно говорил об этом, о поиске модуля и его адреса, видимо прослушали)
Теперь к нему прибавляйте 8eddc8 и будет вам счатье.

p.s. а можно поинтерисоватся, а почему Вы к себе обращаитесь на "мы", "нам" ?
BOBAH13 вне форума Ответить с цитированием
Старый 20.11.2009, 21:47   #50
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Код:
result := dword(modules.modBaseAddr);
Вам же дали, вот ведь он тот самый Game.dll (я вам давным давно говорил об этом, о поиске модуля и его адреса, видимо прослушали)
Теперь к нему прибавляйте 8eddc8 и будет вам счатье.

p.s. а можно поинтерисоватся, а почему Вы к себе обращаитесь на "мы", "нам" ?
я делаю с другом

Мы вот чот понять не можем.
Цитата:
addr:=result+8EDDC8;
не робит


В общем как к адресу прибавить переменную типа dword

Последний раз редактировалось Niklan; 20.11.2009 в 21:59.
Niklan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
внедрение MatLab в Web-приложения Honey JavaScript, Ajax 2 27.05.2009 20:52
Внедрение кода в EXE prizrak1390 Общие вопросы Delphi 16 07.05.2008 08:10
Внедрение звука WAW/MP3 в файл GAGARIN-NEW Мультимедиа в Delphi 26 02.04.2008 13:52
Внедрение ActiveX компонент в проект D@rk M@k Общие вопросы Delphi 5 29.01.2008 19:40
внедрение Delphi приложения в КПК shkiper Общие вопросы Delphi 2 05.04.2007 20:59