Исследование .NET исполняемых файлов

Тема в разделе "WASM.RESEARCH", создана пользователем axl, 12 окт 2006.

  1. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Народ кто-нибудь занимается этой тематикой.
    Есть несколько вопросов:

    Существуют ли просмоторщики .NET сборок, которые не используют Reflection, просто например после использования какого-нибудь обфускатора все утилиты для реверсинга основанные на Reflection отваливаются :dntknw:

    Как добраться непосредственно до il кода при просмотре в hex-редакторе сборки ?
     
  2. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Посмотри вот сюда:

    http://www.rsdn.ru/article/dotnet/phmetadata.xml

    На обфусцированных сборках Researcher упадёт, но, скорее всего, можно будет увидеть, на какой таблице и на какой записи он упал.
     
  3. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Да статья хорошая.
    А есть еще какая-нибудь дельная инфа.
    Если еть опыт реверсинга .NET приложений какие тулзы юзал ;)
     
  4. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    А информация какого рода тебе ещё нужна?
     
  5. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Весь инструментарий для реверсинга .NET приложений который удолось раздобыть во всю использует Reflection и если файлик защещен чем-то, то такой инструментарий бесполезен.

    Отсюда вопрос, если есть опыт реверсинга .NET приложений, поделись советами о том как оно нужно делать. Может быть есть инфа о каких-нибудь ниболее полезных тулзах или вообще есть самописный софт.

    Если знаешь хорошие стать на тему построения защиты .NET приложений тоже кидай сюды.

    Ели есть инфа какой принцип защиты использует Alladin и SafeNet при использовании автозащиты .NET приложений, тоже будет очень кстати.
     
  6. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    я извиняюсь, конечно, но разве ildasm не рулит? сурс получите в любом случае, и можно дальше разбираться, полиморфиков под дотнет я чето не видел, а обфускация.. защита от ленивого
     
  7. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Извиняю, чего там... :) Нет, не рулит. Проблема в том, что он написан в истинно майкрософтовском духе - вроде бы всё показывает, но не показывает, откуда и каким способом это "всё" взялось.
    Кроме того, позволю себе уточнить - ildasm выдаёт не исходный код, а MSIL. В какойм-то смысле этот MSIL можно рассматривать как .NET-овский ассемблер.
     
  8. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Извиняю, чего там... :) Нет, не рулит. Проблема в том, что он написан в истинно майкрософтовском духе - вроде бы всё показывает, но не показывает, откуда и каким способом это "всё" взялось.
    Кроме того, позволю себе уточнить - ildasm выдаёт не исходный код, а MSIL. В какойм-то смысле этот MSIL можно рассматривать как .NET-овский ассемблер.
     
  9. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    а кстати, MSIL вполне доступный для понимания язык. Разобраться можно. Некоторые ретивые товарищи утверждали что ломают все подряд .NET защиты с помощью ildasm -> копания в исходниках, полученных им -> обратная перекомпиляция
     
  10. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    - Я с Вами согласен, slow!
    - Нет, OldDino, это я с Вами согласен!

    Кто бы спорил! :)
     
  11. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Ну дык, кроме флейма по теме может кто-нибудь сказать или как то народ еще не проникся к теме реверсинга .NET приложений :)
     
  12. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Я привёл ссылку. Ты на Researcher взглянул хотя бы?
     
  13. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Да посмотрел, статья талковая. Я читал до того как эту ветку запостил. А кроме этой статьи нет ничего больше что ли.
    Вообще меня интересует конкретный вопрос, как пропатчить CIL код в сборке, только меня интересует не конкретная програмулина, которая это делает, а оаписание самого процесса, как она это делает. Какие либы юзает, либо просто по напрямую патчит, но тогда как вычисляется смещение где патчить ...
     
  14. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Кстати нашел интересную либу, котарая реализует все необходимая для патчинга .NET сборок из своего кода. Вот линк: http://www.mono-project.com/Cecil
     
  15. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    К сожалению, должен констатировать, что ты невнимательно прочитал статью. Одна из глав в этой статье называется, в частности, "Как «добраться» до кода". Если и после этого не придёт понимание...

    О внутренностях метаданных можно почитать у Сержа Лидина в его книге. Можно изучить 4-ю (кажется) часть стандарта ECMA-335, да мало ли что ещё можно найти... Нужно только учесть, что в .NET'овских сборках код представлен не в виде ассемблерных команд, а в виде MSIL'а. Ты MSIL хорошо понимаешь? А взаимосвязь таблиц метаданных друг с другом? А, скажем, что происходит во время JIT-компиляции? А что такое "подписанная сборка" и почему её нельзя вообще изменять (если, конечно, хочешь оставить подпись валидной)? Если на все вопросы ответ положительный, то тогда никто и ничто не помешает тебе разобраться в процессе изменения .NET'овской сборки. В противном случае - книги и руководства тебе в руки.

    Кстати, Researcher не пользуется Reflection'ом, если ты заметил.
     
  16. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Да заметил, что он непользует Reflection. Ок, пробегусь еще по статье. Где можно слить книжечку Лидина. На преведенные вопросы пока не на все могу ответить, но на пути к этому :).
    Кстати советую взглянуть на вот эту тулзу http://www.ntcore.com/products.php она гораздо удобнее Researcher и неиспользует тоже Reflection.

    Может обменяемся почтой или аськами, так общение будет протекать более эффективно ;)
     
  17. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Кстати а может есть ссылочка на исходнички утитилитки какой-нибудь, которая может декомпилировать сборки (желательно на С++). Я скачал конечно SSCLI, но может есть еще что-нибудь :).

    P.S.: Я кстати Павел читал практически все ваши книги, огромный вам респект за них ;)
     
  18. OldDino

    OldDino New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    44
    Благодарю за добрые слова.

    С уважением,

    OldDino
     
  19. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Вот линк на прогу на плюсах с сорцами которая делает все что мне требовалось.
    http://www.thinkingms.com/pensieve/homepage/work/trashbin/trashbin.htm

    Код (Text):
    1. usage: trashbin <PE filename> [options]
    2.  
    3.         portable executable info:
    4.         /dos     display dos header
    5.         /sig     display the file signature
    6.         /coff    display coff header
    7.         /pe      display pe/optional header
    8.         /dd      display data directories in pe header
    9.         /sec     display section headers
    10.         /exp     display export table
    11.         /imp     display import table
    12.         /reloc   display relocation information
    13.         /tls     display Thread Local Storage information
    14.  
    15.         managed info:
    16.         /corhdr          display the common language runtime header
    17.         /mdhdr           display metadata headers
    18.         /md:Strings      display metadata stream #Strings
    19.         /md:Blob         display metadata stream #Blob
    20.         /md:US           display metadata stream #US (user strings)
    21.         /md:GUID         display metadata stream #GUID
    22.         /md:#~           display optimised metadata tables stream-header
    23.         /mdtab           display optimised metadata tables
    24.  
    25.         other:
    26.         /type    indicates the type of the PE file
    27.         /csv     enable excel compatible, CSV output
     
  20. axl

    axl New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2004
    Сообщения:
    19
    Адрес:
    Russia
    Вот линк на хорошую статейку по структуре .NET сборок http://www.codeproject.com/dotnet/dotnetformat.asp