Whitespace Obfuscator لـ PHP

بعد قراءة مقال عن التعتيم في جافا سكريبت (أي الجزء الثالث من المقال) ، أصبحت مهتمة بعوب مشابه لـ PHP.

حول obfuscator الذي تمت مناقشته في المقال رمز JavaScript إلى غير مرئي (للوهلة الأولى) ، والذي يتكون من علامات تبويب ورمز مسافات.

خلاصة القول هي تقديم كل رمز للشفرة المصدرية كرمز لهذا الرمز المترجم إلى نظام ثنائي. ثم استبدل 1 بمسافات ، و 0 بعلامات جدولة (يمكنك بالطبع وبالعكس).

مع تنفيذ هذه الخوارزمية في PHP ، كل شيء بسيط ، كما هو الحال في JavaScript.

رمز التجويف:

function obfuscate($code) { $len = strlen($code); $obf = ''; for ($i = 0; $i < $len; $i++) { //        i-  $bin = decbin(ord($code[$i])); //      ,      0 $bin = ($binLen = strlen($bin) > 7) ? $bin : implode('', array_fill(0, 8 - strlen($bin), '0')) . $bin; //    1  ,  0        ,      $obf .= str_replace(array('1', '0'), array(chr(9), chr(32)), $bin); } return $obf; } 

يبدو أن كل شيء طبيعي هنا (إذا لم تدخل في التفاصيل) ، فسنقدم الآن مثالًا على استدعاء رمز غامض.

Deobfuscator ("فنان"

 function include_o($file) { $file = trim($file); //     if ( empty($file) || !is_readable($file) ) { throw new Exception("Filename is empty or file isn't readable"); } $string = file_get_contents($file); $len = strlen($string); $out = ''; for ($i = 0; $i < $len; $i++) { /* *  8      , *               */ $out .= chr(bindec(str_replace(array(chr(9), chr(32)), array('1', '0'), substr($string, $i, 8)))); $i += 7; } if (!empty($out)) { eval($out); } } 

يبدو أن القيمة التي يتم إرجاعها بواسطة الوظيفة ستكون "مختلطة" (إذا فهمت بشكل صحيح ، ثم باطلة - كيف سيكون جزء منها؟) ، ولكن هذا إذا دخلت في التفاصيل.

استنتاج

يبدو لي أن الأمر كان مقبولًا إلى حد ما ، لكن هذا النوع لا يزال لا يمكنه المطالبة بفاحش يعمل (ضمنيًا يُستخدم في الممارسة العملية) (أعرف ، لقد قيل شيء عادي). تم القيام به من أجل المتعة ، على الأقل كنت مهتمًا برؤية النتيجة.
شكرا لك حظا سعيدا

Source: https://habr.com/ru/post/ar458710/


All Articles