надёжный способ отличить код от данных в pe файле

Тема в разделе "WASM.RESEARCH", создана пользователем vladqq, 19 авг 2009.

  1. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    хай всем

    столкнулся с такой проблемой - надо отличить код от данных в pe файле
    с visual c++ проблем нет, он разносит всё по секциям
    а вот с c++ builder столкнулся с проблемой - он и код и данные суёт в .text,
    разпихивая данные между функциями. есть ли какой-то надёжный способ отличить
    код от данных в этом случае, не используя map файл ?

    сенкс!
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    vladqq
    Константы он распихивает.
     
  3. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    Booster
    не суть важно, константы это тоже данные. мне надо их отличить от кода как-то.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Студия тоже распихивает, если не указана опция Zi.


    Дизассеблируйте Шура. А в общем задача не решаема.
     
  5. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    Booster
    анализ происходит автоматом, код я и так дизассемблирую, только проблемно отличить логичный код от белиберды. ида каким-то образом справляется с этой задачей...
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ну так надо отдизасмить и что не код то данные.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Один из приёмов ввода в ступор таких вумных как ида, условный переход в космос который никогда не сработает.
     
  8. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ну ида ориентируется по ссылкам в коде. все ссылки что на данные - то данные.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    vladqq
    0x90 это код или данные по вашему :derisive:
     
  10. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Clerk
    Смотря что было до 0x90...
     
  11. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Если дизасм обламывается, то либо нас дурят либо данные. Скорее всего данные..
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    punxer
    Эту задачу даже аверам не всегда удаётся исполнить при эмуляции.. Часто без исполнения кода определить что данные являются кодом невозможно.
     
  13. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    кто-нибудь в курсе - возможно ли заставить билдер держать в .text только код ?
     
  14. vladqq

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    не совсем. могут быть ссылки из данных на функции, которые напрямую нигде в коде не вызываются, ида их тоже определяет. собсно задача разделения кода/данных в общем то нерешаема, это ясно, но вот для конкретного компилятора решаема вполне.
     
  15. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    vladqq
    да но она берет на заметку, что там указатель на код (она же их не отображает как код). это тривиально. а вот если у вас в API функцию передается аргумент из .text, то он может быть как callback, так и const
     
  16. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    В корне задача не решаема. Но зная компилятор, задача тоже не решаема..., и тд. можно с определённо высокой уверенностью сделать выводы.
    например если рассматриваем переменную как константу, то по адресу на который она указывает скорее всего будет не push ebp... То есть задача с начальными условиями, которыми мы как раз распологаем, как раз таки вполне решаема. Готового варианта увы не предложу.
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    vladqq
    А как ты в дизассемблере сам определяешь, что это код, а не данные ?
    Думается, тебе надо писать анализатор, который смотрит на "бесмысленность" конструкций, до некоторой степени лажовости думаю можно написать, а под все случае жизни нее это затруднительно
     
  18. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    ну можно еще посмотреть как что используется
    например
    push offset var_XXX
    ...
    ret
    var_XXX - это скорее всего код

    push var_XXX
    ...
    ret
    var_XXX - это скорее всего данные

    и т.д. и т.п
     
  19. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    max7C4
    код вполне можно использовать как данные. правда не знаю, как оно с билдером..

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

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

    vladqq New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    69
    код анализируется exe файла с релоками, которые я использую при анализе. единственная проблема это понять - когда указатель, находящийся в .data смотрит в .text - указывает ли он на код или на данные.