如何调试嵌入在页面中间的混淆 JavaScript

How do I debug obfuscated javascript embedded in the middle of a page?

本文关键字:中间 JavaScript 何调试 调试      更新时间:2023-09-26

我试图弄清楚这个页面是如何工作的。最值得注意的是,以下一段javascript如何生成出现在页面末尾的元素:

<div class="lienPlusCom">[ <script language="JavaScript">jsdchtml3('aºerh "=fecer¦ttr¦settecea-e_sivocikoap-se-sidroiana-serxupep--seti-edcohclo-tais-teored-pac-lemar1_1896psa.3 "x"=ditc00lMhpc_ianoCnnetC_m_trtceRlFettehcisiDelp_yamtH_mAlohcnoVruoTriLsoCsetnemmria "selcssaeil"=PnCsul"mosulP¹d oc etnemmria¦ºse¹a');</script> ]</div>

但是我的JavaScript调试技能相当有限。有没有人可以建议我如何在浏览器"去混淆"此代码后逐步执行此代码?我目前正在使用带有火虫的火狐进行大部分调试,但如果需要,我非常愿意切换到另一个工具。

Put

debugger;

您希望脚本停止的位置。然后你可以查看所有这些变量和元素以及所有这些东西,看看问题出在哪里。

JavaScript 正在这个长字符串上调用一个名为 jsdchtml3() 的函数:

'aºerh "=fecer¦ttr¦settecea-e_sivocikoap-se-sidroiana-serxupep--seti-edcohclo-tais-teored-pac-lemar1_1896psa.3 "x"=ditc00lMhpc_ianoCnnetC_m_trtceRlFettehcisiDelp_yamtH_mAlohcnoVruoTriLsoCsetnemmria "selcssaeil"=PnCsul"mosulP¹d oc etnemmria¦ºse¹a'
我们可以对jsdchtml3()进行一点

点去混淆:

jsdchtml3=function(s) {
    if (!jsdchtml3.p) {
        String.prototype.afca=String.prototype['ch'+'ar'+'At'];
        jsdchtml3.k='243524534235';
        jsdchtml3.ra=Array('º<','¹>','¦/');
        jsdchtml3.u=function(s) {
            if (!jsdchtml3.u.r) {
                jsdchtml3.u.r=Array();
                for (var i=0,a;i<jsdchtml3.ra.length;i++) {
                    a=jsdchtml3.ra[i].split('');
                    jsdchtml3.u.r[i]=Array(new RegExp(a[0],'gi'),a[1]);
                }
            }
            for (var i=0;i<jsdchtml3.u.r.length;i++)
                s=s.replace(jsdchtml3.u.r[i][0],jsdchtml3.u.r[i][1]);
            return s; 
        };
        jsdchtml3.r=function(a,b,c) {
            for (var j=c-1,o='';j>=0;j--)
                o+=a.afca(b+j);
            return o;
        };
        jsdchtml3.p=function(f,a) {
            var t=jsdchtml3.u(f),i=0,p=0,n,o='';
            while(p<t.length) {
                n=parseInt(a.afca(i++ % a.length));
                o+=jsdchtml3.r(t,p,n);
                p+=n;
            }
            return o;
        };
    }
    document.write(jsdchtml3.p(s,jsdchtml3.k));
};

这将做一个jsdchtml3.p(s,jsdchtml3.k) document.write,其中s是长字符串。通过函数遵循此控制流...有点混乱!