Перейти к содержанию

Рекомендуемые сообщения

Разъясните пожалуйста при поиске в CE нашел адрес значение - здоровья, открыл его в memory viewer. получается байты "64 70 51 42 00 00 C8 42" - это и есть 52.35975647? Если так то как их перевести в это значение( Просто не понимаю этого ).

И второй вопрос будет по поводу Delphi попросил вывести значение по адресу в поле Edit в он вывел мне полную не разбериху ,я добавлю информацию чуть позже вместе с кодом  13477583.jpg

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, Miidi сказал:

Если так то как их перевести в это значение( Просто не понимаю этого ).

ПКМ в таблице по адресу здоровья -> "Показать как шестнадцатеричное".

(float)52.35975647 = (HEX)42517064 (байты в регионе памяти пишутся в обратном порядке).

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Miidi сказал:

Разъясните пожалуйста

Чей-то долго молчишь. Наверное не понял ещё.

Твои ошибки:

1. Float не 8 байт, а 4.

9 часов назад, Miidi сказал:

попросил вывести значение по адресу в поле Edit в он вывел мне полную не разбериху

Что у тебя выводится в Edit одному богу известно, ты хотя бы привёл код вывода, но думаю, что:

1. Ты читаешь из памяти в integer.

2. Ты не правильно записываешь поинтеры (указатели). 

 

 

Ссылка на комментарий
Поделиться на другие сайты

Cо значением разобрался не много, просто хотел HEX перевести в вещественное число ,а теперь понял что это не так просто )))

Так теперь что выводит у меня поле Edit "1120403456" если перевести это в hex "42C80000" то получиться значение моего здоровья.Вопрос как перевести его в нужное мне число с точкой)

Скрытый текст

procedure TForm1.Button2Click(Sender: TObject);
var
  HP: integer;
  whp,nob: size_t;

begin
  WindowName := FindWindow(nil, WindowTitle);
 { ShowMessage(WindowName.ToString);  }
  ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId);
 { ShowMessage(ThreadId.ToString);  }
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
  ReadProcessMemory(HandleWindow, ptr(Address), @whp{это куда пишеться значение},4{количество байт для копирования?}, nob{что это за число не могу понять});
  Edit1.Text := whp.ToString;
  Label1.Caption := nob.ToString;
end;

 

 // Принято пользоваться тегами и кода и спойлера, если код больше 3-5 строк. Garik66/

Ссылка на комментарий
Поделиться на другие сайты

31 минуты назад, Garik66 сказал:

2. Ты не правильно записываешь поинтеры (указатели). 

Вообще пока указатель не записываю, дай хоть пока так адрес напрямую запишу)

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, Miidi сказал:

.Вопрос как перевести его в нужное мне число с точкой)

Я ЯП не знаю не одного (к сожалению :wacko:). но думаю что должно быть что-то типа того:

Edit1.Text := whp.FloatToStr;

 

Ссылка на комментарий
Поделиться на другие сайты

16 minutes ago, Miidi said:

Вопрос как перевести его в нужное мне число с точкой)

Привет! Можно загуглить "hex to float", hex - шестнадцатеричная система счисления, float - с точечкой. Там будет куча всяких онлайн-конвертеров, но в том числе и объяснение алгоритма их работы. Мне гугл предложил вот [такое] решение.

Ссылка на комментарий
Поделиться на другие сайты

12 минуты назад, Garik66 сказал:

Я ЯП не знаю не одного (к сожалению :wacko:). но думаю что должно быть что-то типа того:


Edit1.Text := whp.FloatToStr;

 

Тысячи видосов по взлому на Ютуб и не одного языка ,поражен)

На FloatToStr он ругается ,я использовал тип Size_t у переменной  whp.Что это за тип сам понять не могу , но без него он не хотел функцию компилировать  ReadProcessMemory .

8 минут назад, keng сказал:

Привет! Можно загуглить "hex to float", hex - шестнадцатеричная система счисления, float - с точечкой. Там будет куча всяких онлайн-конвертеров, но в том числе и объяснение алгоритма их работы. Мне гугл предложил вот [такое] решение.

Слишком много цифорок, не ужели в Delphi не придумали как сделать проще((Боюсь сейчас начну вставлять этот код и еще больше ошибок на делаю))

Ссылка на комментарий
Поделиться на другие сайты

