Miidi Опубликовано 6 апреля, 2017 Поделиться Опубликовано 6 апреля, 2017 Разъясните пожалуйста при поиске в CE нашел адрес значение - здоровья, открыл его в memory viewer. получается байты "64 70 51 42 00 00 C8 42" - это и есть 52.35975647? Если так то как их перевести в это значение( Просто не понимаю этого ). И второй вопрос будет по поводу Delphi попросил вывести значение по адресу в поле Edit в он вывел мне полную не разбериху ,я добавлю информацию чуть позже вместе с кодом Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 8 часов назад, Miidi сказал: Если так то как их перевести в это значение( Просто не понимаю этого ). ПКМ в таблице по адресу здоровья -> "Показать как шестнадцатеричное". (float)52.35975647 = (HEX)42517064 (байты в регионе памяти пишутся в обратном порядке). Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 9 часов назад, Miidi сказал: Разъясните пожалуйста Чей-то долго молчишь. Наверное не понял ещё. Твои ошибки: 1. Float не 8 байт, а 4. 9 часов назад, Miidi сказал: попросил вывести значение по адресу в поле Edit в он вывел мне полную не разбериху Что у тебя выводится в Edit одному богу известно, ты хотя бы привёл код вывода, но думаю, что: 1. Ты читаешь из памяти в integer. 2. Ты не правильно записываешь поинтеры (указатели). Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 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/ Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 31 минуты назад, Garik66 сказал: 2. Ты не правильно записываешь поинтеры (указатели). Вообще пока указатель не записываю, дай хоть пока так адрес напрямую запишу) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 5 минут назад, Miidi сказал: .Вопрос как перевести его в нужное мне число с точкой) Я ЯП не знаю не одного (к сожалению ). но думаю что должно быть что-то типа того: Edit1.Text := whp.FloatToStr; Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 16 minutes ago, Miidi said: Вопрос как перевести его в нужное мне число с точкой) Привет! Можно загуглить "hex to float", hex - шестнадцатеричная система счисления, float - с точечкой. Там будет куча всяких онлайн-конвертеров, но в том числе и объяснение алгоритма их работы. Мне гугл предложил вот [такое] решение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 12 минуты назад, Garik66 сказал: Я ЯП не знаю не одного (к сожалению ). но думаю что должно быть что-то типа того: Edit1.Text := whp.FloatToStr; Тысячи видосов по взлому на Ютуб и не одного языка ,поражен) На FloatToStr он ругается ,я использовал тип Size_t у переменной whp.Что это за тип сам понять не могу , но без него он не хотел функцию компилировать ReadProcessMemory . 8 минут назад, keng сказал: Привет! Можно загуглить "hex to float", hex - шестнадцатеричная система счисления, float - с точечкой. Там будет куча всяких онлайн-конвертеров, но в том числе и объяснение алгоритма их работы. Мне гугл предложил вот [такое] решение. Слишком много цифорок, не ужели в Delphi не придумали как сделать проще((Боюсь сейчас начну вставлять этот код и еще больше ошибок на делаю)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 7 минут назад, Miidi сказал: На FloatToStr он ругается Попробуй так (синтаксиса Дельфи не знаю): Edit1.Text :=FloatToStr(IntToFloat('whp')); Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 8 минут назад, keng сказал: скромничает, ассемблер он уже явно вполне знает. ;] Спасибо за высокую оценку. Но я считаю, что не знаю. Вот gmz знает ассемблер. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 37 минуты назад, Miidi сказал: На FloatToStr он ругается Miidi, вот это сработало? Или тоже не прокатывает? Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 5 минут назад, Garik66 сказал: Miidi, вот это сработало? Или тоже не прокатывает? Ругается ,сейчас отпишусь другим способом пробую . Кстати в этой игре интересно как то значение золото лежит , фиг подберешься(Hammerfight). Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 30 минуты назад, Miidi сказал: Ругается Кажется понял. У тебя в whp выводится строка, т.е. нужно не int. а str: Edit1.Text :=FloatToStr(StrToFloat('whp')); Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 9 минут назад, Garik66 сказал: Кажется понял. У тебя в whp выводится строка, т.е. нужно не int. а str Приложение запускается но при считывание пишет " is not a valid floating point value" 1 час назад, keng сказал: Не надо вставлять никуда тот код, который ты не понимаешь. Лучше выпиши незнакомые слова и найди, что они обозначают. Выдает вообще какие то левые числа . Я вот думаю когда я нажимаю на кнопку , он считывает из памяти данные преобразует их в строку и выдает значение в dec "1120403456". Получается надо взять это значение перевести в hex а его уже в число и потом это число преобразовать в строку и вывести на экран , попробую так Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 (изменено) Можешь попробовать эти процедуры 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 Изменено 7 апреля, 2017 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 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; Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 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; Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 14 часа назад, Miidi сказал: Если так то как их перевести в это значение Тебе ничего не нужно переводить. Достаточно просто изначально считать значение в нужном формате. Выше Гарик уже написал, как это сделать Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 Спасибо за советы, я ближе к вечеру отпишусь Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 7 апреля, 2017 Автор Поделиться Опубликовано 7 апреля, 2017 Господи все в пустую.... Я уверен это все из за этого типа 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()* ===================================================================== Фиг с ним попробую просто по этому адресу записать нужное мне значение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 апреля, 2017 Поделиться Опубликовано 7 апреля, 2017 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; Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 8 апреля, 2017 Поделиться Опубликовано 8 апреля, 2017 Вот как я считываю float. Первая строка - имя процесса, Вторая - адрес откуда будет считывать. Разберешь исходник и все поймешь, там ничего сложного. readFloat.rar Ссылка на комментарий Поделиться на другие сайты Поделиться
Taiwan Опубликовано 8 апреля, 2017 Поделиться Опубликовано 8 апреля, 2017 (изменено) 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; Да и вообще лучше скинь суда весь исходник. Конечно если есть такая возможность. Изменено 8 апреля, 2017 пользователем Taiwan Ссылка на комментарий Поделиться на другие сайты Поделиться
Miidi Опубликовано 8 апреля, 2017 Автор Поделиться Опубликовано 8 апреля, 2017 6 часов назад, Taiwan сказал: Да и вообще лучше скинь суда весь исходник. Конечно если есть такая возможность. Не хочет коомпилировать)) 14 часа назад, Garik66 сказал: Тогда можно ещё так попробовать: Не а не хочет)) 6 часов назад, Vlad2 сказал: Вот как я считываю float. Первая строка - имя процесса, Вторая - адрес откуда будет считывать. Разберешь исходник и все поймешь, там ничего сложного. readFloat.rar Это работает я посмотрю как у тебя сделано)Может у себя косяк найду Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения