ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > Реверсинг
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Узнать адрес, в котором всегда лежит данное значение
  #1  
Старый 10.07.2009, 13:14
Derec
Новичок
Регистрация: 09.11.2007
Сообщений: 24
Провел на форуме:
60954

Репутация: 3
По умолчанию Узнать адрес, в котором всегда лежит данное значение

Полагаю, что лучше было все-таки задать этот вопрос тут..

Уважаемые форумчане, помогите в разрешении одного вопроса. Мне требуется взаимодействовать с интерфейсом программы через другую. То есть считывать/записывать данные из памяти по какому-нибудь адрессу, выделенному под программу-цель.
Более подробнее:

некоторое значение Х , находящееся в программе лежит по следующим адресам:

01384D68 - целочисленное значение (4 байта)
0142С4D0 - его тектовое значение

Подскажите как мне узнать эти адресса через свою программу? После некоторых попыток я выяснил, что одни из адрессов, например, 0142С4D0, сохраняется. То есть это значение всегда находится по этому адресу, а вот допустим его целочисленное значение уже лежит по другому адресу...

Объясните новичку пожалуйста! Заранее буду очень благодарен
 
Ответить с цитированием

  #2  
Старый 10.07.2009, 14:40
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


Отправить сообщение для spider-intruder с помощью ICQ
По умолчанию

Программа большая?! Давай посмотрю.
 
Ответить с цитированием

  #3  
Старый 10.07.2009, 15:48
[n]-c0der
Участник форума
Регистрация: 03.02.2009
Сообщений: 104
Провел на форуме:
270228

Репутация: 70
По умолчанию

01374D18 вот он этот адрес! - я угадал?, нет? какая досада(((...
Хм почему я назвал этот адрес? ну так мне подсказали мои телепатические способности, и как оказалось у меня хуевый дар... что ж простите, за оффтоп в оффтопе...
ТС, а больше инфы выложить религия не позволяет?
 
Ответить с цитированием

  #4  
Старый 10.07.2009, 17:24
Derec
Новичок
Регистрация: 09.11.2007
Сообщений: 24
Провел на форуме:
60954

Репутация: 3
По умолчанию

Цитата:
Сообщение от spider-intruder  
Программа большая?! Давай посмотрю.
Исходников программы пока не имеется, они и не к чему для ответа на вопрос Spider, потому что мне не важна практическая реализация, я хотел чтобы кто-нибуль смог бы объяснить это теоретически..


Цитата:
Сообщение от [n]-c0der  
01374D18 вот он этот адрес! - я угадал?, нет? какая досада(((...
Хм почему я назвал этот адрес? ну так мне подсказали мои телепатические способности, и как оказалось у меня хуевый дар... что ж простите, за оффтоп в оффтопе...
ТС, а больше инфы выложить религия не позволяет?
Неудачная шутка...Потрудитесь обращаться без сарказма!


Суть вопроса ведь не в том, чтобы вы мне подсказали нужный адрес! Я спросил, как можно его вычислить? Есть же по-моему так называемый базовый адрес, от которого все считается? И можно ли вообще при каждом новом запуске приложения отыскать нужное значение в выделяемой под нее памяти?! Может быть я говорю сложно и не понятно?! Хотя я думаю , что на этом форуме присутствуют люди, которые точно в этом разбираются, просто предпочитают промолчать почему то

Тогда так, более примитивно:

Запускаю программу, с помощью перехвата ее процесса узнаю ее адрес (видимо это какой-то "базовый"?) И потом начинаю сканировать области памяти на присутствие конкретного значения Х. То как мы все это пробовали делать с помощью ArtMoney. Но при этом, чтобы определить адресс точно, из множества значени мы отсеиваем, чтобы получить одно! Вопрос мой был в следующем: Как определить без этого отсеивания адрес, данного значения? Как-то отталкивая от "базового" на какую то константу? (Скажем на 200 мб?)...

Последний раз редактировалось Derec; 10.07.2009 в 17:26..
 
Ответить с цитированием

  #5  
Старый 11.07.2009, 00:50
Balvan
Познающий
Регистрация: 11.03.2009
Сообщений: 70
Провел на форуме:
251358

Репутация: 6
По умолчанию

Просто почитайте про PE формат и вопросы сами по себе отпадут вместе с желанием ))))))

по теме: ImageBase+Offset, если я вас правильно понимаю.

Последний раз редактировалось Balvan; 11.07.2009 в 01:37..
 
Ответить с цитированием

  #6  
Старый 11.07.2009, 02:54
h3rmit
Новичок
Регистрация: 09.06.2009
Сообщений: 13
Провел на форуме:
35540

Репутация: 5
По умолчанию

2Derec

Тааак. Нет млин просто переменной. Какая она, локальная, глобальная, может память для неё в куче динамически выделяется? От этого будет зависеть, как ты будешь из другого процесса её смотреть. Общего алгоритма нет, тк от типа (тип в смысле расположения в памяти, см. ранее) переменной зависит её адресация в программе. Глобальные переменные адресуюца по абсолютным смещениям и располагаются (обычно) в отдельной секции. В этом случае всё просто : OpenProcess, ReadProcessMemory(..., addrvalue, ...). НО есть нюансы. Эти абсолютные адреса валидны только если модуль загрузился по предпочитаемому адресу загрузки, указанному в IMAGE_OPTIONAL_HEADER.ImageBase. Обычно exe по нему и грузятся, но в случае с dll всё наоборот и скорее всего она загрузиццо по адресу отличному от базы образа. Если модуль загрузился по адресу отличному от базы образа, то загрузчик патчит абсолютные адреса переменных на некоторую дельту используя информацию из директории релоков (ака перемещаемых элементов, го ту спецификация на PE формат). Другими словами чтобы прочитать или записать по константному адресу, ктр ты узнал ручками до этого, в общем случае нужно 1. найти базу образа (самое первое, что пришло в голову toolhelp api) 2. разбирать заголовок исполняемого модуля и в случае если база образа не совпала с предпочитаемой -> 3. пропатчить адрес на дельту между предпочитаемой и реальной базой образа.

Если это локальная переменная, то всё несколько сложнее. Локальные переменные хранятся в стеке, а он во-первых - постоянно изменяется, во-вторых - для каждого потока свой, а в-третьих ... а вообщемто первых двух пунктов достаточно. Так что простого способа чтения извне стековых переменных нет. Тут либо трассировшик, либо внедрение своего кода.

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

------------------------------------

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

ЗЫ. Формулируй вопрос конкретней. С твоих объяснений непонятно то ли тебе нужно с интерфейсом общаться гуишным, толи прочитать переменную по некоторому адресу, толи найти в памяти некоторое значение. Два поста и три варианта млин.
И что значит...

Цитата:
... адрессу, выделенному под программу-цель.
...я так и не допер

ЗЫЫ

Цитата:
Исходников программы пока не имеется, они и не к чему для ответа на вопрос Spider, потому что мне не важна практическая реализация, я хотел чтобы кто-нибуль смог бы объяснить это теоретически..
Ыыыыы ^______^
 
Ответить с цитированием

  #7  
Старый 13.07.2009, 14:05
Derec
Новичок
Регистрация: 09.11.2007
Сообщений: 24
Провел на форуме:
60954

Репутация: 3
По умолчанию

h3rmit, огромное спасибо за разъяснения! Понял, что простого способа нет. Но в принципе я его и не ждал! Ладно, мне теперь хоть есть в каком направлении копать дальше

Еще раз спасибо!
 
Ответить с цитированием

  #8  
Старый 14.07.2009, 08:05
neprovad
Постоянный
Регистрация: 19.10.2007
Сообщений: 794
Провел на форуме:
1013791

Репутация: 711


По умолчанию

Находим адрес в artmoney или плагином к олли games invader
Ставим бряк аппаратный на доступ к этому значению, ждем срабатывания. Начинаем анализировать код обращающийся к этому значению. Согласен с тем что адрес в памяти может быть разный, но на эту память должен быть указатель, а он наверняка фиксированный (надеюсь ) Если так, то ReadProcessMemory читаем указатель. Затем вычисляем конечное положение искомого значения и манипулируем далее уже с ним.
 
Ответить с цитированием

  #9  
Старый 14.07.2009, 15:38
h3rmit
Новичок
Регистрация: 09.06.2009
Сообщений: 13
Провел на форуме:
35540

Репутация: 5
По умолчанию

2neprovad

Хыхы, ну зачем же людей расслаблять ^_____^
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогоите узнать адрес по телефону Дрэгги Болталка 0 12.11.2006 15:02
Руководство по «тонкой» настройке Firefox 2 SK | Heaton Статьи 0 09.11.2006 08:07
Отсылка Sms с помощью электронной почты novichok Сотовый фрикинг 22 07.04.2006 03:48
Нужно узнать ip адрес E-Mail 1 28.08.2003 12:07



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