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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 19:51   #31
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

1. Вы читаете не то что вам нужно, так как не понимаете что интересующая Вас информация не будет по абсолютному смещению
2. Вы не проверяете а считала ли функция ReadProcessMemory что нибуть
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 19.11.2009, 10:35   #32
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Мда..видимо я не тут уже не помогу аууу.. молодой человек, прошу вас вчитайтесь в задачи которые я поставил, после их обработки и решения, у вас решится и ваша задача. Если не хотите разбиратся, тогжа на кой черт вообще тут спрашиваите ? Может я груб конечно, но сколько уже Вам вбивают как это сделать, дают наводки, а вы все еще не очень пишите. Видимо как говорится, халявы захотели ? Или в чем проблема. Я рад что вас все есть, тогда чего сидим ? Где нароботки кода ? Где открытие процесса, его чтение ? Как нашли, где код, нахождения адресса загрузки .dll в целевом процессе ?
я в этом не силен, потому что делфи пользуюсь недавно. Поэтому и спрашиваю вас. Мне просто надо цифры вытащить, а уже затем у меня все как по маслу пойдет, потому что уже все написано. Просто сейчас программа считывает по пикселям и их цветам, а это очень не удобно, особенно если разрешение другое. Поэтому мы и решили вытащить эти цифры из памяти. Если бы мы хоть как разобирались в этом, мы бы уже наверно тут не спросили или таких бы глупых для вас вопросов небыло.
Код:
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: dword;
pTemp: Pointer;
value: Word;
h: hwnd;
const
WindowTitle = 'name';
Address = $12345678;
NumberOfBytes = 4;


implementation

{$R *.dfm}

procedure TForm1.value;
begin
  h:=FindWindow(nil, 'name');
WindowName := FindWindow(nil,WindowTitle);
ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
pTemp:=GetProcAddress(address, WindowTitle);
ReadProcessMemory(h, pTemp, @buf, 4, outbytes);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label2.Caption:=IntToStr(outbytes);
end;

end.
вот весь код то что уже написано.

Вообще как проверить правильно ли считывает память, как я понял из игры сразу глупо и трудно. Было бы приложение простенькое, из которого бы можно было проверять правильно ли он взял значение.

+ на буржуйском форуме нашел адрес загрузки как я понял, но не понял что да как это в делфи:
Цитата:
CLIENT CONNECTION DLL = "4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF";
MASK CLIENT CONNECTION DLL = "xxxxxxxxxxxxxx";
Если есть какие-нибудь книги по делфи, где примеры и статьи как работать с памятью были, может у меня бы было меньше вопросов и они бы были не так тупы. Я нашел 1 справочник, но там 1 статья и то она о подключении ранее созданных dll'ок.

Последний раз редактировалось Niklan; 19.11.2009 в 10:38.
Niklan вне форума Ответить с цитированием
Старый 19.11.2009, 11:00   #33
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. После вызова OpenProcess, надо проверять результат, и в конце закрыть дескриптор процесса. см. MSDN
2. GetProcAddress - тут не нужен, почему ? см. MSDN
3. ReadProcessMemory(h, pTemp { вот тут адресс DWORD, где распологается ваша "переменная" }, @buf, 4, outbytes);

Имелось ввиду использовать коды моего "патчера", к примеру как найти адресс этих данных, без статического адресса ?
1. Подготавливаем этот процесс, удостоверяемся что все загружено (ваша искомая переменная в памяти находится)
2. Открываем данный процесс в WinHex
3. Поиском ищем ее значение
4. Нашли ее адресс, теперь смотрим вокруг, возможно где-то рядом есть постоянный кусок данных, например кода. Нашли ?
5. Нашли кусок, скопировал как hex значения, сохранили у себя в коде
6. После открытия процесса, в коде ищем этот самый кусок
7. Нашли ? теперь смещаем на точно известное кол-во байт вверх/вниз (когда смотрели в WinHex)
8. Мы на месте. Пишем/Читаем
BOBAH13 вне форума Ответить с цитированием
Старый 19.11.2009, 20:03   #34
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
1. После вызова OpenProcess, надо проверять результат, и в конце закрыть дескриптор процесса. см. MSDN
2. GetProcAddress - тут не нужен, почему ? см. MSDN
3. ReadProcessMemory(h, pTemp { вот тут адресс DWORD, где распологается ваша "переменная" }, @buf, 4, outbytes);

Имелось ввиду использовать коды моего "патчера", к примеру как найти адресс этих данных, без статического адресса ?
1. Подготавливаем этот процесс, удостоверяемся что все загружено (ваша искомая переменная в памяти находится)
2. Открываем данный процесс в WinHex
3. Поиском ищем ее значение
4. Нашли ее адресс, теперь смотрим вокруг, возможно где-то рядом есть постоянный кусок данных, например кода. Нашли ?
5. Нашли кусок, скопировал как hex значения, сохранили у себя в коде
6. После открытия процесса, в коде ищем этот самый кусок
7. Нашли ? теперь смещаем на точно известное кол-во байт вверх/вниз (когда смотрели в WinHex)
8. Мы на месте. Пишем/Читаем
в коде вашего патчера написано:
Код:
ReadProcessMemory(Proc, Pointer(offset), Buff, BuffSize, NumOfBytes)
Так как у меня прога не компилируется из-а отсутсвия ваших модулей я смею предположить что если за место offset вставить 0xA2771C, то все будет работать. Мне надо с этой ячейки прочитать значение. Оно статичное, меняется только его значение. Но я даже представления не имею как её привести к нужному виду чтобы вставить в offset.

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

0xA2771C это 4 байта, значит
Код:
var addr: DWORD;
begin
  addr := $A2771C;
  ReadProcessMemory(Proc, Pointer(addr)...
BOBAH13 вне форума Ответить с цитированием
Старый 19.11.2009, 22:02   #36
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
0xA2771C это 4 байта, значит
Код:
var addr: DWORD;
begin
  addr := $A2771C;
  ReadProcessMemory(Proc, Pointer(addr)...
как байт перевести в значение?
Niklan вне форума Ответить с цитированием
Старый 19.11.2009, 22:20   #37
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Niklan Посмотреть сообщение
как байт перевести в значение?
Не пойму вопроса Вашего? Это как ?
BOBAH13 вне форума Ответить с цитированием
Старый 19.11.2009, 22:28   #38
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Не пойму вопроса Вашего? Это как ?
Ну он мне результат сразу значение выдаст? или 16-ти ричное значение или что там
То есть как значение байта вывести в лейбел?

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

Цитата:
Сообщение от Niklan Посмотреть сообщение
Ну он мне результат сразу значение выдаст? или 16-ти ричное значение или что там
То есть как значение байта вывести в лейбел?
Ого, даже так. Ну раз мы даже незнаем азов, а за такое беретесь. Ну да ладно, Byte как обычный Integer, так же его через IntToStr или Format и т.п.
BOBAH13 вне форума Ответить с цитированием
Старый 20.11.2009, 12:25   #40
Niklan
Пользователь
 
Регистрация: 30.10.2009
Сообщений: 55
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Ого, даже так. Ну раз мы даже незнаем азов, а за такое беретесь. Ну да ладно, Byte как обычный Integer, так же его через IntToStr или Format и т.п.
... У меня стоял IntToStr, но постоянно ноль казал. Пойду с другой программой попробую.
А во что записывается значение указанного адреса?
ReadProcessMemory(h, Pointer(addr), @buf, 11, outbytes);
в buf или outbytes?

Последний раз редактировалось Niklan; 20.11.2009 в 12:30.
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