Сейчас на форуме: Lohmaty (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Методика нахождения нужного участка кода
Посл.ответ Сообщение

Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

Создано: 15 ноября 2018 16:31
· Личное сообщение · #1

Доброго времени суток.
Подскажите пожалуйста какую-нибудь методику нахождения нужного участка кода в программе. Допустим, мне нужно найти в обычном калькуляторе функцию, которая X возводит в степень Y (X^Y). По логике, мы пишем в память одно число, затем нажимаем кнопку этой самой функции (X^Y), затем второе число и знак равно. Тут, вроде бы, нужно найти участок памяти и на него поставить бряк. В общих чертах, вроде, все понятно, а вот как конкретно это сделать и главное какими инструментами(программами) пользоваться? А то может я, по неопытности, на какую-нибудь задачу тысячелетия замахнулся ?




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 15 ноября 2018 16:54
· Личное сообщение · #2

Студент?

Задача теоретическая или практическая?

Если практическая и есть кнопки, то исследуй оконную функцию.

-----
EnJoy!




Ранг: 3.2 (гость), 1thx
Активность: 0.020
Статус: Участник

Создано: 15 ноября 2018 17:30
· Личное сообщение · #3

вроде как через дизассемблер это делается



Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

Создано: 15 ноября 2018 17:43
· Личное сообщение · #4

Jupiter пишет: Если практическая и есть кнопки, то исследуй оконную функцию.
Jupiter, я, конечно, извиняюсь за своё дилетантство, но если можно чуть подробнее. Калькулятор, если что - обычный виндовский и мышкой на кнопки понажимать - возможность есть . В оконной функции, вроде бы, события нужно перехватывать? Ну т.е. как мне выйти на нужную функцию и главное с помощью каких программ. С вашим-то опытом понятно, что все это просто, а вот для нас пока это темный лес.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 15 ноября 2018 18:26
· Личное сообщение · #5

Я бы начал с вывода результата на экран, перед ним число должно преобразовываться в строку, а еще перед этим вычисляться. Другое дело, что число может быть объектом и вычисляться одним из методов объекта. Любители писать калькуляторы редко опускаются до собственной реализации даже умножения.

-----
2 оттенка серого




Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

Создано: 15 ноября 2018 19:21
· Личное сообщение · #6

f13nd, спасибо за отклик. Как я начинаю понимать, что задачка-то вроде и не очень простая. Получается, что нужную функцию можно вычислить только с помощью долгого и вдумчивого реверсинга. А вот чтобы вычислить нужный участок памяти и потом вычислить какая функция к этому участку обращалась - так, видимо, не получится. Я правильно делаю вывод или нет?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 ноября 2018 19:28
· Личное сообщение · #7

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




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 15 ноября 2018 19:35
· Личное сообщение · #8

dma пишет:
вот чтобы вычислить нужный участок памяти и потом вычислить какая функция к этому участку обращалась - так, видимо, не получится

Ну есть брейкпоинты на память как выше написано, 4 аппаратных и сколько хочешь на исключениях, есть трассировка. Все это можно. Но это уже тактические приемы, я только стратегию описал.

-----
2 оттенка серого




Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

Создано: 15 ноября 2018 20:05
· Личное сообщение · #9

Ну если сам reversecode к моему вопросу подключился - то значит у меня появился шанс на какую-нибудь зацепку.

reversecode пишет:
если вы знаете адрес памяти

reversecode, в том-то и дело, что не знаю. Запускаю калькулятор, набираю на нем число 12345678, потом нажимаю функцию (X^Y) и в WinDbg поиском по памяти пытаюсь найти участок с данными 12345678. Но ничего не находится, а у WinDbg, вроде, поиск хорошо всегда работал.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 ноября 2018 20:18
· Личное сообщение · #10

когда я вижу трижды в одном сообщении мой ник, мне становится не по себе

в исследованиях отталкиваются от входных данных, выходных или полный разбор
или выборочный разбор на основе опыта




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 15 ноября 2018 22:19
· Личное сообщение · #11

dma пишет:
поиском по памяти пытаюсь найти участок с данными 12345678

Поставил бы лучше бряк на SetWindowTextW/SetWindowTextA

-----
2 оттенка серого




Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

Создано: 16 ноября 2018 15:49
· Личное сообщение · #12

f13nd пишет:
Поставил бы лучше бряк на SetWindowTextW/SetWindowTextA

Ставил - не срабатывает.



Ранг: 102.0 (ветеран), 18thx
Активность: 0.070.02
Статус: Участник

Создано: 16 ноября 2018 17:23
· Личное сообщение · #13

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



Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 16 ноября 2018 20:58 · Поправил: Модератор
· Личное сообщение · #14

ksol
это своё дрочево можешь себе засунуть в свою черную дыру.

dma
качаешь какойнибудь cheatengine, медитируешь над справкой и легко и непринужденно находишь ответ

От модератора: Отдохни денёк




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 17 ноября 2018 03:52 · Поправил: difexacaw
· Личное сообщение · #15

dma

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

Добавлено спустя 9 минут
> В программе имеется место, селектор, где распознаётся такой идентификатор и происходит переключение работы программы на подпрограмму обработки

Брр.. у вас там в голове полный хаос. Селектор понятие системное, не следует его использовать не в уместных местах. Про переключения - это устроено куда проще, чем вы себе представляете. Любое событие гуя приводит к доставке нотификации, вызывается юзер колбек из ядра. Таких событий огромное множество и чем ниже уровень(по стеку), тем их больше. Фактически есть ядерный механизм обратного вызова, он общий для любых событий гуя. На юзер стороне пройдя этот путь поток выберет что делать дальше, это реализуют юзер либы(user32.dll etc).

-----
vx




Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 17 ноября 2018 08:56
· Личное сообщение · #16

Ну, Jupiter об этом и написал, только менее витиевато.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 17 ноября 2018 10:20
· Личное сообщение · #17

dosprog

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

-----
vx




Ранг: -12.6 (нарушитель), 11thx
Активность: 0.050.03
Статус: Участник

Создано: 17 ноября 2018 13:51
· Личное сообщение · #18

dosprog пишет:
Ну, Jupiter об этом и написал, только менее витиевато.

dosprog, не знаю, что вы имели в виду под понятием "об этом", но на мой взгляд - элементарная отписка. Поймите меня правильно, я ни к кому не хочу предъявлять претензий. Сайт ведь дело сугубо добровольное - хочу отвечу кому-то, хочу не отвечу. Разве что Jupiter'а должность модератора обязывает, да и то, по-моему, не особо сильно. И всегда поражает количество ненужных ответов, почти во всех без исключения ветках. Ну не нравится тебе мой вопрос - проигнорируй его, делов-то. Почти на всех форумах уже достали эти дежурные штампы-ответы: "а вас что в гугле забанили?" Ответ Jupiter'а - тоже, по-моему, из этой же серии. Студент? Ну исследуй тогда оконную функцию. То, что дело в оконной функции - это и любому школьнику понятно, если он заинтересовался этой темой. Вопрос-то был про конкретный порядок действий, чтобы получить нужный мне результат и какими инструментами при этом пользоваться.

difexacaw пишет:
Не достаточная формулировка задачи.

difexacaw, вы только на меня не обижайтесь, а то я так весь форум против себя настрою. Вот сколько читаю ваши сообщения, то чаще всего в них присутствуют такие фразы: "не достаточная формулировка задачи", "тех. задание составлено неверно". Ну попробую сформулировать еще раз.
Пытаюсь приобщиться к реверсингу и в качестве тренировки выбрал простое приложение, которое есть у каждого на компьютере - обычный калькулятор. Хочу попытаться (подчеркиваю - попытаться) вычислить участок кода с нужной мне функцией. Ну например X возвести в степень Y, кнопка (X^Y), хотя не принципиально - можно выбрать любую функцию. Я предполагаю, что можно сделать так: набрать любое число (например 12345678), найти это число в памяти, поставить на этот участок памяти брейк поинт, затем нажать кнопку функции (X^Y). После этого ввести второе любое число и тоже поставить брейк поинт на этот участок памяти. После этого нажать кнопку равно и после этого выяснить какая функция (или участок кода) обращались к этим двум участкам памяти. А вот реально ли это на практике осуществить - я, честно говоря, не уверен. Поэтому и пришел на форум за советом. Дело в том, что если бы просто напрямую из кода было бы обращение к памяти, а то ведь оно идет через кнопку, через обработчики событий. Вот я и не могу сообразить с какой стороны и как, к этому делу подступиться. А полностью реверсить весь код калькулятора - я думаю, овчинка выделки не стоит.

| Сообщение посчитали полезным: reversecode


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 17 ноября 2018 14:03
· Личное сообщение · #19

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

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




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 17 ноября 2018 14:13
· Личное сообщение · #20

dma пишет:
на мой взгляд - элементарная отписка

Заметь, я задал конкретные вопросы, но ни на один из них не получил ответа.

В твоём первом комментарии после моих вопросов ты делаешь вид, что вообще не заметил вопросов.

В зависимости от данных тобой ответов, я мог бы дать конкретные советы.
Но ты посчитал, что мой ответ - "элементарная отписка" и не удосужился ответить.


dma пишет:
должность модератора обязывает

Должность модератора не обязывает меня отвечать на твои или чьи-либо другие вопросы.


dma пишет:
всегда поражает количество ненужных ответов, почти во всех без исключения ветках

Ненужных тебе? Ты же ведь, как оказалось, не в состоянии отличить "нужный" ответ от "ненужного".


dma пишет:
Почти на всех форумах уже достали эти дежурные штампы-ответы: "а вас что в гугле забанили?" Ответ Jupiter'а - тоже, по-моему, из этой же серии

У тебя, видимо, комплекс "обиженки", раз ты везде такие ответы видишь.
И ты даже не смог понять, что я в первом же комментарии дал тебе ответ по существу.
То, что ты считаешь выше своего достоинства отвечать на поставленные вопросы - твоя проблема, а не проблема участников форума.


dma пишет:
Студент? Ну исследуй тогда оконную функцию

Да у тебя ещё и с логикой проблемы, как я вижу.
"После - не значит вследствие".
То, что совет про оконную функцию идёт после вопроса, это не означает, что подразумевается "тогда" между вопросами и советами. Ведь предыдущий вопрос про то, практическая или теоретическая задача, а ты почему-то (больная тема) связываешь с вопросом, не студент ли ты. Если бы ты сказал, что ты студент или учишься, то процесс бы пошёл гораздо легче. В этом нет ничего постыдного (для того, кто реально учится).

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


dma пишет:
То, что дело в оконной функции - это и любому школьнику понятно

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


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

Возможно, что это тебе так показалось, что ты об этом спросил. Но ты спросил про "какую-нибудь методику". И получил ответ про необходимость исследования оконной функции.
В следующем комментарии тебе порекомендовали использовать дизассемблер.
В случае с адекватным интересующимся, следовало бы ожидать в следующих твоих комментариев хотя бы какие-то попытки исследования твоей программы-калькулятора в дизассемблере с последующими уточняющими вопросами. Но ничего такого не последовало. Тебе было мало, тебе нужно, видимо, чтобы тебе всё разжевали по шагам. И это при том, что на данном сайте огромный раздел со статьями, в которых такие и подобные им вопросы многократно разобраны. По сути, анализ работы с кнопками в keygenme мало отличается от анализа работы кнопок в калькуляторе.
При этом ты всё время пишешь очень абстрактно, даже не уточняя, какой именно калькулятор из какой именно версии операционной системы ты пытаешься исследовать. Или это не штатный калькулятор из состава Windows, а программа другого разработчика. И если калькулятор написан на .NET - это одна история, а если на C/C++, то совсем другая. От тебя же никакой конкретики, лишь общие рассуждения.


Вот твой вопрос:
Подскажите пожалуйста какую-нибудь методику нахождения нужного участка кода в программе. Допустим, мне нужно найти в обычном калькуляторе функцию, которая X возводит в степень Y (X^Y). По логике, мы пишем в память одно число, затем нажимаем кнопку этой самой функции (X^Y), затем второе число и знак равно. Тут, вроде бы, нужно найти участок памяти и на него поставить бряк. В общих чертах, вроде, все понятно, а вот как конкретно это сделать и главное какими инструментами(программами) пользоваться? А то может я, по неопытности, на какую-нибудь задачу тысячелетия замахнулся ?

Даже по терминологии, которую ты используешь, понятно, что ты пока на самом раннем пути исследователя программ. Но задать вопрос недостаточно - нужно ещё и желание работать с ответом. Чего у тебя пока что не наблюдается.


dma пишет:
Пытаюсь приобщиться к реверсингу и в качестве тренировки выбрал простое приложение, которое есть у каждого на компьютере - обычный калькулятор

Так возьми тогда обучающие материалы и пройди путь по ним.
А то ты вместо того, чтобы потратить несколько часов на разбор простого туториала по шагам, приходишь на форум без каких-либо начальных действий.
Самостоятельной работы никакой.


dma пишет:
Вот я и не могу сообразить с какой стороны и как, к этому делу подступиться

С любой, лишь бы ты дело делал.
Пока видно, что больше любишь "порассуждать как оно могло бы быть", вместо того, чтобы заниматься практикой. Именно поэтому я тебя в первом же комментарии спросил, практическая ли это для тебя задача или теоретическая. И обрати внимание, что за сутки единственное, что ты смог сделать, это поставить бряк (но и тот у тебя не сработал): Ставил - не срабатывает.



dma пишет:
Поэтому и пришел на форум за советом


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

Статьи:
--> СТАТЬИ ПО ИССЛЕДОВАНИЮ ПРОГРАММ. Новичку рекомендуется <--

Курс Рикардо Нарвахи (Ricardo Narvaja) в переводе Яшечки по дизассемблеру IDA:
--> Введение в реверсинг с нуля используя IDA PRO. Часть 1 <--
--> Введение в реверсинг с нуля, используя IDA PRO (ссылки на все выпуски) <--

-----
EnJoy!


| Сообщение посчитали полезным: CKAP
 eXeL@B —› Вопросы новичков —› Методика нахождения нужного участка кода
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати