Каков алгоритм реверсинга?

Тема в разделе "WASM.RESEARCH", создана пользователем NeutronMass, 25 апр 2005.

  1. NeutronMass

    NeutronMass New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2005
    Сообщения:
    87
    Привет, Отцы! Извиняюсь за наивный вопрос. Но любитель я

    знаете-ли задавать вопрос в лоб. Существует ли определенный алгоритм при препарации программы с целью изучить ее от и до. Я вот что имею ввиду:

    Например:

    1)Сначала находим функцию WinMain.

    2)Затем находим процедуру обработки событий

    3)Находим все функции

    4)Определяем их(функций) функции(сдорово я это зациклил :)

    5)рисуем общюю блок схему работы программы

    Ну вобщем вы поняли. У Касперски много обЪяснений деталей

    но нет общей стратегии и логики что нужно делать для того

    чтобы понять что делает программа. Вобщем нужен понятный

    и простой алгоритм по которому любой чайник начнет реверс.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine


    Я тоже в таком нуждаюсь :) Если серьёзно, то универсального подхода просто нет. Для начала лучше реверсить что-нибудь не сложное и не объёмное, чтоб можно было разобрать каждую микроинструкцию. С опытом развивается "интуиция", которая позволяет сразу выявить наиболее интересные моменты в коде и построить в уме блок-схему. Туториалы по реверсингу тоже не мешает почитать, не только Касперски.
     
  3. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    NeutronMass

    Алгоритма по сути быть не может,т.к. каждый хитрый разработчик программы пытается как нить запутать и защитить свой код=>к каждой программе свой подход.Вот так поломаешь программ сам с сотню,"интуиция" появится и сам ответишь на свой вопрос
     
  4. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    1)Сначала находим функцию WinMain.



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



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



    Некоторые общие подходы, без сомнения, существуют. Например, если программа спрашивает что-то и проверяет, трассируют введенные данные до места их использования, жалуется на ExpiryDate - включают монитор обращений к GetLocalTime и т.п.
     
  5. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    NeutronMass

    а Касперски прав и очень!!! Крутой дядька, и знает что говорить, нет никакой конкретной и общей там стратегии, есть чутье и интуиция, собственно именно она меня всегда и выводила, иначе и быть не может. Ну, а знания как раз таки естественно должны присутсвовать, какие механизмы и как работают. А вот из этих вот кирпичиков целое то и собирается, а дальше рулит интуиция. Только простые замки ломаются обыкновенной монтировкой, на хитрые нужен мантирофка с винтом
     
  6. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    Большенстов програм сделаны, запакованы и зашифрованы стандартными средствами

    Поэтому самое важное имхо



    узнать какие стандартыные алгоритмы использовались(можно рапаковать ер. не вникая в алгоритм) и опредилить исходный язык и его фирму



    Потом все намного проще.



    Эти методом я раскуречил 3 windows microsoft С програмы

    и уже привык к microsoftу.А вот Borland это не для меня там все очень по-другому и я никогда не стану за это браться. Лучше специализироваться на чемто одном.



    В моих случаях WinMain стандартна и занимает всего 150-300 строк.







    Бог помощь если програмитсты не поленились создать свои алгоритмы
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Касательно "общей стратегии и логики", есть, как минимум, два момента (IMHO, конечно):



    1. Реверсить программу "от и до" в 99,9999% случаев не имеет смысла.

    2. Временные затраты на реверсинг программы "от и до" (имеется ввиду что-то отличное от "Hello, World!") будут сравнимы или значительно превзойдут временные затраты на изучение программирования с нуля и написания программы аналогичной реверсируемой.



    Как правило, требуется утянуть/реверснуть какой-то конкретный функционал, что на несколько порядков проще.
     
  8. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Вроде, примерно так:

    1. Сначала думаем, что конкретно мы от проги хотим (убрать наг-скрин, выдрать хитрый алгоритм, и т.п.)

    2. Потом думаем, как она может это делать.

    3. Потом ищем признаки того, что придумали (вызовы апи, строки и т.п.) либо если ничего не придумали ищем место, откуда прога начинает сообщать о проделанной работе.

    4. А дальше в зависимости от найденного повторяем шаги 2 и 3 пока че-нить не найдем или спать не захотим. В процессе этого лупа читаем доп.литературу и консультируемся у знающих людей.

    5. В итоге составляем примерное представление о работе искомой функциональности, и опять думаем. Что дальше с этим делать.
     
  9. YoungBastard

    YoungBastard New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2005
    Сообщения:
    231
    Адрес:
    Russia
    NeutronMass

    Дружище,здесь каэшна много интересных стратегий,но всё это субъективно,а объективно, для начала надо открыть статьи на краклабе и начать изучать их.К примеру,есть у тебя thebat и надо поломать,залазишь туды и смотришь как ломается.А потом и сам по тихоньку начнешь.А потом через сотню другую,будешь знать с какой стороны подойти к исследуемому объекту.Пожалуй,эт самый действенный алгоритм реверсирования))).Так сказать,объективное имхо=)
     
  10. NeutronMass

    NeutronMass New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2005
    Сообщения:
    87
    Спасибо, в общем понял. У самого были подобные сомнения, хотелось услышать чужие мнения. И огромное tnx Four-F его

    туториал по драйверам это супер. Пытаюсь перелопатить кое-что из ваших идей на С. Делаю небольшой синтезатор с использованием вашего драйвера работы с внутренним динамиком. Однако переложить клавиатурный шпион на С пока

    не получается. Да еще у меня сложилось мнение, что предмет

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

    Спасибо еще раз.
     
  11. NeutronMass

    NeutronMass New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2005
    Сообщения:
    87
    Поскольку сделать реверс инжиниринг большой программы займет много вре

    мени, (чисто матаматически потребуется масса времени, которого нет в

    наличии) то речь идет о том чтобы определить интересующие части программы.

    И тут мы снова сталкиваемся с необходимостью алгоритма действий. К сожалению

    я не в состоянии обобщить весь материал, так как для этого нужно взломать

    много программ с разными защитами и разными целями.

    Есть такая притча: Как-то Бог спросил Соломона. Привожу примерные слова Бога:

    Дескать, ты мне нравишься, чувак, чем тебе и твоему народу подсобить? Могу-сказал Бог, подсобить создать новую

    операционную систему, тебе и твоему народу. Соломон тоже был парень не промах, не даром Бог его любил.

    Он ответил Богу: -В принципе, не хочу утруждать тебя, старче, у тебя дела

    есть и поважнее, но дабы не обидеть тебя все же воспользуюсь халявой. И

    просьба моя будет очень простой. Укажи-говорит Соломон только первый шаг.

    То есть в каком направлении мне и моему народу так сказать развиватся.

    Бог улыбнулся и указал путь истинный Соломону.

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

    кроме того все постоянно меняется изменяются и методики...
     
  12. MrHammer

    MrHammer New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2003
    Сообщения:
    197
    Если цель определена, то нужно искать точки взаимодействия программы с внешней средой. Расставить в нужных точках ловушки и изучить повадку с помощью отладчика. Брать следует теплым и с дизассемблером(декомпилятором).
     
  13. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia


    По-моему не обязательно. Мне хватило знания api, системы скриптов IDA и начального знания ассемблера, чтобы по пути выучить ассемблер, недостающие знания по api и понять методы реверс-инженеринга (даже этого сайта я к тому времени на знал). Главное найти правильную первую программу - не больше 0.5 Mb ;)