# руководство по взлому .NET программ

Тема в разделе "WASM.HEAP", создана пользователем kaspersky, 26 мар 2008.

  1. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    мыщъх надумал написать руководство по взлому .NET программ,
    показав как и чем их дизассмить, как читать байт-код, как его
    хачить hiew'ом (в смысле бит-хак :derisive:, как и чем отлаживать...
    в общем достаточно полное введение в тему на примере C#,
    хотя тоже самое будет во многом справедливо и для бацика.

    причем, самое забавное, что для взлома достаточно иметь
    ms vs express (free) + hiew (free), IDA, конечно, крутая весчь,
    но можно и без нее...

    я вот тут смотрю, C# программ все больше и больше,
    а манов по взлому чего-то не наблюдается. может быть,
    кого-то заинтересует мой?
     
  2. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    kaspersky
    ввиду того, что чистые экзешники, кажись, не в моде - конечно, общественности будет интересен твой ман:))
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    UbIvItS
    в смысле чистые экзешники не в моде? ну так там и получается exe :) формата pe :) там даже одна машинная команда есть: jmp _CorExeMain, ну а остальное p-код. дизассемблировать его фигня, я больше над отладкой трахался, правда потом оказалось, что не все так уж и запущено ;)
     
  4. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    kaspersky

    Несомненно заинтересует, даже очень :)
     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    kaspersky
    да, не ахти я как хорошо выразился:)) имел ввиду классические экзешники без дотнетовских либ.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ыыы??? откуда инфа? аж любопытно стало :)
     
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    MSoft
    ты хочешь сказать, что в виндосе 95 дотнет был??:))
     
  8. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    kaspersky

    Что касается шарпа, то не сильно уж много программ на нем написанных есть. Впрочем технология примерно такая же как и жабы, и прочих "кросплатформенноориентированных". Не знаю стоит ли писать об этом - креативности NULL. Получается тоже, что кричать налево и направо - а вот я умею все фитчи IDA юзать или в опциях ms vs express разбираюсь круто. Народ за последнее время поумнел, если писать статьи начинающим - то конечно статья про реверсин шарпа нормально пройдет - только развития не видно никакого.

    Тысячи статей, а отложить на полку назаметку практически ни одной за последний год :dntknw:.

    Это только мое мнение, возможно я где-то и не прав.
     
  9. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    kaspersky ( ^ ^ ^ )
    Если комута не нада ( | | | ), ну или всем не надо (?), то с удавольствием в личку приму и почитаю =)
     
  10. SWR

    SWR New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    226
    Адрес:
    Russia
    Ну под NET не тока C#, так что думаю это будет общий монуал по нет.
    Темболее щас почти все крупные конторы на него переходят в плане интерфейса (gui)
    Для себя специально портабле версию делал (експрес), с прикреченым русиком из 2005. Могу выложить если кому надо.
    А доку по байт-коду очень надо (лень отрывки читать\собирать, а по инглишу долго).

    >в смысле чистые экзешники не в моде? ну так там и получается exe :) формата pe :) там даже одна машинная >команда есть: jmp _CorExeMain
    Неплохо былоб расписать общую картину взаимодействия net с хардом (точнее как все это работает), очень поможет разобраться как работает\сделать упаковщики для нет.
     
  11. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    SWR
    > Неплохо былоб расписать общую картину взаимодействия net
    > с хардом (точнее как все это работает), очень поможет
    > разобраться как работает\сделать упаковщики для нет.
    надо будет взять на заметку. об этом я как-то не подумал...
    thanks.

    PROFi
    угу, и поэтому на мой вопрос: так чем же отлаживать .NET .exe
    остался без ответа и главное _как_, ну как я уже выяснил
    (ildasm -> ilasm /pdb -> mdbg), но все равно там до хвоста
    непривычного. вот, например, olly, soft-ice и КО подсвечивают
    команду, которую _собираются_ выполнять, так?!
    mdbg.exe подствечивает уже выполненную команду.
    в принципе, к этому привыкаешь, но поначалу не въезжаешь...

    на счет кол-ва .NET прог с управляемым кодом не скажу,
    т.к. у меня .NET вообще стоит только на виртуалке и если
    проге нужен .NET она идет в /dev/nul. а вот малвари на .NET'е
    за последнее время встречалось не так уж и мало... все конечно
    примитив, написанный школьниками, но его тоже нужно анализировать...
    вот так и втянулся в это дело...
     
  12. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    ALL, SWR
    начал я рыть в сторону упаковщиков.
    пока нашел только два для .NET'а:
    # YAP .Net
    http://forum.vingrad.ru/forum/topic-186025.html
    /* какая-то пародия на упаковщик, тормозит,
    странно ведет себя с консольными программи,
    cl /clr сборки вообще не поддерживает */

    # dotNet Protector
    http://dotnetprotector.pvlog.com/Downloads.aspx
    /* слишком монструзен на первый взгляд.
    с консолью работает нормально, но все равно
    cl /clr сборки вообще не поддерживает */

    вопрос: кто видел еще какие пакеры
    для .NET'а - киньте в меня ссылками плз.
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    kaspersky
    пакеры или протекторы? (hint: есть одно решение от самих)
     
  14. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    censored
    и пакеры, и протекторы, и побольше ;)
     
  15. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    kaspersky
    ага так наверное эти протекторы служат для чистых .NET сборок, насколько я знаю СИ++.NET - это смесь Native + Managed. Если конечно я все правильно понял.
     
  16. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Arthur
    ну берем, значит, мы:

    Код (Text):
    1. #include <stdio.h>
    2. using namespace System;
    3.  
    4. void main()
    5. {
    6.      printf("hello, nezumi!\n");
    7. }
    компилим его:

    $cl.exe /crl hello.cpp

    при дизасме сборки получаем:
    Код (Text):
    1. .method assembly static int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl)
    2.         main() cil managed
    3. {
    4.   .vtentry 1 : 1
    5.   // Code size       13 (0xd)
    6.   .maxstack  1
    7.   IL_0000:  ldsflda    valuetype '<CppImplementationDetails>'.$ArrayType$$$BY0BA@$$CBD modopt([mscorlib]System.Runtime.CompilerServices.IsConst) '?A0x0f95a446.unnamed-global-0'
    8.   IL_0005:  call       vararg int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) printf(int8 modopt([mscorlib]System.Runtime.CompilerServices.IsSignUnspecifiedByte) modopt([mscorlib]System.Runtime.CompilerServices.IsConst)*)
    9.   IL_000a:  pop
    10.   IL_000b:  ldc.i4.0
    11.   IL_000c:  ret
    12. } // end of method 'Global Functions'::main
    прочий ужас, летящий на крыльях ночи опущен.
    причем, здесь вызывается "живой" printf хитрозадым способом ;)
    но все равно прикольно. ида уже обламывается, ildasm - нет ;)
    протекторы все обламываются как пионеры...
    ну вообще-то, можно получить и чистую сборку на С++

    ладно, мыщъх будет рыть в сторону C# - кто знает под него
    пакеры/протекторы? хотя CL.EXE /CLR file.cpp и без всяких
    пакеров хрен чем захачишь... там такой код... срывает крышу
    напрочь без всякой травы ;))
     
  17. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Рыть нада в сторону GNU/Linux mono и спецификаций. На практике .NET ничего крутого не представляет, в mono например встроен перекомпилятор с IL в native x386, такшо очень советую посмотреть. :) Фирмы переходят на .NET потому что это средство быстрой разработки и довольно легко соединять элементы, написаные разными програмистами. Отказ от управления памяти - смело, но бестолково. "Сборсчик мусора сам решит когда ему запустится", когда выделенная память превысит доступную физическую... Отказ от указателей тоже смело, и, конечно вынужден согласится, хитро придумано - делать дефграментацию памяти для освобождения не нужных кусков памяти, но от арифметики указателей тоже отказались(что не собнено очень БОЛЬШОЙ и очень ДЛИНЫЙ минус в технологию .NET). Зато ввели понятие "сборки", решыли проблему "ада dll", которую сами же и создали(которую кстати можно же было точно же также легко решить). BitPatching в .NET более чем возможен, сам лично модифицировал. Придумали .NET в 2001, сча уже 2008. Отсюда следствие: деньги вложеные в .NET не вернулись, чем и обьясняется наличие встроенной машины .NET Framework 3.5 в Windows Vista, которая всеравно вернёт дениги и за себя и за "передовую технологию .NET" за счет Microsoft DirectX 10.0 - 10.1, которая тоже не менее бред.(ИМХО)
     
  18. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    А чем Reflector не понравился то? Самое оно для разбора (если оно не смогло декомпилировать - ковыряйся в пкоде). А потом ilasm/ildasm для патчинга или добавления кода.
     
  19. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    rudik
    разве от указателей отказались?? - да, они не приветствуются, но юзать их можно.
     
  20. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    rudik
    > Рыть нада в сторону GNU/Linux mono и спецификаций.
    так ведь MS в той же степени отвечает спецификациям ;)
    ну... нарушает их... иногда...

    > На практике .NET ничего крутого не представляет,
    обычный байт-код, очень похожий на кастрированный JVM
    ну и не такой заточенный под классы, поэтому вполне дружит
    с бейсиком и другими языками.

    > в mono например встроен перекомпилятор с IL в native x386,
    такое есть и у ms. более того, именно так оно и выполняется,
    компилируясь на лету, за счет чего решается проблема
    мертвого кода и ряд других проблем, не реашаемых статическими
    трансляторами. ну вот например: if (foo()) bar(); else baz();
    допустим, функция foo() в 99 из 100 возвращает 0 и потому
    срабатывает baz(), а bar() "отдыхает". ран-таймовый транслятор
    это дело ловит. а статический?!

    > Отказ от управления памяти - смело, но бестолково.
    в Си++ отказа от управления памятью как не было так и нет.
    и тем не менее на нем можно создавать сборки с P-кодом,
    в том числе и с чистым P-кодом, ибо виртуальная машина
    допускает вольности с указателями, другое дело, что без
    кучи ключей транслятор этого делать не будет, ибо нафиг
    ему приснилось весь сишный код транслировать в байт-код,
    который будет тормозить... но теоритически получить чистую
    сборку можно и на Си++, причем используя все его фичи.
    сборщик мусора здесь явно отдыхает, но... что мы хотели
    то и получили ;)

    > "Сборсчик мусора сам решит когда ему запустится",
    угу. это самый большой кошмар который можно только представить...
    я не прошу разработчиков дот-нета написать медиаплеер на нем,
    хотя бы... ну тетрис... о, круто! у меня тут самый высокий уровень,
    фируры сыплются быстро-быстро и вдруг... все начинает тормозить,
    здорово, правда? ;)

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

    > Отказ от указателей тоже смело,
    да никто от них не отказывался...
    во всяком случае на уровне байт-кода, Си++,
    ну C# я еще недостаточно раскурил, чтобы
    однозначно сказать насколько сильно они там покоцаны
    но на уровне байт кода (повторяюсь) указатели - обычное дело.
    а откуда они берутся в байт коде? не с неба же падают...

    > Зато ввели понятие "сборки", решыли проблему "ада dll",
    с каких пор из дотнета нельзя вызывать DLL?

    > BitPatching в .NET более чем возможен, сам лично модифицировал.
    угу. даже если будет цифровая подпись она проверяется только
    до загрузки, а после - ну блин, внедряем опкод 01h (break),
    перехватываем исключение и правим все, что нам нужно ;)
    не говоря уже о самомодифицирующемся коде, правда,
    он не работает если задействована компиляция в память...

    > Отсюда следствие: деньги вложеные в .NET не вернулись,
    это точно. не вернулись. и массой миграции на нее не произошло...

    > чем и обьясняется наличие встроенной машины .NET Framework 3.5
    > в Windows Vista, которая всеравно вернёт дениги и за себя
    > и за "передовую технологию .NET" за счет Microsoft DirectX 10.0 - 10.1,
    > которая тоже не менее бред.(ИМХО)
    Server 2008 в минимальной поставке ставится без дотнета и при этом
    обеспечивает номинальный функционал, что _доказывает_ что .NET
    там - сбоку бантик и реально на фиг не нужен... а раз .NET не нужен
    самой MS, то... подсаживать на него других - негуманно имхо ;)

    а тут еще язык F# нарисовался. очередная пародия на кучу мертвых
    функциональных языков. и транслируемая в тот же самый байт код ;)
    такое впечатление, что MS не знает на кой еше гилке повеситься
    и куда девать этот .NET пока он морально не сдох...

    Joes
    > ilasm/ildasm
    вообще-то наоборот ;) и во-вторых, это срабатывает далеко не всегда.
    анти-реверсные приемы уже разрабатываются ;) планирую описать
    в ближайших номерах хакера. ну или протектор можно заюзать какой.

    UbIvItS
    указатели стали все больше константными, но при этом есть куча функций
    для преобразования типов и потому можно смело работать с указателями
    как с типом int в сях, другой вопрос, что теперь придется это делать явно,
    в то время как в сях можно было и по ошибке ;)