Автор Тема: exe компилятор на AutoIt  (Прочитано 7173 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Maalik [?]

  • Осваивающий
  • **
  • Сообщений: 74
  • Репутация: 33
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
exe компилятор на AutoIt
« Создано: Январь 08, 2014, 01:27:44 »
Всем привет! Всех с рождеством!  :) Итак, мы сейчас с Вами напишем exe компилятор на autoit для выдуманного на ходу командного языка программирования Au3Comm. Описывать, я свой "язык программирования" тут не буду. Если Вам интересно, статью можете почитать тут: клац!

А мы с Вами начнём написание exe компилятора. Итак, мы конечно же можем, транслировать команды в машинный код, это будет будет работать быстрее самого AutoIt'a. Но, мы с Вами создадим свою среду времени Выполнения, а.к.а Runtime. Как это будет работать?

1. Мы создаем ядро runtime на autoit;
2. Читаем данные по сигнатуре(уникальной подписи, которую мы придумаем);
3. Выполняем.

Итак вот код нашего рантайма:
(нажмите для показа/скрытия)
Как видите программа читает сама себя и ищет там сигнатуру(подпись), если сигнатура найдена, то считывает все данные после сигнатуры и исполняет. Для солидности: после компиляции меняем расширение с exe на bin.

А вот исходник компилятора:
(нажмите для показа/скрытия)
Здесь алгоритм тоже очень прост, мы читаем файл a3cruntime.bin (скомпилированный код выше) и склеиваем с сигнатурой и самим исходником a3c скрипта. и сохраняем в exe файл. Вот и наша компиляция.

Теперь, если мы откроем наш скомпилированный a3c скрипт, то увидим, что наши сигнатура и исходник скрипта находятся в конце. Как видите, исходник наш видно и его можно без труда прочитать. Для исправления этого, используют так называемую "обфускацию". Сам исходник, в принципе шифруют и вставляют. А в рантайме пишут функцию, которая расшифровывает скрипт и исполняет, или же можно зашифровать файл алгоритмом RC4 и при запуске запрашивать пароль.

Сам язык Au3Comm конечно не круче самого AutoIt'a, но могу сказать, что он круче языка HQ9+  ;D

Вы можете скачать исходники тут: http://yadi.sk/d/F_HQjPpCFckHt
В примере присутствуют компилятор и интерпретатор.
« Последнее редактирование: Январь 08, 2014, 10:53:16 от Maalik »

Русское сообщество AutoIt

exe компилятор на AutoIt
« Отправлен: Январь 08, 2014, 01:27:44 »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 961
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Пишем exe компилятор на AutoIt
« Ответ #1, Отправлен: Январь 08, 2014, 05:57:14 »
ПредупреждениеЗа нарушение правил форума (пункт Б.5):
Цитировать
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.

Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Пишем exe компилятор на AutoIt" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.

ПредупреждениеЗа нарушение правил обязательного оформления публикаций.
Правила обязательного оформления публикаций

Тема "Пишем exe компилятор на AutoIt" должна быть оформлена согласно правилам обязательного оформления публикаций, иначе она будет закрыта.

С уважением, ваш Модератор.

Скорблю и помню.




Оффлайн Maalik [?]

  • Осваивающий
  • **
  • Сообщений: 74

  • Автор темы
  • Репутация: 33
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: exe компилятор на AutoIt
« Ответ #2, Отправлен: Январь 08, 2014, 10:56:06 »
Ох, сорри. Дело было ночью. Перепутал. Можно будет переместить тему в полезняшки?

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2810
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: exe компилятор на AutoIt
« Ответ #3, Отправлен: Январь 08, 2014, 14:51:33 »
честно сказать, ничего не понял. что и для чего. может от того, что "дело было ночью"?  :)
Автор, а можно все объяснить попроще. чем это лучше обычной компиляции?
я лишь вижу дополнительные сложности
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Русское сообщество AutoIt

Re: exe компилятор на AutoIt
« Ответ #3 Отправлен: Январь 08, 2014, 14:51:33 »

Оффлайн Belfigor [?]

  • Локальный модератор
  • *
  • Сообщений: 3496
  • Репутация: 928
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: exe компилятор на AutoIt
« Ответ #4, Отправлен: Январь 08, 2014, 16:49:59 »
Тем что если ты напишешь свою шифровку, врагу будет сложнее декомпильнуть твой скрипт :)

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

