Есть небольшое хобби, хочу расковырять библиотеку raw конветора. Любопытны алгоритмы и понимание что и за чем там делается. Библиотечка порядка мегабайта. Хотелось бы обсудить советы, как можно упростить себе жизнь. А то сижу ковыряю, из-за обилия вызовов, кучи параметров, использования классов, шаблонов, и куууучи исключений и бессмысленных повторяющихся проверок голова кругом идет. И вся моя энергия расстовряется. Наковырял разных отладочных сообщений, и строк которыми автор инициализирует исключения. Где мог подписал функции в виртуальных таблицах. Расковырял функции которые торчат наружу из библиотеки. Почти все что им передается. Но вот что внутри творится мозг быстро заполняется непонятными вещами. Прошу помощи. Как производить анализ. Может брать один класс, и пытаться расковырять все что делают его функции ? Как делить все на уровни абстракции ? Сижу в IDA 5.0, отладчик и графический резим спасил от того чтобы застрелиться. Дело доброе. Разработчик практчески забыл о своем конверторе, вернее явно кого-то нанимал "это" писать. Спасибо.
Смотря что ты хочешь получить в результате. Если полностью расковырять библиотеку с целью перелопачивания её кода и изменения его — то проще будет перевести всё по кусочку на С/С++, попутно документируя всё, что переводишь, и дальше уже работать с портированными сорцами и документацией. Если хочешь просто изучить некоторые алгоритмы, то смотри только их. Опять же, перевод в С/С++, графическое представление отдельных блоков (как в IDA, только для ЯВУ) поможет пониманию алгоритмов. А вообще — было бы интересно собрать этакие research guidelines.
Есть желание переписать либу. Мало того что интересно, еще и полезно будет, поскольку разработчик далек от реального мира. Спасибо. Скорее так и буду продолжать делать. Просто по началу только и писал код. Потом когда начал натыкаться на фигню которую я бы выкинул первым делом, и десятки проверок, начал искать смысловвые зерна.... там и потерялся. Тут в сосденей ветке проскакивала ссылка на Hex-Rays Decompiler. Думаю такая штука бы позволила быстрее увидеть лес за деревьями.
по долгу службы приходиться работать имеено с большими программами (ну более 1Мб), но почему-то каких-то обших рекомендаций в голову не приходит =)). А вообще обычно очень сильно помогают строковые константы т.е. достаточно часто бывает что разработчик логирует каким-то образом чутли не каждый шаг алгоритма, так же не плохо просматривать ресурсы на предмет STRING и МESSAGE TABLE + иметь тулзу которая генерит скрипт для иды, который, каким либо образом помогает понять что значит тот или иной айдишник передаваемый в LoadString или подбные функции. Кроме того в некоторых файлах есть COM typelib - что так же здорово помогает в анализе. BTW, очень приятно работать в этом плане с продуктами от M$ =)) - почти всегда есть pdb'шники. Даже было такое что в одна библиотека была по совместительству еще и расщирением для WinDBG с кучей функцей для дампинга внутрених структур и классов, что сильно ускорило работу. Вообще в любом случае стоет сначала собрать всю доступную инфу, ну например какие алгоритмы реализованы в библиотеке, какой компилятор использовался(хотя это наверно тривиально=)), какие стороние либы использовались и т.д. т.е. порой исследование стоит начинать с посешения сайта производителя и гугла а не загружая файл в иду =) Простите за некоторую сумбурность
Если не секрет, ориентировки по времени, ну хоть какие-нибудь, чтобы иметь представление как можно работать. Что делаете с очень длинной функцией ? Последовательно переписываете в код или как ?
На счет времени точно сказать немогу т.к. похоже мы преследуем разные цели - у меня не стоит задача полностью реконстуировать алгоритм - обычно разобрать формат файла или структуру базы данных ну или как парсить какую-нибудь структуру. Навскидку разбор структуры базы данных + разбор структур хранящихся в базе занял около 2-х месяцев. С длинными функция обычно поступаюя так: определяю предназначение переменых на осново того что передаеться в библиотечные или известные мне функции, именую все метки которые отвечают за ошибки, затем еще один проход определяются предназначение большего количества переменных, именуются метки которые отвечают за тривиальные операции и так далее... =))
nobodyzzz Не скажешь, что за работа такая (можно в личку) ...просто сам мечтал реверсировать проги и чтоб за это еще платили деньги)
Rustem контора у меня самая обычная =)) просто кастомеру надо работать с закрытым форматом файлов, вот собственно и приходиться заниматься подбными вещами.