Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];

Вниз

Как получить список всех переменных чужой програмы?   Найти похожие ветки 

 
Miralex   (2003-08-27 14:00) [0]

У меня такая проблема:
хендл програмы я нашел а как найти область памяти, где ета программа хранит свои переменные?
Как получить список етих переменных и их значения?
И как работать с ними?


 
HolACost!   (2003-08-27 14:02) [1]

нет переменных в откомпилированной программе - не существует их там!


 
Digitman   (2003-08-27 14:08) [2]


> Miralex


никак игрушку какую-нить "ломаешь" ?)


 
BillyJeans   (2003-08-27 14:11) [3]

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


 
Miralex   (2003-08-27 14:11) [4]

Блин ну както делают програмы, которые в памяти ишут переменные в конкретных приложениях (играх)!
Например есть ArtMoney , которая ищет в приложениях перемееные и отображает их значения с возможностью их заморозки и изменения!

мне надо пример похожий по функциям на ArtMoney!


 
Miralex   (2003-08-27 14:14) [5]


> Digitman © (27.08.03 14:08) [2]
>
> > Miralex
>
>
> никак игрушку какую-нить "ломаешь" ?)


Если б игрушку то артмоней мне б хватило!


 
HolACost!   (2003-08-27 14:15) [6]

Было уже тут такое - это не ты был!
Эти проги просто сканируют адресное пространство проги и ижат значения нужные! Всё!!! Если ты заметил - арт мани тебе не пишет - переменная money - она выдаёт адрес!


 
Digitman   (2003-08-27 14:34) [7]


> Miralex


ну хорошо

а если бы речь шла о твоем собственном (работающем в данный момент времени) приложении, то, надо понимать, в ходе его работы получть список всех переменных для тебя не составляет труда ?


 
Miralex   (2003-08-27 14:37) [8]


> Digitman ©

если мое приложение - то список мне ненужен!
я и так знаю какие я использую переменые!


> в ходе его работы получть список всех переменных

вот и хочу узнать как в ходе работы получить список переменых другой программы!


 
Miralex   (2003-08-27 14:38) [9]


> HolACost! © (27.08.03 14:15) [6]
> Было уже тут такое - это не ты был!
> Эти проги просто сканируют адресное пространство проги и
> ижат значения нужные! Всё!!! Если ты заметил - арт мани
> тебе не пишет - переменная money - она выдаёт адрес!


а ссылочку на пример такой проги можешь дать?
Я просто рылся и ничего не могу найти! :-(


 
HolACost!   (2003-08-27 14:40) [10]

Ты нашёл адрес процесса - так и начал его сканировать по 1, 2, 4 байта - другие значения врятли найдёшь, но конечно можно! Типовой поиск подстроки в строке!


 
Digitman   (2003-08-27 14:42) [11]


> вот и хочу узнать как в ходе работы получить список переменых
> другой программы!


никак) ... ни в своем ни в чужом !)


 
Miralex   (2003-08-27 14:46) [12]


> HolACost!


а как найти етот адресс процесса?
Я так понял надо найти область в памяти которую занимает етот процесс!
а как ето сделать?
как найти где начинаються возможные его данные, где заканчиваються?


 
Digitman   (2003-08-27 14:53) [13]


> Digitman


предположим, ты получил список из десятка тысяч адресов в чужом ВАП, по которым на момент поиска обнаружены, к примеру, искомые 4-байтовые значения ... дальше что ?


 
Miralex   (2003-08-27 14:59) [14]


> Digitman


я знаю что програма хранит переменные в определеном порядке в области памяти, которая выделяет ей винда!
Мне надо найти ету область памяти и просканировать и найти там свои переменные!
и далее отслеживать их изменение!....
а как найти саму область ету?
и как с ней работать?


 
Digitman   (2003-08-27 15:03) [15]


> програма хранит переменные в определеном порядке в области
> памяти, которая выделяет ей винда


вот здесь поподробней ...

что за "определенный порядок" ?
каким образом "выделяет ей винда" ?


> далее отслеживать их изменение


как ты себе это видишь ? по таймеру что ли ?


 
HolACost!   (2003-08-27 15:29) [16]

Mission Impossible III or Terminator and Programmer!


 
Miralex   (2003-08-27 15:32) [17]


> > програма хранит переменные в определеном порядке в области
>
> > памяти, которая выделяет ей винда
>
>
> вот здесь поподробней ...


Я наскока понял что когда ты обьявляешь переменные , то они в том же порядке фиксируються в памяти, когда выполняеться программа!
Если программа одна и таже, то один раз можно найти ету переменую и потом знать где она будет уже лежать!


> > далее отслеживать их изменение
>
>
> как ты себе это видишь ? по таймеру что ли ?

Также как и в Artmoney


 
Miralex   (2003-08-27 15:37) [18]


> > Digitman
>
>
> предположим, ты получил список из десятка тысяч адресов
> в чужом ВАП, по которым на момент поиска обнаружены, к примеру,
> искомые 4-байтовые значения


Вот как етот список получить? зная тока хендл программы!


 
Anatoly Podgoretsky   (2003-08-27 15:46) [19]

Этот список хранится отдельно от программы в мап файле, если конечно он есть.


 
Digitman   (2003-08-27 15:58) [20]


> Я наскока понял


неправильно ты понял)

к тому же откуда ты знаешь, как, в каком порядке и в каких модулях программист, разрабатывавший "чужое" приложение, объявлял "переменные" ? и в какую секцию поместил линкер ее ? и поместил ли вообще ?

ко всему прочему, почему бы искомой "переменной" не быть локальной ? это же тоже "переменная" ! А время жизни лок.переменной равно времени жизни подпрограммы, ее использующей

а если адрес искомой переменной лежит в другой переменной указательного типа ? память-то под первую вполне может выделяться и динамически !

в общем так - раз ты кроме слова "переменная" видеть и знать ничего не желаешь, разбирайся сам и пляши от OpenProcess(), VirtualQueryEx(), VirtualProtectEx(), AdustTokenPrivelegies(), ReadProcessMemory(), WriteProcessMemory()


 
Miralex   (2003-08-27 16:11) [21]


> Digitman


ну а как мне устроить поиск значения по всем местам где может быть ето значение в памяти программы?

Есть какойто готовый модуль типа как в АртМоней?


 
Digitman   (2003-08-27 16:35) [22]

перебирай регионы циклическими вызовами VirtualQueryEx(), считывай существующие регионы вызовами ReadProcessMemory() и сканируй прочитанную копию в своем адресном пр-ве как тебе уже вздумается


 
Miralex   (2003-08-28 10:06) [23]

Если честно - ничего не понял!
Обьясните пожалуйста поподробнее!
Ктото может кинуть готовый код чтоб я разобрался?


 
denny   (2003-08-28 14:03) [24]

Вобще судя по всему ты очен зеленый новичек (не обижайся но это видно по рассуждению о переменных и их способам хранения), а эта задача очень сложная даже для хорошего профи!!! Так что не думаю, что если АртМани не справляется то код написанный табой справится.
Не трать время на собственный код, лучше попробуй с другого "входа". Поищи готовые программы. Но это лучше делать в других форумах


 
Jeer   (2003-08-28 14:34) [25]

Мда..
Готовое бывает только у мамми на кухне.


 
Digitman   (2003-08-28 14:38) [26]


> Miralex


> Если честно - ничего не понял


что конкретно не понял ? ты разбирался вообще с назначением упомянутых ф-ций и назначением их параметров/результатов ?


> Обьясните пожалуйста поподробнее


Задавай предметный вопрос - объясним.


> кинуть готовый код чтоб я разобрался


