Как запутать JavaScript с помощью PHP?

Например, как я могу скрыть этот пример кода из:

/*
The code below will write
to a heading and to a paragraph,
and will represent the start of
my homepage:
*/
document.getElementById("myH1").innerHTML="Welcome to my Homepage";
document.getElementById("myP").innerHTML="This is my first paragraph.";

в форму:

var _0xcc34=["\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x6D\x79\x48\x31","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x57\x65\x6C\x63\x6F\x6D\x65\x20\x74\x6F\x20\x6D\x79\x20\x48\x6F\x6D\x65\x70\x61\x67\x65","\x6D\x79\x50","\x54\x68\x69\x73\x20\x69\x73\x20\x6D\x79\x20\x66\x69\x72\x73\x74\x20\x70\x61\x72\x61\x67\x72\x61\x70\x68\x2E"];document[_0xcc34[2]](_0xcc34[1])[_0xcc34[0]]=_0xcc34[3];document[_0xcc34[2]](_0xcc34[4])[_0xcc34[0]]=_0xcc34[5];

используя PHP?

Я знаю, что могу сделать это с помощью http://javascriptobfuscator.com/, но мне нужно сделать это внутри моего файла PHP , потому что он динамически изменяется.


person user2100505    schedule 28.08.2013    source источник
comment
запутывание бессмысленно.   -  person    schedule 29.08.2013
comment
Да, это возможно, но зачем скрывать то, что вы собираетесь отображать?   -  person    schedule 29.08.2013
comment
Возможно, есть лучшие решения, о которых я не знал, но это самый простой способ сделать это, и это решение меня порадует. Итак, может кто-нибудь помочь?   -  person user2100505    schedule 29.08.2013
comment
Подобные бессмысленные заявления не помогают. Более полезно прояснить кажущуюся бессмысленность (спасибо @MikeW). Иначе какой смысл?   -  person showdev    schedule 29.08.2013
comment
В настоящее время с помощью правильных инструментов они могут декомпилировать двоичные файлы C / C ++, и вот мы, пытаемся обфускировать javascript с помощью PHP. Единственный способ по-настоящему запутать что-то навсегда - это запереть это в своей коробке и позволить никому не использовать. Если он публичный, он уже публичный. Просто вопрос времени.   -  person Jack_of_All_Trades    schedule 29.08.2013
comment
Не желая, чтобы вас считали враждебным, что, по вашему мнению, вы могли бы написать, что стоит разорвать, если вам нужно задать такой вопрос? Подсказки: альфа-канал png, холст, динамически создаваемые элементы скрипта.   -  person enhzflep    schedule 29.08.2013
comment
Обфускация бессмысленна, поскольку дает ложное ощущение безопасности. Возможно, вы не сможете сразу увидеть, о чем сценарий, но обладая умеренными знаниями о JavaScript, вы можете легко воссоздать необфусцированный код. В конце концов, это только ухудшает вашу жизнь как разработчика: представьте себе отладку такого обфусцированного кода (на каком номере строки возникла эта ошибка?) Или нескольких сценариев, использующих один и тот же обфускатор (с возможно конфликтующими обфусцированными именами переменных). Вместо того, чтобы запутывать (фальшивую) безопасность, попробуйте минимизировать и сжать для времени загрузки!   -  person Mattias Buelens    schedule 29.08.2013
comment
Нет ничего плохого в том, чтобы знать, как это сделать. Оператор сам выяснит, имеет ли он какое-либо значение в реальных ситуациях. Почему бы просто не ответить на вопрос?   -  person cssyphus    schedule 29.08.2013
comment
Потому что безопасность через неизвестность - ужасная практика, и большинство респондентов не станут тратить на это время.   -  person Fabrício Matté    schedule 29.08.2013


Ответы (1)


OK. По теории о том, как запутать.

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

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

document.getElementById('string'); с ab(cd('fgevat'); лайками

function cd(s) { /* ROT13 implemented here*/ } function ab(s) { return document.getElementById(s); } ab(cd('fgevat');
  • вы можете использовать eval, чтобы избежать распаковки в чистый текст. и тогда ты можешь идти

нравится

function h(s) { /*implement hexdecode in an ugly way, and run eval() on the resulting string */} h('2020202066756e6374696f6e206364287329207b202f2a20524f54313320696d706c656d656e74656420686572652a2f207d2066756e6374696f6e206162287329207b2072657475726e20646f63756d656e742e676574456c656d656e74427949642873293b207d206162286364282766676576617427293b'); // which is the above code.

это все r = 1 штука. И это может быть сделано лучше с более глубоким пониманием языка, также это абсолютно тривиально для обратного

person Thomas Martin Klein    schedule 28.08.2013
comment
В целом я полностью согласен с вашим ответом. Однако 1) для обработки PHP вам нужен синтаксический анализатор, который действительно знает, как обрабатывать PHP; взлом строк и регулярные выражения не помогут; На практике OP не сможет этого сделать с PHP. И настоящие парсеры сложно найти / собрать (я знаю, построил, см. Мою биографию). 2) Примененные подходящие преобразования может быть очень трудно отменить, особенно если они перекрываются (выравнивание потока управления, кодирование данных в гнездах указателей, .... 3) Никто из моих знакомых в настоящее время не делает это с PHP. - person Ira Baxter; 29.08.2013