Изучение больших программ, кто чем может помочь(советы, приемы, мысли)

Тема в разделе "WASM.RESEARCH", создана пользователем Daiver, 5 сен 2007.

  1. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Есть небольшое хобби, хочу расковырять библиотеку raw конветора.
    Любопытны алгоритмы и понимание что и за чем там делается.

    Библиотечка порядка мегабайта.

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

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

    Расковырял функции которые торчат наружу из библиотеки.
    Почти все что им передается.

    Но вот что внутри творится мозг быстро заполняется непонятными вещами.

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

    Как делить все на уровни абстракции ?

    Сижу в IDA 5.0, отладчик и графический резим спасил от того чтобы застрелиться.

    Дело доброе. Разработчик практчески забыл о своем конверторе, вернее явно
    кого-то нанимал "это" писать.

    Спасибо.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Смотря что ты хочешь получить в результате.

    Если полностью расковырять библиотеку с целью перелопачивания её кода и изменения его — то проще будет перевести всё по кусочку на С/С++, попутно документируя всё, что переводишь, и дальше уже работать с портированными сорцами и документацией.

    Если хочешь просто изучить некоторые алгоритмы, то смотри только их. Опять же, перевод в С/С++, графическое представление отдельных блоков (как в IDA, только для ЯВУ) поможет пониманию алгоритмов.

    А вообще — было бы интересно собрать этакие research guidelines.
     
  3. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Есть желание переписать либу.
    Мало того что интересно, еще и полезно будет, поскольку разработчик далек от реального мира.

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

    Тут в сосденей ветке проскакивала ссылка на Hex-Rays Decompiler.
    Думаю такая штука бы позволила быстрее увидеть лес за деревьями.
     
  4. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    по долгу службы приходиться работать имеено с большими программами (ну более 1Мб), но почему-то каких-то обших рекомендаций в голову не приходит =)). А вообще обычно очень сильно помогают строковые константы т.е. достаточно часто бывает что разработчик логирует каким-то образом чутли не каждый шаг алгоритма, так же не плохо просматривать ресурсы на предмет STRING и МESSAGE TABLE + иметь тулзу которая генерит скрипт для иды, который, каким либо образом помогает понять что значит тот или иной айдишник передаваемый в LoadString или подбные функции. Кроме того в некоторых файлах есть COM typelib - что так же здорово помогает в анализе.
    BTW, очень приятно работать в этом плане с продуктами от M$ =)) - почти всегда есть pdb'шники. Даже было такое что в одна библиотека была по совместительству еще и расщирением для WinDBG с кучей функцей для дампинга внутрених структур и классов, что сильно ускорило работу.
    Вообще в любом случае стоет сначала собрать всю доступную инфу, ну например какие алгоритмы реализованы в библиотеке, какой компилятор использовался(хотя это наверно тривиально=)), какие стороние либы использовались и т.д. т.е. порой исследование стоит начинать с посешения сайта производителя и гугла а не загружая файл в иду =)
    Простите за некоторую сумбурность
     
  5. Daiver

    Daiver New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2005
    Сообщения:
    17
    Адрес:
    Россия
    Если не секрет, ориентировки по времени, ну хоть какие-нибудь, чтобы иметь представление как можно работать.

    Что делаете с очень длинной функцией ? Последовательно переписываете в код или как ?
     
  6. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    На счет времени точно сказать немогу т.к. похоже мы преследуем разные цели - у меня не стоит задача полностью реконстуировать алгоритм - обычно разобрать формат файла или структуру базы данных ну или как парсить какую-нибудь структуру. Навскидку разбор структуры базы данных + разбор структур хранящихся в базе занял около 2-х месяцев.

    С длинными функция обычно поступаюя так: определяю предназначение переменых на осново того что передаеться в библиотечные или известные мне функции, именую все метки которые отвечают за ошибки, затем еще один проход определяются предназначение большего количества переменных, именуются метки которые отвечают за тривиальные операции и так далее... =))
     
  7. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    nobodyzzz Не скажешь, что за работа такая (можно в личку) ...просто сам мечтал реверсировать проги и чтоб за это еще платили деньги)
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Rustem
    Так в .commercials время от времени пробегают предложения, твоя мечта может сбыться :)
     
  9. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    IceStudent там большинству одни трои нужны)
     
  10. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Rustem
    контора у меня самая обычная =)) просто кастомеру надо работать с закрытым форматом файлов, вот собственно и приходиться заниматься подбными вещами.
     
  11. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    nobodyzzz Спасибо
     
  12. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    На rentacoder.com редковато, но иногда всё же пробегают предложения по реверсингу.
     
  13. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ага, а если посмотреть, какие деньги они за это предлагают, становится смешно.