|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.12.2010, 21:49 | #1 |
Регистрация: 03.10.2010
Сообщений: 6
|
Данные из памяти сторонней программы
Итак, мне нужно написать программу, которая получает данные из ячейки памяти сторонней программы
пишу в rad studio Код:
Эти старшие биты я записал в Edit1 и, соответственно, в переменную preAddr. Их я нахожу через артмани. Мне же нужно, чтобы моя программа сама определяла эти биты, возможно, как-то через хэндл окна или что-то этому подобное. Прошу знающих людей помочь. |
31.12.2010, 22:03 | #2 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
Не совсем понял че тебе надо, но если у тебя найденные через артмани адреса меняются после перезапуска значит это адреса из динамической памяти и тебе надо найти цепочку указателей первый из которых будет сидет ьв статической памяти тогда переходя на каждый следующий указатель ты узнаешь нужное значение из динамической памяти.. если же тебе нужен функционал артмани для поиска изменяемых переменных в памяти то на сайте артмани есть библиотека для этого дела юзаешь ее и ищешь в своей проге
|
31.12.2010, 22:14 | #3 |
Регистрация: 03.10.2010
Сообщений: 6
|
билиотеки не нашёл на сайте
можно подробнее про цепочку указателей? мне нужно просто получить данные из памяти программы и закинуть их в едитбокс |
01.01.2011, 11:15 | #4 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
А ну значит я чето либо перепутал либо приснилось мне
Библиотеки наверно приснились а вот сорсы подобной проги есть - называется CheatEngine. вот сайтик там несколько подобных прог есть wpepro.net а цепочка адресов ну например есть какаянить программа вида: Код:
ЗЫ: узнать статический адрес или нет можно вроде как по самому адресу там у всех статических адресов какой-то определенный диапазон кажись в памяти будет ЗЗЫ: А чтоб получше разобратся какие адреса за что отвечают можно попробовать вскрыть прогу в ассемблере и смотрет ькуда там она читает/пишет по каким адресам в частности можно открыть ее под дебаггером найти адрес через артмани и не закрывая прогу поставить брейкпоинт на нужный адрес памяти таким образом при следующем к нему обращении видно будет как сама программа работает с этим значением откуда берет значение адреса Последний раз редактировалось UltimaBeaR; 01.01.2011 в 11:36. |
01.01.2011, 14:29 | #5 |
Регистрация: 03.10.2010
Сообщений: 6
|
Я где-то читал про стеки и кучи и как переменные из них хранятся в памяти.
Первый абзац я прочитал, но не совсем понял, слишком много одинаковых обозначений(а, B, b, A) , но вроде бы сказано как раз про это. Ладно уж, раскрою все карты. Программа - игра Counter-strike 1.6. Пишу программу, для мониторинга, которая отслеживает здоровье, броню, и патроны. Адреса переменных жизней, брони и патронов я находил, так вот старшие биты у них всегда разные(динамические), а младшие - всегда одинаковые. Я и хотел узнать, как же мне найти эти первые 4 бита, которые я записываю в переменную preAddr ps программа - не чит, а отдельное окно на сайте артмани есть таблицы для кс, но они старые и вообще не работают вот допустим: UnicodeString poAddr = "0x"+preAddr+"D1D4"; - в D1D4 хранятся патроны за пазухой |
01.01.2011, 16:19 | #6 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
Может и не чит но засчет того что ты читаешь память из ее процесса, античиты будут ее успешно палить как чит)
куча - это и есть динамическая память. стек - это память где хранятся локальные переменные, а также параметры функций и адреса возвратов из этих функций. + есть еще некоторая статическая память там как раз все глобальные переменные и сидят (и статические поля классов) - вот эта статическая память тебе и нужна там адреса всегда одни и те же, адреса в стеке будут зависеть от того какие функции когда вызывались - то есть тоже разные адреса, адреса в динамической памяти получаются при ее выделении - это уже вообще нельзя просчитать, зависит от того какая память свободна и еще от чего-то. А то что я написал - это пример данных и то как их в этом случае надо считывать сторонней прогой. насчет битов не знаю - можно предположить что это из-за выравнивания в памяти такие значения. Оружие броня и патроны текущего игрока - похоже на глобальные данные - скорее всего там что-то типа класса расположенного в динамической памяти на адрес которого ссылается одна из глобальных переменных или статических полей. ЗЫ: еще проверь например если не выходишь из игры а выходишь из боя (в меню) а потом создаешь новую игру сохраняются ли адреса патронов и тд, которые ты нашел - вобще побольше экспериментов - это позволит неверные предположения отсеять Последний раз редактировалось UltimaBeaR; 01.01.2011 в 16:27. |
01.01.2011, 17:31 | #7 | |
Регистрация: 03.10.2010
Сообщений: 6
|
античит не потребуется для её использования, тут уже всё продумано
я уже испробовал все варианты - значения патронов, жизней и брони всегда хранятся по определенным адресам(младшие биты всегда одинаковые, я привел пример с патронами, где их адрес всегда D1D4) Цитата:
|
|
01.01.2011, 18:16 | #8 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
То что адреса сохраняются говорит о том что скорее всего это глобальные переменные, насчет байтов как я уже говорил - черт его знает - минимальная разница между старшими 4мя байтами будет 64килобайта(если я не ошибаюсь) а это не так уж много - вполне возможно что для более удобного доступа к структуре(в одной из полей которой прописаны твои патроны) идет выравнивание адресов какраз по 64 килобайта а младшие байты такие потому что адрес переменной относительно начала структуры всегда 1 и тот же. Насчет хэндла окна я че-то вообще не понял причем тут оно?
ЗЫ: попробуй найти начало структуры там есть вроде функция такая - искать адрес начала блока данных |
01.01.2011, 19:19 | #9 | |
Регистрация: 03.10.2010
Сообщений: 6
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запуск программы из памяти | jone | Общие вопросы Delphi | 7 | 12.03.2010 18:03 |
Доступ к памяти другой программы | BaronTreep | Win Api | 10 | 31.05.2009 07:16 |
Запуск программы из оперативной памяти? | G&R | Win Api | 2 | 22.12.2008 21:26 |
Определение завершения сторонней программы | Хамяг | Общие вопросы Delphi | 3 | 26.11.2008 18:12 |
Как определить момент запуска сторонней программы? | NioTo | Win Api | 2 | 17.12.2007 16:40 |