Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать IL программу 
V
    Опции темы
DenWPF
Дата 21.4.2011, 12:20 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Я пишу код на C#. exe-шник содержит C# код, или уже IL ?

вообщем нужно сделать так что бы по exe-шнику нельзя было определить на каком языке написан. 
PM MAIL   Вверх
likegift
Дата 21.4.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



 тогда пиши сразу на ассемблере
PM MAIL   Вверх
SKrivosein
Дата 21.4.2011, 12:43 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Вобщем непонятно зачем это надо, в .NET Reflector можно открыть твой ехешник в любом языке .NET
А сам ехешник  помоему в бинарной форме IL описаной метаданными, в которых я лично ненашел на каком языке написан.
Хотя могу ошибатся. smile 

Это сообщение отредактировал(а) SKrivosein - 21.4.2011, 12:44


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
Sartorius
Дата 21.4.2011, 12:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



DenWPF, .NET сборка содержит конечно MS IL код. Но AFAIK в сборке нет метаинформации о исходном языке. Может быть по особенностям компиляции констркций языка в IL это можно понять. В любом случае сборку можно пропустить через обфускатор 
http://preemptive.com/products/dotfuscator/overview
PM MAIL ICQ   Вверх
SKrivosein
Дата 21.4.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Например напиши коротенькую .exe, открой её как файл в студии и увидиш метаданные. Открой в рефлекторе...
Потом переименуй на неизвестный тип файла, допустим .kiuz  smile и опять открой как файл в студии.


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
DenWPF
Дата 21.4.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Цитата

.NET Reflector можно открыть твой ехешник в любом языке .NET


понял. спасибо
PM MAIL   Вверх
gambit
Дата 21.4.2011, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Вообще это большой и давний вопрос, что ms при компиляции пишут в exe файл. Ходят легенды что exe можно определить лицензионность твоей винды и студии.
PM MAIL ICQ Skype   Вверх
Rohoss
Дата 22.4.2011, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Цитата(gambit @  21.4.2011,  15:57 Найти цитируемый пост)
Ходят легенды что exe можно определить лицензионность твоей винды и студии. 

Ко мне не приходили  smile 

Вообще если хочешь писать на IL то есть ILDE

А по исходному IL-коду иногда можно догадываться на каком ЯП написано, потому как используются такие пространства имён как FSharp, VisualBasic и другие... Однако гарантий нет, иногда люди используют эти пространства имён из других языков...


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
diadiavova
Дата 22.4.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Rohoss @  22.4.2011,  13:18 Найти цитируемый пост)
А по исходному IL-коду иногда можно догадываться на каком ЯП написано, потому как используются такие пространства имён как FSharp, VisualBasic и другие...

Ну вообще-то не только. Как написал Sartorius, некоторые вещи можно определить по особенностям компиляции. Приведу простой пример: создаем цикл на шарпее и на бейсике
Код

            for (int i = 0; i <= 10; i++)
            {
                Console.WriteLine("blablabla");
            }


Код

        For i As Integer = 0 To 10 Step 1
            Console.WriteLine("blablabla")
        Next


Вроде ожидается, что должен быть сгенерирован один IL, однако что мы видим:
Для шарпа
Код

    IL_0000: ldc.i4.0
    IL_0001: stloc.0
    IL_0002: br.s IL_0012
    // loop start (head: IL_0012)
        IL_0004: ldstr "blablabla"
        IL_0009: call void [mscorlib]System.Console::WriteLine(string)
        IL_000e: ldloc.0
        IL_000f: ldc.i4.1
        IL_0010: add
        IL_0011: stloc.0
        IL_0012: ldloc.0
        IL_0013: ldc.i4.s 10
        IL_0015: ble.s IL_0004
    // end loop
    IL_0017: ret