Оффлайн Maalik [?]

  • Осваивающий
  • **
  • Сообщений: 74

  • Автор темы
  • Репутация: 33
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: exe компилятор на AutoIt
« Ответ #5, Отправлен: Январь 08, 2014, 19:13:13 »
joiner, объясню с радостью :)

Ну алгоритм компилятора тут очень прост. Сначала мы создаем такую программу, которая открывает (через FileRead) сама себя и ищет там строку !AU3COMMCODE (к примеру) - эта строка называется сигнатура. После этой строки у нас располагается скрипт, который будет исполнен. Эта программа по-солидному называется средой времени выполнения (Runtime Environment). Получается: интерпретатор + сигнатура + исходник скрипта = скомпилированная программа.

Можете открыть скомпилированный скрипт и в конце файла увидеть сигнатуру, а за ней исходник скрипта au3comm.

Компилятор же, берёт Runtime (программу), склеивает с сигнатурой и самим исходником и записывает в файл exe. У нас получается скомпилированная программа. Схожим образом работает сам компилятор AutoIt и (если не заблуждаюсь) программы на .NET Framework, а также SFX-архивы. Щас я могу точно сказать, что на AutoIt можно написать SFX-модуль. (святые угодники, кажется у меня появилась ещё одна идея)

Но, компилятор, который я выложил, не обфусцирует код, это понятно тем, что можно исходник прочитать в конце скомпилированного exe файла.

Мы также можем, исходник компилировать в байт-код и написать runtime для исполнения такового, код уже будет труден для восприятия. В добавление, мы можем зашифровать исходник, а потом просить пароль, или же сжать утилитой UPX (как это делает Jon для компилятора AutoIt).

Перед нами открывается спектр возможностей, главное до всего этого додуматься  :)
« Последнее редактирование: Январь 08, 2014, 19:18:22 от Maalik »

Оффлайн Suppir [?]

  • Продвинутый
  • ***
  • Сообщений: 967
  • Репутация: 61
    • Награды
Re: exe компилятор на AutoIt
« Ответ #6, Отправлен: Январь 08, 2014, 21:18:56 »
Что это дает? Можете пояснить?
« Последнее редактирование: Январь 08, 2014, 21:27:12 от Suppir »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2810
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: exe компилятор на AutoIt
« Ответ #7, Отправлен: Январь 08, 2014, 22:24:01 »
Maalik
компилирую скрипт твоей программой, но при запуске получаю


ты все-таки не дал инструкцию как пользоваться

Русское сообщество AutoIt

Re: exe компилятор на AutoIt
« Ответ #7 Отправлен: Январь 08, 2014, 22:24:01 »

Оффлайн Maalik [?]

  • Осваивающий
  • **
  • Сообщений: 74

  • Автор темы
  • Репутация: 33
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: exe компилятор на AutoIt
« Ответ #8, Отправлен: Январь 09, 2014, 19:38:15 »
Как не дал? Сверху же ссылка?

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2810
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: exe компилятор на AutoIt
« Ответ #9, Отправлен: Январь 10, 2014, 00:32:06 »
Maalik
так что по поводу ошибки? скрин выше

Оффлайн Maalik [?]

  • Осваивающий
  • **
  • Сообщений: 74

  • Автор темы
  • Репутация: 33
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: exe компилятор на AutoIt
« Ответ #10, Отправлен: Январь 11, 2014, 23:37:05 »
Он AutoIt код компилиорвать не будет, это компилятор другого типа языка. Например попробуйте ввести в файл:
sayhelloworld
Или же:
[email protected]Ваше сообщение
В таком случае код скомпилируется.

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2810
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: exe компилятор на AutoIt
« Ответ #11, Отправлен: Январь 12, 2014, 07:04:30 »
значит компилятор написан на AutoIT, но не для AutoIT. тогда смысл темы не понятен.если компилятор для твоего "языка", то причем тут "полезняшки"?

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 961
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: exe компилятор на AutoIt
« Ответ #12, Отправлен: Январь 12, 2014, 08:23:42 »
joiner
Я так понял, Maalik написал для своего "ЯП" компилятор (а правильнее интерпретатор) на ЯП Autoit.
P.S. Честно говоря, большого смысла в этом всём я не вижу.

Оффлайн firex [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 943
  • Репутация: 203
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: exe компилятор на AutoIt
« Ответ #13, Отправлен: Январь 12, 2014, 13:37:58 »
Интерпретация языка на интерпретируемом языке.  :rofl:
Maalik
Сделай тогда уж нормальный разбор выражений, вот к примеру вырезка моих старых издевательств над языком:

$sampleVar:= ( 50 * 50 ) - Abs( -10 ) //variable assignment
$sampleVar:+ 50 //variable assignment
MsgBox( 64, "Title", "Text" ) //default execute
//internally API - кажется так и не закончил

Код: AutoIt [Выделить]
Func _FxConsole_CommandEngine( $sCommand )
    Local $_poArray, $_poValue = '', $_poDefault = ''
    Local $_pExec = '^[^\\]'
    Local $_pAssign = '^\$([\w]+)\:([\=\+\-\*\&])(.+)$'
    Local $_pAPIcmd = '(?<=\\|\(|,)([^\(\)\,]+?)(?=\h|\,|\))'
    ;Value/@Error/@Extended
    Dim $__exec[3] = [Default, 0, 0]
    Do
        ; == variable assignment
        $_poArray = StringRegExp( $sCommand, $_pAssign, 3 )
        If UBound( $_poArray ) = 3 Then
            $_poValue = Execute($_poArray[2])
            $_poDefault = Eval( $_poArray[0] )
            Switch $_poArray[1]
                Case '='
                    $_poValue = $_poValue
                Case '+'
                    $_poValue += $_poValue
                Case '*'
                    $_poValue *= $_poValue
                Case '&'
                    $_poValue &= $_poValue
            EndSwitch
            $__exec[1] = Assign( $_poArray[0], $_poValue, 2 )
            If Not $__exec[1] Then _
                Dim $__exec[3] = [$_FXE_BADVAR, 1, 0] ;Bad var

            ExitLoop ;Can only one error /1
        EndIf
        ; == default execute
        $_poArray = StringRegExp( $sCommand, $_pExec, 3 )
        If UBound( $_poArray ) = 1 Then
            $_poValue = Execute( $sCommand )
            If $_poValue = '' Then
                Dim $__exec[3] = ['', @Error, @Extended]
                If @Error Then _
                    $__exec[0] = $_FXE_BADSYNTAX
            EndIf
            ExitLoop
        EndIf
        ; == internally API ;NOT Remove slash!
        If StringLeft( $sCommand, 1 ) = '\' Then ;Address to API
            $_poArray = StringRegExp( $sCommand, $_pAPIcmd, 3 )
            If IsArray( $_poArray ) Then ;And UBound( $_poArray ) > 1
                $_poValue = $_poArray
                _ArrayDisplay( $_poValue )
                ExitLoop
            EndIf
        EndIf
    Until True

    ; ===
    If $__exec[0] = Default Then _
        Dim $__exec[3] = [$_poValue, 0, 0]
    If IsArray($__exec[0]) Then _
        $__exec[0] = '*Array[' & UBound( $__exec[0] ) & ']'
    If $__exec[0] = 1 Then _
        $__exec[0] = 'Succeed! (or 1)'

    ;Report to the console
    _FxConsole_WCmd( 'Executing', $sCommand )
    If $__exec[1] Then
        _FxConsole_WError( 'FXE', $__exec[0] )
    Else
        _FxConsole_WCmd( 'ReturnEx[' & $__exec[2] & ']', $__exec[0] )
        _Cout( '...' & @LF, $FOREGROUND_GREEN )
    EndIf
EndFunc


Русское сообщество AutoIt

Re: exe компилятор на AutoIt
« Ответ #13 Отправлен: Январь 12, 2014, 13:37:58 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
14 Ответов
61516 Просмотров
Последний ответ Апрель 28, 2012, 12:36:49
от CreatoR
2 Ответов
10143 Просмотров
Последний ответ Ноябрь 16, 2009, 09:13:26
от Suppir
3 Ответов
5033 Просмотров
Последний ответ Июль 16, 2011, 14:17:36
от Afonichev
0 Ответов
1616 Просмотров
Последний ответ Июнь 28, 2011, 19:55:40
от CreatoR
30 Ответов
17616 Просмотров
Последний ответ Апрель 02, 2012, 03:44:53
от Garrett
18 Ответов
6276 Просмотров
Последний ответ Май 17, 2012, 16:50:38
от Vlasssov
10 Ответов
2661 Просмотров
Последний ответ Март 18, 2015, 21:47:17
от AZJIO
0 Ответов
601 Просмотров
Последний ответ Март 17, 2015, 08:37:36
от Yashied
0 Ответов
400 Просмотров
Последний ответ Декабрь 29, 2015, 22:05:29
от Yashied
13 Ответов
1108 Просмотров
Последний ответ Май 22, 2017, 15:11:59
от inververs