LINUX.ORG.RU
ФорумTalks

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

 ,


2

4

Только начал изучать тему исследования программ - хочется детально разобраться как работают многие опен соурс проги, например: bash, vim, tmux, php, ядро Linux, сокеты, emacs, драйвера и т.д. Хочется обмениваться опытом и инструментами исследования. Одному тут не справиться, слишком большой объём работы. Есть ли кому это тоже интересно?

Update: добавлю несколько ссылок, чтобы было понятнее что я имею в виду:
* linux-inside - a series of posts about the linux kernel and its insides.
* Доки ядра Linux
* Статический анализ
* Reverse Engineering for Beginners



Последнее исправление: ProtoH (всего исправлений: 4)

Ну на это же все есть исходный код. Где здесь reverse engineering? Код есть — читай, разбирайся

sehellion ★★★★★
()
Ответ на: комментарий от ProtoH

Или вариант проще: качаешь исходники, читаешь, понимаешь что он делает во всех деталях.

drull ★☆☆☆
()
Ответ на: комментарий от drull

strace это один из инструментов. Пробовали делать для Chromium?

ProtoH
() автор топика

Для начала достаточно знать язык программирования C и иметь редактор с ctags или другим способом навигации по коду.

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

Deleted
()

Вы вообще отдаете себе отчет, что:

1) тысячи людей только и заняты тем, что «исследуют программы», и получают за это деньги

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

Ну а статический анализ - это уже высшие сферы...

Deleted
()

Иди уроки учи, школьник. ЕГЭ не за горами.

Sociopsih ★☆
()
Ответ на: комментарий от ProtoH

есть процесс, хочешь знать что он делает во всех деталях.

не хочу, после первого же погружение в индусокод - не хочу, а надо

Deleted
()
Ответ на: комментарий от Deleted

Да, С я начал изучать, вернее восстанавливать, небольшие начальные знания. ctags как инструмент может сгодиться. Я бы ещё рассматривал что-то вроде LLVM. Есть курс от Стенфорда по компиляторам от Alex Aiken на курсере, может помочь в освоении. Но я бы хотел именно найти тех кому это тоже интересно.

Обновил первое сообщение, добавил разъясняющих ссылок.

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

ProtoH
() автор топика
Ответ на: комментарий от Deleted

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

Согласен. Мысль об авторах интересна.

ProtoH
() автор топика

Ты как-то не с той стороны зашёл к изучению. Люди начинают сами писать программы, смотреть другие, учиться у них, но уж не изучать все подряд. Досконально разобраться хотя бы с одним проектом... для чего? Только на один проект у тебя уйдёт не день и даже не месяц. Это может занять год-два. Но какая цель? Вот эти вопросом задайся.

Deleted
()
Ответ на: комментарий от Deleted

Люди начинают сами писать программы, смотреть другие, учиться у них, но уж не изучать все подряд.

ТС, послушай вот этого умного человека. И в компьютерах, и в жизни - всегда так. Надо уметь учиться у других.

М.В.Ломоносов говорил: из ничего не может возникнуть что-либо, так и с мыслями. Человеческий мозг, предоставленный сам себе, рано или поздно начнёт ходить «кругами» в любой аналитической задаче. Чтобы был качественный рост, нужно общение, плодотворная работа над самим собой. Иначе будет лишь одностороннее развитие какого-то частного вопроса.

Я пробовал делать то, что делаешь ты. Но, опять же - dimss уже сказал, что не всё формализуется в код. Авторы знают на порядки больше, чем они заложили в исходный код.

Иногда проще создать велосипед.

И ещё - жизнь не замыкается на одних лишь компьютерах. Рискуешь обесценить свои «интеллектуальные» вложения, если будешь класть все яйца в одну корзину.

pacify ★★★★★
()
Ответ на: комментарий от Deleted

Ты как-то не с той стороны зашёл к изучению. Люди начинают сами писать программы, смотреть другие, учиться у них, но уж не изучать все подряд. Досконально разобраться хотя бы с одним проектом... для чего? Только на один проект у тебя уйдёт не день и даже не месяц. Это может занять год-два. Но какая цель? Вот эти вопросом задайся.

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

ProtoH
() автор топика
Ответ на: комментарий от pacify

Ок, пост этот очень в тему, он проницательный ;) Кстати, сегодня вырубили Инет, я задумался о своих вложениях..., что будет если хотя бы Инета не будет, а если компа? электричества?

ProtoH
() автор топика

Одному тут не справиться, слишком большой объём работы

Одному быстрее, так получив знания, надо их ещё уметь принять-передать. А это далеко не тривиальная задача.

i-rinat ★★★★★
()
Ответ на: комментарий от ProtoH

Кстати, сегодня вырубили Инет, я задумался о своих вложениях..., что будет если хотя бы Инета не будет, а если компа?

Серьёзнее вопрос: если здоровья не будет, к чему все эти генты и линаксы? Не всё замыкается на кодинге. Серебряной пули не существует. У каждого своя «метода» жизни, если «торкает» от анализа кода - займись этим.

pacify ★★★★★
()
Ответ на: комментарий от pacify

Мудрые вещи вы вообще говорите, редко встретишь такое.

ProtoH
() автор топика

На hackaday пролетали призенташки с инструментами в том числе и визуализации кода.

Также есть http://www.radare.org/r/ и даже к нему мне давали ссылки на уроки и даже здесь на форуме.

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

Вообще у меня где то всяко в загашнике было... может даже в избранных темах валяется.

DR_SL ★★★★★
()
Ответ на: комментарий от DR_SL

Микроконтроллеры это тоже интересная и обширная тема, мозги роботов как приложение.

ProtoH
() автор топика
Ответ на: комментарий от CaptainFarrell

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

ProtoH
() автор топика
Ответ на: комментарий от Deleted

Но какая цель? Вот эти вопросом задайся.

Я с ним в привате пообщался, и в одном из двух взаимоисключающих параграфов он прямым текстом заявил, что «нет времени объяснять, делать надо», а потом прислал такой список вопросов про Bash («1. Имя исследуемой программы» и т.д.), как будто... прям даже не знаю что как будто!!

По-моему, цели нет, просто человек зачем-то решил слишком формально структурировать своё познание мира. Сам себе книжка с главами.

greatperson
()
Ответ на: комментарий от greatperson

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

ProtoH
() автор топика

А мне вот вообще интересно было бы «исследовать программы» с эдакой журналистской целью: раскапывать ответы на разные вопросы, которые вы давно хотели, но стеснялись спросить. Показать всё, что скрыто! Поузнавать историю известных «не багов, а фич», рассказать о структуре кода известных проектов понятным языком.

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

greatperson
()
Ответ на: комментарий от ProtoH

Ну я и не стал публично приводить две конкретные цитаты, показывающие взаимоисключительность двух писем. :)

И вопрос про цель остался неотвеченным – что в этой теме, что в переписке. Так долго неотвеченным, что кажется, что цели нет – об этом я и согласился с комментатором выше, вот и всё.

Обидеть не хотел, удачи, если цель видишь. Но и участвовать не хотел тоже, если цели не вижу я.

greatperson
()
Последнее исправление: greatperson (всего исправлений: 1)
Ответ на: комментарий от greatperson

Цель - ещё раз процитирую из первого поста: «детально разобраться как работают многие опен соурс проги, например: bash, vim, tmux, php, ядро Linux, сокеты, emacs, драйвера и т.д. Хочется обмениваться опытом и инструментами исследования».

Более детально - изучаем, получаем инструменты, делаем деньги вместе.

ProtoH
() автор топика
Ответ на: комментарий от ProtoH

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

greatperson
()
Ответ на: комментарий от greatperson

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

ProtoH
() автор топика

Привет. У меня тут образовалась одна задачка по обратной разработке бинарной программы. Надо выяснить, при каких внешних условиях она вываливается с определённой ошибкой. Детали подкинуть?

i-rinat ★★★★★
()
Ответ на: комментарий от ProtoH

Подкиньте.

Бинарник — libpepflashplayer.so из состава Chrome. Нужно выяснить, что заставляет его выплёвывать на консоль

[ERROR:flash/platform/pepper/common/pep_process.cpp(19)] CHECK(g_process_type == PROCESS_TYPE_UNKNOWN) failed

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ну давайте пробовать решить задачку. Как я написал «только начал изучать тему исследования программ», поэтому знающие думаю помогут или поправят.

Я пока могу сказать, что libpepflashplayer.so - динамическая библиотека, проприетарная. Chrome многопоточный, исходников нет, отлаживать как такое у меня пока нет инфы. Могу только предположить, что можно как-то подключиться к процессу. Возможно, кто профессионально программирует на C или C++ вам бы сказали сразу по сообщению об ошибке возможную проблему.

Насчёт финансирования - не понял.

ProtoH
() автор топика
Ответ на: комментарий от ProtoH

как-то подключиться к процессу

Я же писал — обратная разработка. Отладка тут никак не поможет, так как проблема воспроизводится не на всякой системе. Нужно частично разобраться в том, как работает программа. Без доступа к исходным кодам.

Задача должна быть сложной, иначе ничему не научишься. :-)

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Для того, чтобы начать, нужна среда где эта проблема будет воспроизводиться. Если вы действительно хотите разобраться, можно сделать виртуальную машину и попытаться воспроизвести проблему там. Когда она будет устойчиво воспроизводиться, можно начать отлаживать. Я думаю вы это и так знаете, так ведь?

ProtoH
() автор топика
Ответ на: комментарий от ProtoH

Конечно, я это знаю. Проблема в том, что на доступных системах не воспроизводится, но воспроизводится у случайных людей в интернете. Поэтому предлагаемым методом и была обратная разработка, reverse engineering.

Я вижу, тебе этот пример не очень-то и интересен, несмотря на объявленную тему.

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

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Соглашусь частично. Мне интересны методы реверса. Твоя проблема демонстрирует общую проблему: есть закрытые исходники, огромная база проприетарного кода и процессы делающие неизвестно что и отсутствуют инструменты и знания как работать с этим. Есть другая проблема - открытые исходники и опять огромная база кода.

ProtoH
() автор топика

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

mystery ★★
()
Ответ на: комментарий от urxvt

мужики... :) Интересны из этого Nginx, Bash, LLVM. Пока первой прогой для изучения был выбран Bash.

ProtoH
() автор топика
Ответ на: комментарий от i-rinat

А бывает нахожу на гитхабе какую-нибудь программу, компиляю и что-то в коде меняю, например локализирую или что-нибудь другое

mystery ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.