А для бейсика
Код

    IL_0000: ldc.i4.0
    IL_0001: stloc.0
    // loop start (head: IL_0002)
        IL_0002: ldstr "blablabla"
        IL_0007: call void [mscorlib]System.Console::WriteLine(string)
        IL_000c: ldloc.0
        IL_000d: ldc.i4.1
        IL_000e: add.ovf
        IL_000f: stloc.0
        IL_0010: ldloc.0
        IL_0011: ldc.i4.s 10
        IL_0013: ble.s IL_0002
    // end loop
    IL_0015: ret


То есть различия очевидны. Можно конечно для шарпа написать так
Код

            int i = 0;
            while (true)
            {
                Console.WriteLine("blablabla");
                i++;
                if (i > 10)
                {
                    break;
                }
            }

Тогда получим такой IL
Код

    IL_0000: ldc.i4.0
    IL_0001: stloc.0
    // loop start (head: IL_0002)
        IL_0002: ldstr "blablabla"
        IL_0007: call void [mscorlib]System.Console::WriteLine(string)
        IL_000c: ldloc.0
        IL_000d: ldc.i4.1
        IL_000e: add
        IL_000f: stloc.0
        IL_0010: ldloc.0
        IL_0011: ldc.i4.s 10
        IL_0013: ble.s IL_0002
    // end loop
    IL_0015: ret

В данном случае различия в том, как выполняется инкремент счетчика: в шарпе используется инструкция add, а в бейсике add.ovf ( с проверкой переполнения). На шарпе тоже можно выполнить проверку переполнения значений
Код

            int i = 0;
            while (true)
            {
                Console.WriteLine("blablabla");
                checked
                {
                    i++;
                }
                if (i > 10)
                {
                    break;
                }
            }
и получить код, идентичный тому, что генерируется для бейсика, вопрос только в том, кто будет этим заниматься. А подобные нюансы существуют для многих конструкций.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
A5uKa
Дата 22.4.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Nemerle
Код

using System.Console;

module Program
{
  Main() : void
  {
    for (mutable i = 0; i <= 10; i++)
    {
        WriteLine("blablabla");
    }
  }
}


Код

.method private hidebysig static void Main() cil managed
{
    .entrypoint
    .maxstack 2
    .locals init (
        [0] int32 num)
    L_0000: ldc.i4.0 
    L_0001: stloc.0 
    L_0002: ldc.i4.0 
    L_0003: stloc.0 
    L_0004: ldloc.0 
    L_0005: ldc.i4.s 10
    L_0007: cgt 
    L_0009: ldc.i4.0 
    L_000a: ceq 
    L_000c: brfalse L_0024
    L_0011: ldstr "blablabla"
    L_0016: call void [mscorlib]System.Console::WriteLine(string)
    L_001b: ldloc.0 
    L_001c: ldc.i4.1 
    L_001d: add.ovf 
    L_001e: stloc.0 
    L_001f: br L_0004
    L_0024: ret 
}

PM   Вверх
Rohoss
Дата 22.4.2011, 14:47 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18



Все уже поняли, что A5uKa знает Nemerle  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
A5uKa
Дата 22.4.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Цитата(Rohoss @ 22.4.2011,  14:47)
Все уже поняли, что A5uKa знает Nemerle  smile

 smile 
PM   Вверх
DenWPF
Дата 22.4.2011, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



diadiavova, спасибо, очень интересно.


PM MAIL   Вверх
gambit
Дата 22.4.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



Цитата(Rohoss @  22.4.2011,  12:18 Найти цитируемый пост)
Цитата(gambit @  21.4.2011,  15:57 Найти цитируемый пост)
Ходят легенды что exe можно определить лицензионность твоей винды и студии. 
Ко мне не приходили  smile 

Ну я же написал что это легенды))) Хотя кто знает, че пишут компиляторы.
PM MAIL ICQ Skype   Вверх
diadiavova
Дата 22.4.2011, 17:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(gambit @  22.4.2011,  17:49 Найти цитируемый пост)
Хотя кто знает, че пишут компиляторы.

Ну в принципе спецификация PE-файла общедоступна, так что кто мешает это проверить? smile 
http://msdn.microsoft.com/en-us/windows/ha...e/gg463119.aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2730 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.