в чем конкретно ? в последовательности вызовов тех или иных ф-ций ? а смысл ? если тебе в принципе не понятно пока применение той или иной ? ведь лавину вопросов вызовет любой такой "пример" !


 
Miralex   (2003-08-28 15:48) [27]

С применение тех функций вроде чуток разобрался! Но так и не понял как с помошью них например найти мне область данных в памяти нужной программы?

Если кто может напишите мне кусок кода где бы по хендлу находились в памяти и грузились во "что-то" данные нужной программы!


 
Digitman   (2003-08-28 16:05) [28]


> Но так и не понял


значит ты не понял, что делает ReadProcessMemory()
она - ключевая среди прочих указанных.
вникни в назначение этой ф-ции ! она скопирует из чужого ВАП в твое ВАП любой доступный участок памяти чужого процесса, после чего в копии можно любым удобным способом искать все что тебе вздумается и как вздумается


 
Miralex   (2003-08-29 10:45) [29]

Вот по функции ReadProcessMemory() у меня и есть пару вопросов:

ReadProcessMemory(hProcess,lpBaseAddress,lpBuffer,nSize,lpNumberOfByte sRead);

Значит начинаем подробно:
hProcess - хендл
lpBaseAddress - начальный адресс
lpBuffer - буфер куда будем загонять данные!
nSize количество копируемых байтиков
lpNumberOfBytesRead - не понял для чего!

А теперь вопросы:
lpBaseAddress - откуда он береться? как узнать начальный адресс где программа хранит данные? и как узнать ее конечный адресс?
lpBuffer - как с ним работать?
lpNumberOfBytesRead - что ето такое?

Мне надо будет копировать все данные и обрабатывать!
Как их правильно копировать в буфер? все сразу или по кускам размером например в 2 байта?


 
Тутошний Начальник   (2003-08-29 11:09) [30]


> nSize количество копируемых байтиков
> lpNumberOfBytesRead - не понял для чего!


параметром nSize ты указываешь, сколько байт начиная с адреса lpBaseAddress ты желал бы прочитать

параметром lpNumberOfBytesRead ты указываешь системе адрес переменной типа Integer в своей программе, куда ф-ция ReadProcessMemory() в ходе своей работы вернет число байт, реально прочитанных начиная с указанного тобой адреса

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


> lpBaseAddress - откуда он береться?


берется он из результата работы вызываемой перед этим ф-ции VirtualQueryEx().


> как узнать начальный адресс где программа хранит данные?
> и как узнать ее конечный адресс?


опять же - см. ф-цию VirtualQueryEx(). Она вернет параметры региона, в диапазон которого входит переданный ей параметром адрес : базовый адрес региона, размер региона, число страниц в регионе, статус региона и пр.

получая эти результаты циклическим вызовом VirtualQueryEx() (первый вызов - с параметром lpAddress = nil, тот же параметр для последующих вызовов ф-ции зависит от результата предыдущих, т.е. вычисляемый на базе ранее полученного адреса, размера и статуса региона) , ты как раз и имеешь базовый адрес и размер области памяти, отведенный под регион. То что имеешь, как раз и передаешь следом в ф-цию ReadProcessMemory() параметрами.

каждый следующий запрашиваемый в цикле регион имеет баз.адрес, равный баз.адресу предыд. региона + размер предыд.региона


> lpBuffer - как с ним работать?


у себя в приложении следует выделить память, размер которой больше или равен размеру того региона, который собираешься считывать. Указатель на этот блок памяти ты передаешь параметром lpBuffer. В эту память ф-ция ReadProcessMemory() скопирует содержание региона, который ты задаешь параметрами баз.адрес + размер


 
Digitman   (2003-08-29 11:12) [31]


> Тутошний Начальник


эк загнул !)


 
Miralex   (2003-08-29 13:29) [32]


> базовый адрес региона, размер региона, число страниц в регионе,
> статус региона и пр

куда мне она ето вернет?

