Что нового

Как компилируется скрипт?

gora

Знающий
Сообщения
315
Репутация
19
Интересует следующее:
1 Что происходит с исходным кодом при компиляции скрипта?
2 Что происходит с комментариями?
3 Что происходит с пробелами и табуляциями, используемыми в скрипте для улучшения читабельности?
4 Что происходит с вложенными файлами?
5 Подключаемые UDF включаются полностью или только те функции, которые непосредственно используются в скрипте?
6 Производится ли какое то сжатие исходного кода и вложенных файлов?

Может быть ссылки, где об этом можно почитать (желательно на русском).

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

Спасибо.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
На сколько я понял блуждая по форуму. (чтобы в одной теме все эти вопросы были... не встречал)
1. Преобразуется в код асемблера или что-то подобное... далее в бинарный код.
2. удаляются.
3. Удаляются.
4. Также преобразуются в код.
5. Включается вся UDF... т.е. все равно что если ты скопируешь весь код UDF и вставишь в скрипт.
6. Да сжимается.

[box title=После компиляции в консольке] File size Ratio Format Name
-------------------- ------ ----------- -----------
646144 -> 300544 46.51% win32/pe WOW.exe[/box]


P.S. Если что не так поправьте... :smile:

P.S.S. Вопрос для меня тоже интересный, потому, что есть предложения, что-нибудь написать, но так, чтобы не разобраться в коде после декомпиляции... где-то на http://ithappens.ru/ встречал такую вещь... там люди перед компиляцией все переменные прогнали через автозамену...
Код:
;было как-то так 
$rezultat = $Chslo1*$Chislo2
;получили в замен:
$____ = $_____*$______
 

SyDr

Сидра
Сообщения
651
Репутация
158
1) Ничего. Он сжимается и "шифруется". (Исключение - FileInstall)
2) Ничего. Остаются, как есть.
3) Ничего. Остаются, как есть.
4) Сжимаются, "шифруется" и включаются в файл.
5) Полностью.
6) Да.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
SyDr [?]
2) Ничего. Остаются, как есть.
3) Ничего. Остаются, как есть.
Откуда информация?
Насколько мне известно (с обсуждений на офф. форуме), коментарий, пустые строки, пробелы и табуляция полностью удаляются.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
а как же ключевые слова тогда отделены друг от друга?
Я имел в виду пробелы от начала строки, или после неё (вместо табов).
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
:laugh:
Провел простой тест.
В один рабочий скрипт вставил 55000 строк комментариев. итого: 4 500 000 знаков. Скомпилировал exe-файл.
Exe c комментариями = exe без комментариев до байта... и в разы меньше исходника... :D

P.S. Тоже самое с 1000 строк пробелов между строчками кода.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
gora
При использовании AutoIt3Wrapper попробуй директивы

Код:
#AutoIt3Wrapper_Run_Obfuscator=y
#Obfuscator_Parameters=/StripOnly /SF /SV /CV=0 /CF=0 /CS=0 /CN=0


Тогда при компиляции из включаемых UDF удалятся неиспользуемые функции и глобальные переменные и exe становится меньше.
 

SyDr

Сидра
Сообщения
651
Репутация
158
CreatoR сказал(а):
SyDr [?]
2) Ничего. Остаются, как есть.
3) Ничего. Остаются, как есть.
Откуда информация?
Насколько мне известно (с обсуждений на офф. форуме), коментарий, пустые строки, пробелы и табуляция полностью удаляются.
Мда... Сглупил... Мне что-то показалось, что компилятор вообще никаких оптимизаций не производит.
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
Почитал и понял, что единого мнения у специалистов нет, хотя контуры ответов я уже получил.
Уточню п.4 относится к FileInstall, а п.6 не относится к UPX сжатию. Про UPX сжатие stub-а я знаю и не использую его, меня интересует используется ли какое-либо сжатие при компиляции (что за меню Compression в Aut2exe, что оно сжимает)?
AZJIO [?]
При использовании AutoIt3Wrapper
Спасибо, но я его не использую. Он, как оказалось, некорректно работает с ресурсами (ProductVersion, FileVersion) и я использую батник для компиляции (по совету данному на форуме).

В ПМ ни кто не стукнет? Это так сложно или ни кто не хочет признаться в наличии у него декомпилятора? Я обещаю, что вас не сдам. Могу дать честное слово (больше на этом форуме у меня ни чего нет ;) )
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
gora
Можно запускать Obfuscator из ком-строки с ключами (без AutoIt3Wrapper), хотя я использую Au3PP.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Провел ещё эксперимент с FileInstal()
С картинкой и видео (они, как правило очень плохо сжимаются архиваторами)
С txt (они как правило ужимаются очень хорошо)
Скрипт без FileInstal с 1-й строчкой кода:
295Kb
Скрипт с картинкой bmp весящей 1,37Mb.(Winrar ужал до 670kb)
1.375Mb... картинку ужимает но не сильно..
BMP вдогонку с txt-файлом весом 1Mb.(Winrar ужал txt до 1Kb)
1.376Mb...
Думаю ответ исчерпывающий? :smile:
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
zlo-kazan [?]
Скрипт без FileInstal с 1-й строчкой кода:
295Kb
Уберите в своих экспериментах UPX сжатие (судя по размеру оно у Вас включено). Меня интересует сжатие при компиляции самим компилятором, а не UPX-ом, о чем я уже писал выше
gora [?]
используется ли какое-либо сжатие при компиляции (что за меню Compression в Aut2exe, что оно сжимает)?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Без UPX. Теже яйца только вид с боку:

632kb - Без Вложений
1799kb - C Картинкой
1801kb - C Картинкой и txt
634kb - С txt
1407kb - Картинка
165kb - Текстовый файл

P.S.
Поигрался с Compression в Aut2exe... как раз сжимает вложеные файлы... Пример наверху с Lowest.
C HighHest ужимает c 1801kb до 1742kb. А для 632(без вложений) изменений нет.
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
zlo-kazan [?]
как раз сжимает вложеные файлы...
А сам скрипт? Логично предположить, что и он должен сжиматься. Эксперименты конечно вещь хорошая, но... Неужели ни кто не владеет этой информацией, так сказать, на "теоретическом" уровне?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
:-\ Ошибся чуток... (F5 не нажал)
Сам код тоже ужимается без UPX...
(Без вложений где-то 100 строк кода)
Lowest 715Kb
Low 704Kb
Normal 699Kb
High 696Kb
Highest 694Kb
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
1 Переводится в ассамблер
2 С ассамблера в машинный код
3 Записывается в файл
4 Сжимается

Компиляторы

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

Виды компиляторов:
Векторизующий. Компилирует исходный код в машинный код для компьютеров, оснащённых векторным процессором.
Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.
Диалоговый. См.: диалоговый транслятор.
Инкрементальный. Повторно транслирует/компонует фрагменты программы и дополнения к ней без перекомпиляции всей программы.
Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.
Компилятор компиляторов. Компилятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.
Отладочный. Устраняет отдельные виды синтаксических ошибок.
Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.
Самокомпилируемый. Написан на том же языке, с которого осуществляется компиляция.
Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Важными составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.

P.S. Сам компилятор содержит 100% интерпретатора
 
Верх