3 minutes ago, Miidi said:

Тысячи видосов по взлому на Ютуб и не одного языка ,поражен)

@Garik66 скромничает, ассемблер он уже явно вполне знает. ;]

 

4 minutes ago, Miidi said:

сейчас начну вставлять этот код и еще больше ошибок на делаю))

Не надо вставлять никуда тот код, который ты не понимаешь. Лучше выпиши незнакомые слова и найди, что они обозначают.

 

В примере объявляется переменная:

 

var D Double

 

С типом double, который то же самое, что и float, только другой точности (нулей после точки больше).

И еще одна, но с типом Int64:

 

var I64 Int64

 

Далее D конвертируется и записывается в I64:

 

I64 := PInt64(@D)^;

 

После чего выводится на экран (%.16X', [I64]), причем конструкция 16Х заставляет выводить не просто цифры, а в формате HEX.

Дальше происходит обратная конвертация:

 

D2 := PDouble(@I64)^;

 

Итого чтобы перевести из HEX в Double тебе понадобится прочитать нужное значение в переменную с типом Int, а затем сделать вот эту вот последнюю строчку и получить double. Результат уже можно будет запихивать в EditBox. 

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, keng сказал:

скромничает, ассемблер он уже явно вполне знает. ;]

offtopic.gif Спасибо за высокую оценку. Но я считаю, что не знаю. Вот gmz знает ассемблер. 

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, Garik66 сказал:

Miidi, вот это сработало? Или тоже не прокатывает?

Ругается ,сейчас отпишусь другим способом пробую .

Кстати в этой игре интересно как то значение золото лежит , фиг подберешься(Hammerfight).

Ссылка на комментарий
Поделиться на другие сайты

30 минуты назад, Miidi сказал:

Ругается

Кажется понял. У тебя в whp выводится строка, т.е. нужно не int. а str:

Edit1.Text :=FloatToStr(StrToFloat('whp'));

 

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Garik66 сказал:

Кажется понял. У тебя в whp выводится строка, т.е. нужно не int. а str

Приложение запускается но при считывание пишет " is not a valid floating point value"

 

1 час назад, keng сказал:

Не надо вставлять никуда тот код, который ты не понимаешь. Лучше выпиши незнакомые слова и найди, что они обозначают.

Выдает вообще какие то левые числа .

Я вот думаю когда я нажимаю на кнопку , он считывает из памяти данные преобразует их в строку и выдает значение в dec "1120403456".

Получается надо взять это значение перевести в hex а его уже в число и потом это число преобразовать в строку и вывести на экран ,  попробую так

Ссылка на комментарий
Поделиться на другие сайты

Можешь попробовать эти процедуры

VarToHeh() и HehToVar()

 

Пример:

Double.
Db := 1.12345;
SHex := VarToHex(Db, SizeOf(Db));
ShowMessage(FloatToStr(Db) + ' -> ' + SHex); //SHEX = 0x3f8fcd36

HexToVar(SHex, Db);
ShowMessage(SHex + ' -> ' + FloatToStr(Db)); //Db = 1.12345

 

 

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

19 минуту назад, Miidi сказал:

Приложение запускается но при считывание пишет " is not a valid floating point value"

Появилась одна мысль, попробуй так:

Скрытый текст

procedure TForm1.Button2Click(Sender: TObject);
var
  HP: integer;
  whp,nob: size_t;

begin
  WindowName := FindWindow(nil, WindowTitle);
 { ShowMessage(WindowName.ToString);  }
  ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId);
 { ShowMessage(ThreadId.ToString);  }
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
  ReadProcessMemory(HandleWindow, ptr(Address), @whp{это куда пишеться значение},4{количество байт для копирования?}, nob{что это за число не могу понять});
  whp := IntTofloat(whp)
  Edit1.Text := whp.ToString;
  Label1.Caption := nob.ToString;
end;

 

 

Ссылка на комментарий
Поделиться на другие сайты

PS: Но проще будет сделать так (мне кажется):

Скрытый текст

procedure TForm1.Button2Click(Sender: TObject);
var
  HP: integer;
  whp: real;

begin
  WindowName := FindWindow(nil, WindowTitle);
 { ShowMessage(WindowName.ToString);  }
  ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId);
 { ShowMessage(ThreadId.ToString);  }
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
  ReadProcessMemory(HandleWindow, ptr(Address), @whp,4);
  Edit1.Text := FloatToString(whp);
end;

 

 

Ссылка на комментарий
Поделиться на другие сайты

14 часа назад, Miidi сказал:

Если так то как их перевести в это значение

Тебе ничего не нужно переводить. Достаточно просто изначально считать значение в нужном формате.
Выше Гарик уже написал, как это сделать

Ссылка на комментарий
Поделиться на другие сайты

Господи все в пустую.... Я уверен это все из за этого типа Size_t . Пока попробую записать что то в этот адрес

8 часов назад, Garik66 сказал:

 

PS: Но проще будет сделать так (мне кажется):

 

тут он на дает с коомпилировать файл то бишь функций  ReadProcessMemory не хватает пятого аргумента я его добавил он стал говорить , что хочу другой тип данных не Real .

9 часов назад, Garik66 сказал:

whp := IntTofloat(whp) Edit1.Text := whp.ToString; Label1.Caption := nob.ToString;

Тут он ругается что whp не какой не integer.

 

9 часов назад, partoftheworlD сказал:

VarToHeh() и HehToVar()

А эти функции я не нашел и делфи моих их не знает  VarToHeX() и HeXToVar()*:(

=====================================================================

Фиг с ним попробую просто по этому адресу записать нужное мне значение.

Ссылка на комментарий
Поделиться на другие сайты

37 минуты назад, Miidi сказал:

ReadProcessMemory не хватает пятого аргумента

Тогда можно ещё так попробовать:

Скрытый текст

procedure TForm1.Button2Click(Sender: TObject);
var
  HP: integer;
  nob: size_t;
  whp: real;

begin
  WindowName := FindWindow(nil, WindowTitle);
 { ShowMessage(WindowName.ToString);  }
  ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId);
 { ShowMessage(ThreadId.ToString);  }
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId);
  ReadProcessMemory(HandleWindow, ptr(Address), @whp,4,nob);
  Edit1.Text := FloatToString(whp);
end;

 

 

Ссылка на комментарий
Поделиться на другие сайты

Вот как я считываю float. Первая строка - имя процесса, Вторая - адрес откуда будет считывать.
Разберешь исходник и все поймешь, там ничего сложного.

readFloat.rar

Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, Miidi сказал:

Фиг с ним попробую просто по этому адресу записать нужное мне значение.

Скрытый текст

procedure TForm1.Button2Click(Sender: TObject);
var
  HP, whp: integer; //Тут я вообще не въехал, за что у тебя в данном коде отвечает переменная "HP", я добавил еще переменную "whp" которая будет отвечать за запись/чтения.
  nob: size_t; // Буффер

begin
  WindowName := FindWindow(nil, WindowTitle); //Находим Handle окна.
 { ShowMessage(WindowName.ToString);  }
  ThreadId := GetWindowThreadProcessId(WindowName, @ProcessId); //Получаем ID процесса по Handle окну.
 { ShowMessage(ThreadId.ToString);  }
  HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); //Открываем процесс с возможностью записи/чтения, вообщем со всеми правами процесса.
  ReadProcessMemory(HandleWindow, ptr(Address), @whp,4, nob); // Тут и так все понятно.
  Edit1.Text := StrToFloat(IntToFloat(whp)); // Так как компонент "Edit1" по стандарту имеет тип "String" мы преобразовываем этот тип в "Float" при этом приравнивая к нашему уже преобразованному компоненту "Edit1" наше значение, а так как переменная "whp" имеет тип "Integer" мы преобразовываем и его в "Float"
  Label1.Caption := nob.ToString; // Удали вообще эту строку.
end;

Да и вообще лучше скинь суда весь исходник. Конечно если есть такая возможность.

Изменено пользователем Taiwan
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Taiwan сказал:

Да и вообще лучше скинь суда весь исходник. Конечно если есть такая возможность.

13523349.jpg

Не хочет коомпилировать))

14 часа назад, Garik66 сказал:

Тогда можно ещё так попробовать:

Не а не хочет))

 

6 часов назад, Vlad2 сказал:

Вот как я считываю float. Первая строка - имя процесса, Вторая - адрес откуда будет считывать.
Разберешь исходник и все поймешь, там ничего сложного.

readFloat.rar

Это работает я посмотрю как у тебя сделано)Может у себя косяк найду

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.