что кроме хендла ей задавать надо и что она после выполнения (и куда) возвращает?

Люди хватит мучать меня!
Кто может - напишите мне пожалуйста код, который будет читать все с памяти и разбирать например по 2 байта!..


 
Polevi   (2003-08-29 14:07) [33]

вот и объясняй после этого.. разжевали все.. и в итоге ДАЙТЕ КОД !
>Miralex
не готов ты еще программировать на таком уровне, возьмись за задачу попроще


 
Digitman   (2003-08-29 14:37) [34]


> Miralex


> куда мне она ето вернет?
>
> что кроме хендла ей задавать надо и что она после выполнения
> (и куда) возвращает?


ты читать умеешь вообще-то ?)

черным же по белому написано в хэлпе :

Parameters

hProcess

Identifies the process whose memory information is queried. The handle must have PROCESS_QUERY_INFORMATION access.

lpAddress

Points to the base address of the region of pages to be queried. This value is rounded down to the next page boundary. To determine the size of a page on the host computer, use the GetSystemInfo function.

lpBuffer

Points to a MEMORY_BASIC_INFORMATION structure in which information about the specified page range is returned.

dwLength

Specifies the size, in bytes, of the buffer pointed to by the lpBuffer parameter.


 
Digitman   (2003-08-29 14:43) [35]


> Люди хватит мучать меня!


бедняжка !) прямо таки и замучили тебя !)


> напишите мне пожалуйста код


и что ты с ним делать будешь, с кодом ? встретишь там тот же VirtualQueryEx() и будешь лупиться на него как баран на новые ворота, что там за параметры/результаты да зачем да почему ?) И снова засыпать вопросами ? Так на те же самые вопросы ты и сейчас ответ уже получаешь !!


 
Miralex   (2003-08-29 14:43) [36]


> Polevi © (29.08.03 14:07) [33]
> вот и объясняй после этого.. разжевали все.. и в итоге ДАЙТЕ
> КОД !
> >Miralex
> не готов ты еще программировать на таком уровне, возьмись
> за задачу попроще


С задачами попроще вроде тяжелых проблем не возникало!

А вот с памятью никогда не работал! (програмно),..
Организацию памяти я знаю!,..

А насчет неготов: если ничего не пробовать то ничего и не будешь уметь!


 
Digitman   (2003-08-29 14:46) [37]


> Организацию памяти я знаю


какой памяти ? конкретно ?


 
Miralex   (2003-08-29 15:00) [38]


> какой памяти ? конкретно ?

памяти программ!
Точнее сказать как винда выделяет память для программ!


 
Digitman   (2003-08-29 15:09) [39]

в таком случае ты должен четко представлять себе , что есть "виртуальное адресное пространство процесса" (ВАП)

ты должен понимать, что ВАП любого процесса делится на страницы
ты должен понимать, что регион - это группа смежных страниц, имеющих один и тот же статус

ты должен понимать, что непосредственный доступ к "чужому" ВАП из своего ВАП на 3-м уровне привелегий не возможен, и для осуществления этого (в определенных ограниченных пределах) ядро Win32 предоставляет некий механизм в виде набора только что упомянутых ф-ций

что ж тогда вопросы-то задаешь, коль понимаешь все это ?


 
Miralex   (2003-08-29 15:15) [40]

Про ВАП мне как раз все понятно!
Но как програмно реализовать ету мысль!..
Вот над етим я ломаю голову! (((



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.025 c
3-8288
mod
2003-10-11 15:47
2003.11.03
BDE


1-8402
Марат
2003-10-22 15:46
2003.11.03
Amoeba


1-8411
onix
2003-10-22 13:15
2003.11.03
Составить оптимальный запрос


8-8554
Илья
2003-07-03 12:49
2003.11.03
Работа со звуком.


1-8457
Анна
2003-10-24 12:59
2003.11.03
Скроллинг в Delphi 7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский