Топ 5: лучшие библиотеки с открытым исходным кодом php obfuscator

Что такое обфускация

Обфускация — это изменение исходного кода таким образом, чтобы он становился трудно понимаемым, но чтобы при этом не изменялась его функциональность. Обфускация применяется для исходного кода на интерпретируемых (а не компилируемых) языках программирования. То есть это JavaScript, PHP, обфускация может применяться для HTML (хотя это язык разметки, а не программирования), CSS и других, программы на которых не компилируют, а запускают в виде простых текстов.

Особенно актуальна обфускация для JavaScript, поскольку в отличии, например, от того же PHP, который выполняется на веб сервере, JavaScript загружается в браузер и каждый пользователь может иметь доступ к скриптам.

Обфускация использует разные приёмы. Один из них — это удаление пробелов. Это называется минимизацией кода и используется не только для запутывания, сколько для ускорения скачивания скриптов. Хотя в таком коде становится действительно трудно разобраться.

Часто при обфускации код превращается в бессмысленный набор функций и строк в которых невозможно разобраться, но которые в конечном счёте делают ровно то же самое, что и исходный код. Но есть и действительно потрясающие примеры обфускации, например, JSFuck может отобразить любой JavaScript код с помощью всего лишь шести следующих символов []()!+

К примеру, следующий код является рабочим JavaScript кодом:

[]+[])]+(]+[]])+]]+(![]+[])+!+[]]+(!![]+[])]+(!![]+[])+!+[]+!+[]]+(!![]+[])]]+[])]+(]+[]
])+]]+(![]+[])+!+[]]+(!![]+[])]+(!![]+[])+!+[]+!+[]]+
(!![]+[])]]+[])+!+[]+!+[]]+(!![]+[]+[])]+(]+[]])+]]+(![]+[])+!+[]]+(!![]+[])]+(!![]+[])+!+[]+!+[]]+(!!+[])]])+]]+([]]+[])]+(![]+[])+!+[]+!+[]]+(!![]
+[])]+(!![]+[])]+([]]+[])]+([]+[])]+(]+[]])+]]+(![]+[])+!+[]]+(!![]+[])]+(!![]+[])+!+[]+!+[]]+(!!
[]+[])]]+[])+!+[]+!+[]]+(!![]+[])]+(!![]+[]+[])]+(]+[]])+]]+(![]+[])+!+[]]+(!![]+[])]+(!![]+[])+!++!+[]]+(!![]+[])]])+]]+(!![]+[])]]((![]+[])]+(!+[])+!+[]]+(!![]+[])+!+[]+!+[]]+(!![]+[])]+(!![]+[])]+(!
[]+[]+[])]+(]+[]])+]]+(![]+[])+!+[]]+(!![]+[])
]+(!![]+[])+!+[]+!+[]]+(!![]+[])]])+!+[]+]]+]+(
!![]+[]+[])]+(]+[]])+]]+(![]+[])+!+[]]+(!![]+)]+(!![]+[])+!+[]+!+[]]+(!![]+[])]])+!+[]+]])()

Обфускация используется как легитимными пользователями, которые хотят защитить свои идеи и свой код от воровства, так и хакерами для затруднения анализа их приёмов и программ.

PHP Обфускатор Нанеу

Это «обфускатор» для PHP-кода PSR / OOp. В отличие от других обфускаторов, которые часто используют (обратимую) обфускацию на основе eval (), этот инструмент фактически анализирует PHP и обфускацирует имена переменных, методы и т. Д. Это означает, что такие инструменты, как UnPHP, не могут быть отменены.

Эта библиотека была написана из-за необходимости запутывать источник для частной библиотеки, которая по разным причинам не могла быть разделена без шагов, чтобы защитить источник от посторонних глаз. Технически невозможно «зашифровать» исходный код PHP, сохраняя при этом возможность запускать его в стандартной среде выполнения PHP. Такие инструменты, как Zend Guard, используют плагины времени выполнения, но даже они не обеспечивают реальной безопасности. Хотя этот инструмент не делает код PHP невозможным для чтения, он сделает его значительно менее разборчивым. Он совместим с PHP 5.3, 5.4 и 5.5, но для работы требуется PHP 5.4+.

Если вам известен еще один замечательный инструмент / библиотека с открытым исходным кодом для запутывания PHP-кода, пожалуйста, поделитесь им с сообществом в поле для комментариев.

5 последних уроков рубрики «PHP»

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак

В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение

В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

7. UglifyJS

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

В плане деобфускации UglifyJS умеет делать сжатый код JavaScript читаемым.

Установка в Kali Linux

sudo apt install uglifyjs

Установка в BlackArch

sudo pacman -S uglify-js

Пример запуска: для улучшения вида файла используется опция -b; файл (или несколько файлов) нужно указывать перед опциями:

uglifyjs medium.js -b

Также программа может обрабатывать файлы переданные по стандартному вводу:

cat medium.js | uglifyjs -b

Другие опции и возможности на странице https://kali.tools/?p=5594

3. Универсальный деобфускатор JavaScript кода de4js

de4js — это деобфускатор исходного кода JavaScript и распаковщик.

Поддерживает (деобфусцирует) результат работы следующих инструментов, сервисов, методов:

  • Eval, используются, например, в Packer, WiseLoop
  • Array, используются, например, в Javascript Obfuscator, Free JS Obfuscator
  • _Number
  • Packer
  • Javascript Obfuscator
  • Free JS Obfuscator
  • Obfuscator.IO (но не всегда срабатывает, так как этот сервис часто обновляется, что требует обновление деобфускатора)
  • My Obfuscate
  • Кодирование URL, используются, например, в bookmarklet
  • JSFuck
  • JJencode
  • AAencode
  • WiseLoop

Информацию об установке и запуске вы найдёте на странице программы: https://kali.tools/?p=6514

de4js запускается как небольшой сервер к которому можно подключиться веб-браузером. То есть у программы веб-интерфейс.

Перейдите в папку с программой:

cd bin/de4js

Запустите сервер:

npm start

В веб-браузере откройте адрес http://127.0.0.1:4000/de4js/

В веб-интерфейсе выберите один из способов ввода обфусцированного исходного кода:

  • String — вставить код в окно веб-интерфейса
  • Local File — выбрать локальный файл на компьютере
  • Remote File — указать адрес удалённого файла

Ниже вы можете указать способ, которым выполнялась обфускация кода JavaScript:

  • None
  • Eval
  • Array
  • Obfuscator IO
  • _Number
  • JSFuck
  • JJencode
  • AAencode
  • URLencode
  • Packer
  • JS Obfuscator
  • My Obfuscate
  • Wise Eval
  • Wise Function
  • Clean Source
  • Unreadable

Либо вы можете нажать кнопку «Auto Decode», чтобы de4js автоматически определила способ обфускации. Деобфусцированный код будет показан в окне ниже.

Дополнительные опции, которые вы можете включить или выключить:

  • Line numbers — показывать номера строк
  • Format Code — форматирование и подсветка синтаксиса кода
  • Unescape strings — перевод строк из экранированных последовательностей в нормальный вид
  • Recover object-path — восстановить object-path
  • Execute expression — вычислить выражения
  • Merge strings — объединить (слить) строки
  • Remove grouping — удаление группировки

de4js онлайн: https://lelinhtinh.github.io/de4js/

Нужно ли обфусцировать код?

Основным условием использования обфускатора является то, что ваш исходный код в JavaScript должен стать недоступным для чтения. Когда же это может понадобиться? Приведем несколько реальных примеров, когда код обязательно должен быть запутан.

Когда вы продаете шаблон сайта

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

Это означает, что в своей работе вы будете использовать HTML, CSS и JS. Поэтому, если не обфусцируете код, каждый сможет загрузить ресурсы из предварительного просмотра вашего веб-сайта и работать с ними, не покупая шаблон.

Когда вы используете JavaScript в браузерных играх

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

PCL’s PHPiD 1.0 Public Release

Скриншот программы PCL’s PHPiD

PCL’s PHPiDPCL’s PHPiDphpid.exephpid_ce.exe

  • TrueBug PHP Encoder 1.0.2 (incl. GZIP), 1.0.3/1.0.4
  • NuSphere NuCoder
  • Zend Encoder / Zend SafeGuard Suite
  • ByteRun Protector for PHP
  • SourceCop (incl. protection module)
  • CodeLock (incl. protection module)
  • SourceGuardian for PHP
  • PHPCipher
  • phpSHIELD
  • CNCrypto
  • PHTML Encoder
  • ionCube PHP Encoder
  • PHP LockIt! 1.8, 2.0 (incl. GZIP)
  • Obfusc (Basic/Normal, ShowObfuscate)
  • Zorex PHP CryptZ (incl. protection module)
  • gencoder
  • DWebEncoder
  • Free PHP Encoder
  • PHP Compact
  • TrueBug PHP Obfuscator 1.1
  • PHPCoder / eAccelerator
  • FREE Encrypted PHP
  • Free Online PHP Obfuscator
  • BCompiler
  • IcePHP
  • ZenCrypt
  • AROHA PHPencoder
  • PHP Locker
  • Easy PHP Encrypt
  • CodeTangler Pro
  • HidePHP
  • Turck MMCache Encoder
  • Rucros PHP Obfuscator
  • Encode PHP
  • G-Encoder
  • NET-TEC PHP-ENCODER
  • Semantic Designs Obfuscator
  • PHP Defender
  • PHP LockIt! (Obfuscation mode)
  • Raizlabs PHP Obfuscator
  • POBS — PHP Obfuscator
  • Processed by De-Zender
  • PHP Obfuscator by DX

статьеформу обратной связиphpid_ce.bat
PCL’s PHPiD GUI + Console v1.0 Public ReleasePHPiD.1.0.Public.Release-PCL.zip (22,020 bytes)

Вы — жадина

Всегда обсуждайте свой код с другими программистами.

Лучший способ приобретения новых навыков – это обсуждение вашего кода с другими программистами. Это можно сделать несколькими способами: написать своё учебное пособие или создать приложение с открытым исходным кодом. Если вы ещё не доросли до такого уровня, тогда наверняка вам следует открыть форум, где будете помогать новичкам приобретать новые навыки, а заодно развиваться сами.

Вы спросите, — “Как помощь другим может пойти мне на пользу?”. Обычно, если вы выкладываете решение задач, которое могут быть оптимизированы, опытные программисты включиться в игру и предложить несколько решений. Выгода уже должна быть вам понятна. Вы не только предлагаете новичкам ваши знания, вы так же точите свои собственные навыки, путём обсуждения вашего кода с опытными программистами. Такой подход поможет вам развиваться в нужном направлении.

Межсайтовый скриптинг (XSS)

Межсайтовый скриптинг — одна из самых опасных внешних атак, выполняемых путем внедрения любого вредоносного кода или скрипта на сайт. Данная атака может повредить ядра вашего приложения, так как хакер может внедрить любой код в ваше приложение, даже не давая вам подсказку.

Эта атака в основном происходит на тех веб-сайтах, которые принимают и представляют пользовательские данные.

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

Вы можете противостоять этой атаке, используя специальные символы HTML & ENT_QUOTES в кодах приложения. Используя ENT_QUOTES, вы можете удалить опции одинарных и двойных кавычек, что позволяет исключить любую возможность межсайтовых скриптовых атак.

Для этого на языке PHP есть функции:  или 

Вы не правы

Любыми способами избегайте усложнения своего кода.

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

Этот парень был экспертом в написании кода, который мог запутать так, что мало не покажется.

Файлы, которые он писал это прекрасный пример того, что их автор придерживается мнения – «Чем труднее, тем лучше». Ну, для того, чтобы нюбы и не пытались что-то понять.

Есть очень распространённое мнение о том что, “Если ты не понимаешь, как работает этот код, то тебе стоит задуматься твоё ли это дело”.

Это мнение абсолютно не выдерживает никакой критики, когда речь идёт о командных проектах, да и не только. Люди, которые придерживаются такого же мнения, как и мой знакомый, забыли, что и они когда-то были новичками. Технологии развиваются, и им когда-то тоже потребуется помощь, чтобы в чём-то разобраться. Они не правы.

Старайтесь писать свой код понятным до безобразия – во всех смыслах. Трудный код не делает вас крутыми или более сообразительными. Вы в этом не правы.

Всегда используйте SSL-сертификаты

Чтобы обеспечить сквозную защищенную передачу данных через интернет, всегда используйте SSL-сертификаты в своих приложениях. Это всемирно признанный стандартный протокол, известный как протокол передачи гипертекста (HTTPS), для безопасной передачи данных между серверами.

Используя сертификат SSL, ваше приложение получает безопасный путь передачи данных, который почти не позволяет хакерам проникнуть на ваши серверы.

Все популярные браузеры, такие как Google Chrome, Safari, Firefox, Opera и другие, рекомендуют использовать сертификат SSL, поскольку он обеспечивает зашифрованный протокол для передачи, получения и дешифрования данных через интернет.

5. Деобфускация Obfuscator.IO

Автор сайта Obfuscator.IO ищет программы, которые способны деобфусцировать созданный на этом сервисе код и постоянно меняет, исправляет обфускацию, в результате чего инструменты по деобфускации перестают работать. Поэтому инструменты автоматической деобфускации (включая de4js) обычно отстают от самой последней версии, то есть могут деобфусцировать код созданный ранее на Obfuscator.IO, но не могут деобфусцировать последнюю версию кода. Но это не означает, что это надёжный инструмент чтобы обезопасить свой исходный код — регулярно появляются проекты, которые обходят все методы деобфускации. К тому же, специалисты на заказ могут деобфусцировать любой код.

Обфускация кода

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

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

Обфускация — это всего лишь дополнительный способ обезопасить код программного продукта, который часто используется с дополнительными инструментами защиты, такими как:

  • шифрование программного кода;
  • установка подлинности скриптов;
  • «водяной знак» в коде;
  • выполнение программы на стороне сервера и др.

В качестве единственного инструмента защиты кода, обфускация не способна дать 100%-ую защиту.

Межсайтовая подделка запроса (CSRF)

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

Атака заставляет пользователей изменять обычные запросы на измененные деструктивные, такие как перевод средств, удаление всей базы без каких-либо уведомлений и т. д.

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

Между тем, вы также можете использовать две защитные меры для усиления безопасности вашего приложения, т.е. Используя запросы GET в своем URL и гарантируя, что запросы без GET генерируются только из вашего клиентского кода.

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

Безопасная система авторизации

Однако, данная схема имеет недостаток — пароль используется в открытом виде, а это небезопасно. Всё что идёт дальше — только для ознакомления, пока это слишком сложно реализовать без хорошей архитектуры и полноценной базы данных.

Хеширование паролей

В более совершенных системах авторизации используют хеш от пароля.

Если по-простому, то это такое вычисленное значение, полученное в результате выполнения над паролем определенных манипуляций. В результате этих действий мы получаем строку, из которой нельзя восстановить исходный пароль.

Но мы можем снова повторить над паролем те же действия и сравнить получившиеся значения. То есть сравниваются хеши, а не исходные пароли. И в базе данных тоже хранят хеши, а после того как от клиента пришел пароль в открытом виде, вычисляют его хэш и сравнивают со значением в базе. Если они равны — значит от пользователя пришел верный пароль.

Для чего это делается? Да просто потому, что если сайт будет каким-то образом взломан, то злоумышленник в базе данных не найдёт паролей в открытом виде — только хеши. А так как из хеша получить пароль довольно сложно (при условии, что хеш-функция надежна и используется надёжный пароль), то пароль он не узнает. Следовательно:

  1. злоумышленник не сможет использовать пароль для входа на взломанный сайт;
  2. он также не сможет использовать этот пароль для входа под тем же логином и паролем в другие места (ведь довольно часто люди используют одинаковые пароли для всего).

Вычисляются хеши с помощью хеш-функции. Хеш-функции при этом вычисляют хеши следуя алгоритмам хеширования. Сейчас в PHP для хеширования следует использовать функцию password_hash(), а для проверки хеша — password_verify(). Если вы в каком-то уроке увидите, что для хеширования паролей используется md5 — бегите оттуда, такие хеши вскрываются за несколько минут, она устарела ещё лет 10 назад.

Авторизационные токены

Помимо хеша пароля в базе данных так же принято хранить так называемые авторизационные токены (AuthToken). Это комбинация символов (желательно подлиннее и с кучей кракозябр), которая генерируется при успешной авторизации пользователя и сохраняется в базе данных. А ещё она и пользователю отправляется.

И потом пользователь с помощью cookie передает этот токен на сервер, где он сравнивается со значением в базе данных. Если они равны, то считаем пользователя авторизованным. Для чего? Дело в том, что куки могут быть похищены злоумышленниками (очень многими способами, не будем об этом в этой статье, кому интересно — погуглите). И если злоумышленнику попадет в руки токен — он не сможет получить исходный пароль

О том, почему это так важно, я уже объяснил

Распаковка и расшифровка скриптов JavaScript

  1. var encrypted=’зашифрованные данные’;
  2. function decrypt(str) {
  3. // функция расшифровки или распаковки
  4. }
  5. // Выполнить расшифрованный скрипт
  6. eval(decrypt(encrypted));

Code (JavaScript) : Убрать нумерациюВыделить код

  1. var encrypted=’зашифрованные данные’;
  2. function decrypt(str) {
  3. // функция расшифровки или распаковки
  4. }
  5. // Вывести на экран расшифрованные данные
  6. document.write(decrypt(encrypted));

eval()document.write()eval()alert() Code (HTML) : Убрать нумерациюВыделить код

  1. <html>
  2. <head><title>JavaScript Decoder</title></head>
  3. <body>
  4. <script type=»text/javascript»>
  5. // Функция записи в лог результатов расшифровки
  6. function decoder(str) {
  7.   document.getElementById(‘decoded’).value+=str+’\n’;
  8. }
  9. </script>
  10. <!— Окно лога —>
  11. <textarea id=»decoded» style=»width:900px; height:500px;»></textarea>
  12. <script type=»text/javascript»>
  13. // Сюда вставить зашифрованный скрипт, предварительно
  14. // заменить в нем все вызовы eval() и document.write() на decoder().
  15. </script>
  16. </body>
  17. </html>

evaldecoder Code (HTML) : Убрать нумерациюВыделить код

  1. <script type=»text/javascript»>
  2. // Сюда вставить зашифрованный скрипт, предварительно
  3. // заменить в нем все вызовы eval() и document.write() на decoder().
  4. decoder(function(p,a,c,k,e,r){e=function(c){return(c<a?»:e…
  5. </script>

статье про деобфускацию Code (JavaScript) : Убрать нумерациюВыделить код

  1. hp_ok=true;function hp_d01(s){ …вырезано… o=ar.join(«»)+os;document.write(o)

Code (JavaScript) : Убрать нумерациюВыделить код

  1. <script type=»text/javascript»>
  2. // Сюда вставить зашифрованный скрипт, предварительно
  3. // заменить в нем все вызовы eval() и document.write() на decoder().
  4. hp_ok=true;function hp_d01(s){ …. o=ar.join(«»)+os;decoder(o);
  5. hp_d01(unescape(«>QAPKRV%22NCLEWC ….
  6. hp_d01(unescape(«>QAPKRV%22NCLEWCEG? HctcQa …
  7. hp_d01(unescape(«>`mf{%22`eamnmp? !DDDDDD %22v …
  8. </script>

Eval JavaScript Unpacker 1.1Eval.JavaScript.Unpacker.1.1-PCL.zip (12,073 bytes)
Run script
Malzilla за работой

eval_tempShow eval() resultsFormat code
Скрипт успешно расшифрован и отформатирован

Способы минимизации и обфускации в JavaScript и онлайн-сервисы

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

Минимизация кода — это процесс сжатия исходного кода с целью экономии памяти за счет уменьшения количества символов и пробелов в коде.

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

В случае с обфускацией вам необходимо использовать тот же инструмент, который работал над исходным кодом. Этот процесс называется деобфускацией.

Давайте разберем это на примере:

function sum(num1,num2) {

  return num1 + num2;

}

sum(2,3);

После минимизации приведенный выше код будет выглядеть примерно так:

function sum(u,n){return u+n}sum(2,3);

Как видите, несмотря на то, что код преобразован и некоторые лишние символы удалены, его логика все еще понятна. А при обфускации код будет выглядеть примерно так, как показано ниже:

var _0x2e0d=;(function(_0x138fb9,_0x2e0dfe){var _0x2c4a47=function(_0x35b774)

{while(--_0x35b774){_0x138fb9(_0x138fb9());}};_0x2c4a47(++_0x2e0dfe);}(_0x2e0d,0xb6)

);var _0x2c4a=function(_0x138fb9,_0x2e0dfe){_0x138fb9=_0x138fb9-0x0;var _0x2c4a47=_0x2e0d;

return _0x2c4a47;};function _0x38c633(_0x156bdc,_0x188515){var _0x5db170={};_0x5db170=function(_0x5055cf,_0x480ab2){return _0x5055cf+_0x480ab2;};var _0x58cfc2=_0x5db170;return _

0x58cfc2(_0x156bdc,_0x188515);}_0x38c633(0x2,0x3);

Теперь, когда стало ясно, что представляет собой обфускация JS в более широком контексте, давайте немного подробнее рассмотрим, что конкретно она делает с исходным кодом.

Простая обфускация: инструменты

Самый популярный способ запутывания кода — использование инструментов минимизации и обфускации.

Среди популярных:

Они превращают код:

unction createParagraph() {
  var para = document.createElement('p');
  para.textContent = 'You clicked the button!';
  document.body.appendChild(para);
}

В следующий вид: 

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d=k||c.toString(a)}k=}];e=function(){return'\\w+'};c=1};while(c--){if(k){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k)}}return p}('d c(){b 0=1.a(\'9\');0.8=\'7 6 5 4!\';1.3.2(0)}',14,14,'para|document|appendChild|body|button|the|clicked|You|textContent|p|createElement|var|createParagraph|function'.split('|'),0,{}))

Сложная обфускация: модули и плагины

Теперь давайте посмотрим на пример более сложной обфускации. Вы можете получить такой же результат с помощью модуля javascript-obfuscator, а также плагинов:

  • webpack-obfuscator;
  • gulp-javascript-obfuscator;
  • grunt-contrib-obfuscator.

Например, у нас есть исходный код:

function hi() {
  console.log("Hello World!");
}
hi();

Мы получим следующий результат:

$=~[];$={___:++$,$$$$:(![]+""),__$:++$,$_$_:(![]+""),_$_:++$,$_$$:({}+""),$$_$:($+""),_$$:++$,$$$_:(!""+""),$__:++$,$_$:++$,$$__:({}+""),$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")+($._$=$.$_)+($.$$=($.$+""))+((!$)+"")+($.__=$.$_)+($.$=(!""+""))+($._=(!""+""))+$.$_+$.__+$._$+$.$;$.$$=$.$+(!""+"")+$.__+$._+$.$+$.$$;$.$=($.___);$.$($.$($.$$+"\""+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"()\\"+$.$__+$.___+"{\\"+$.$__+$.___+$.$$__+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+$._$+(![]+"")+$.$$$_+"."+(![]+"")+$._$+"\\"+$.__$+$.$__+$.$$$+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")+(![]+"")+$._$+"\\"+$.$__+$.___+"\\"+$.__$+$._$_+$.$$$+$._$+"\\"+$.__$+$.$$_+$._$_+(![]+"")+$.$$_$+"!\\\");\\"+$.$__+$.___+"}\\"+$.$__+$.___+"\\"+$.__$+$.$_$+$.___+"\\"+$.__$+$.$_$+$.__$+"();"+"\"")())();

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

Преобразовать код можно и онлайн, например, с помощью:

Что такое обфускация в JavaScript?

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

К примеру, есть код: 

function hello(name) {
    console.log('Hello, ' + name);
}
hello('New user');

Теперь рассмотрим тот же код, запутанный онлайн-обфускатором JavaScript:

eval(function(p,a,c,k,e,d){e=function(c){returnc};if(!''.replace(/^/,String)){while(c--){d=k||c}k=}];e=function(){return'\\w+'};c=1};while(c--){if(k){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k)}}return p}('3 0(1){2.4(\'5, \'+1)}0(\'7 6\');',8,8,'hello|name|console|function|log|Hello|user|New'.split('|'),0,{}))

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

Вы не придерживаетесь никакой модели

Когда вы пишите приложения, вы точно должны иметь представление о его структуре.

Вы всегда должны прекрасно понимать и придерживаться какой-то структуры. Сейчас я не имею в виду MVC или другие модели. Я говорю о том, что вы должны прекрасно понимать и уметь классифицировать все ваши компоненты, чтобы не допустить хаоса.

Если вы придерживаетесь какой-то структуре, многие решения, которые вам необходимо принять, не будут долго себя ждать. Если кто-то будет смотреть структуру вашего проекта, то он должен с лёгкостью понимать что и откуда берётся.

Это не займёт много времени, однако значительно увеличит ясность вашего приложения.

Якпро ПО

YAK Pro — это еще один продукт-убийца, бесплатный инструмент с открытым исходным кодом, опубликованный под лицензией MIT. Этот инструмент анализирует php с лучшим из существующих php-парсеров PHP-Parser 4.x, который представляет собой потрясающую библиотеку разбора php, написанную nikic. Вам просто нужно скачать zip-архив и распаковать его в подкаталоге PHP-Parser или создать git-клон. его инструмент был написан для того, чтобы запутать чистые исходники php. он не предназначен для использования с html и встроенным php внутри (используйте на свой страх и риск … вы можете попытаться деактивировать перестановки операторов …). Вы все еще можете встраивать HTML в php, используя echo

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

Решение

Продумываем архитектуру

Первое, о чём нам нужно подумать — это то, как будут храниться элементы этой системы, и сколько их вообще будет.

Онлайн курсы

  • Курс HTML для начинающих
  • Курс PHP для начинающих
  • Курс MySQL для начинающих
  • Курс ООП в PHP

Все курсы

Начнем с простого — для начала у нас должно получиться 3 странички, которые мы описали в ТЗ.

Ещё нам потребуется функционал, который будет проверять, авторизован ли пользователь. Если мы перечитаем ТЗ, то поймём, что он используется в двух местах — и на главной странице и на странице авторизации. Значит, стоит вынести этот механизм в отдельный файл, и использовать его в двух местах сразу.

Ну и наконец, нам где-то нужно хранить самих пользователей, а именно — их логины и пароли. Создадим для этого простенькую «базу данных» — массив, с набором пар логин-пароль. Это ещё один файл.

Новые вакансии

  • PHP разработчик в международную компанию До 500000₽
  • Senior PHP Developer 1700$ — 2500$
  • Программист PHP Javascipt: разработка сервиса аналитики Маркетплейсов 60000₽ — 200000₽
  • Full-stack разработчик От 100000₽
  • веб-дизайнер 15000₽ — 50000₽

Все вакансии
Разместить вакансию бесплатно

База данных

Ну вот, всё продумали, осталось только написать. Предлагаю начать с нашей базы данных. Создадим файл usersDB.php и запишем в него несколько пользователей.

Функции проверки авторизации

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

В цикле мы пробегаемся по базе данных пользователей и пытаемся найти пользователя с переданными логином и паролем. Если такой пользователь в массиве найден — возвращаем true. Иначе — false.

Давайте теперь ещё напишем функцию, которая будет возвращать логин текущего пользователя. Эта функция будет проверять текущие значения cookie с ключами login и password с помощью уже существующей функции checkAuth. При этом если пользователь найдётся, то она вернёт его login, а иначе — null. Назовём эту нашу новую функцию getUserLogin.

На этом всю логику проверки логина мы описали. Теперь займёмся непосредственно страничками.

Главная страница

Создадим файл index.php. Для простоты примера мы будем использовать только строку с приветствием авторизованного пользователя, либо ссылкой на авторизацию. В этой странице нам потребуется функция проверки авторизации через cookie, поэтому здесь нужно подключить файл auth.php.

Наша главная страничка готова. Можно зайти на неё и убедиться, что мы не авторизованы.

Форма авторизации

Давайте теперь сделаем форму авторизации — создаём файл login.php и для начала набрасываем саму HTML-форму. Шаблон получился следующим.

Давайте теперь добавим логику проверки переданных данных.

Логика простейшая — если был отправлен POST-запрос, проверяем правильные ли логин и пароль были переданы.

Если нет — то создаём переменную $error, в которой пишем об ошибке авторизации. Позже в шаблоне выводим эту ошибку, если эта переменная объявлена.

Если же авторизация прошла успешно, мы устанавливаем cookie с ключами login и password, в которые помещаем значения из POST-запроса. После этого выполняем редирект на главную страницу.

Редирект делается с помощью заголовка в HTTP-ответе. Этот заголовок называется Location и выглядит следующим образом:

Для формирования заголовков в PHP используется функция header – ознакомиться с ней более детально вы можете здесь.

Теперь можно попробовать нашу страничку в действии. Давайте для начала введём несуществующую пару логина и пароля. Например, 123:123.

Мы увидим соответствующую ошибку.

Теперь давайте зайдем под пользователем user. В нашей БД для него указан пароль 123. Пробуем…

Успех! Нас автоматически перекинуло на главную страницу, где мы видим приветствие для данного пользователя!

Техническое задание

Начнём мы это дело с описания будущей системы. Пусть у нас будут следующие компоненты:

  1. Главная страница сайта с каким-либо содержимым. Вверху страницы выводится:
    • если пользователь авторизован: Добро пожаловать, %username%.
    • если пользователь неавторизован: Авторизация — слово является ссылкой, которая ведёт на форму авторизации.
      Авторизован пользователь или нет, определяется с помощью cookie.
  2. Страница с формой авторизации. Два инпута для логина и пароля и кнопкой «Вход». Если введены правильные логин и пароль, устанавливаются cookie со значениями переданных данных, а затем пользователя автоматически редиректит (перенаправляет) на главную страницу.
  3. Страница для разлогинивания — при переходе на неё cookie будут удаляться из браузера пользователя, а затем выполняется редирект на главную страницу.

6. JS Beautifier

Программа JS Beautifier улучшает внешний вид JavaScript кода за счёт переформатирования и проставления отступов. Также умеет распаковывать скрипты упакованные популярным пэкером от Dean Edward. Частично может деобфусцировать скрипты обработанные npm пакетом javascript-obfuscator. Применяется для улучшения читаемости JavaScript кода.

Программа доступна в виде онлайн сервиса от авторов: https://beautifier.io/

Установка JS Beautifier

Установка в Kali Linux

sudo apt install npm
sudo npm -g install js-beautify
js-beautify -h

Установка в BlackArch

Есть два варианта установки — из репозиториев и как NPM пакет. В репозиториях BlackArch доступна Python версия, её особенности в том, то html-beautify отсутствует вовсе, а css-beautify не устанавливается из-за ошибки. Также есть некоторые другие отличия.

Если вы хотите установить из стандартных репозиториев то выполните следующую команду:

sudo pacman -S python-jsbeautifier

Если вы хотите установить Node.js JavaScript версию, то выполните следующие команды:

sudo pacman -R python-jsbeautifier
sudo pacman -S npm
sudo npm -g install js-beautify
js-beautify -h

Установка в Windows

Начните с установки Python по статье «Как установить Python и PIP на Windows 10».

После установки Python и PIP выполните команды:

sudo pip3 install jsbeautifier
sudo pip3 install cssbeautifier

Использование:

jsbeautifier.py  <ВХОДНОЙ ФАЙЛ>

Например:

js-beautify -f medium.js

Все опции программ из набора инструментов JS Beautifier вы найдёте на странице https://kali.tools/?p=5581

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: