C#得到JS表达式的值

  百姓网有一段js,内容如下:

View Code
        <script>___=(-~[]<<((__=-~-~[])))*(-~[]<<((___=-~__)))+(-~[]<<(___))*___+(-~[]<<(___))*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(___))+(-~[]<<(__))*(-~[]<<(-~[]))+(-~[]<<(-~[]))*(-~[]<<(___))+__+(-~[]<<(__))*___+(-~[]<<(__))*(-~[]<<(__))+(-~[]<<(___))*-~(____=-~___)+__+(-~[]<<(-~[]))*(-~[]<<(-~[]))+(-~[]<<(__))*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(__))+-~-~-~-~____+(-~[]<<(__))*(-~[]<<(__))+(-~[]<<(___))*(-~[]<<(__))+(-~[]<<(-~[]))*-~-~____+__+(-~[]<<(__))*(-~[]<<(__))+____+____+____*__+-~-~-~-~____*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(___))+-~-~-~____*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(__))+-~-~-~-~____+____+(-~[]<<(__))*-~-~-~-~____+-~[]+-~-~-~-~____+-~-~____*-~-~-~-~-~____+(-~[]<<(__))*-~-~-~-~____+(-~[]<<(___))*-~-~-~____+__+(-~[]<<(-~[]))*(-~[]<<(___))+___*-~-~-~____+____+(-~[]<<(-~[]))*(-~[]<<(-~[]))+-~-~-~-~-~____+(-~[]<<(__))*___+____*(-~[]<<(___))+(-~[]<<(__))*(-~[]<<(-~[]))+___*(-~[]<<(-~[]))+(-~[]<<(__))*(-~[]<<(-~[]))+____+-~____*(-~[]<<(-~[]))+0;document.write("<input type=\"hidden\" name=\"loadTimer\" value=\"" + ___ + "\" />");</script>

这一段代码看着很繁琐,不过我们可以直接截取出来表达式,然后使用C#模拟这段js得到运行结果,对我们来说只要能够得到这个值就可以了。下面是一个方法,这个方法可以得到js表达式的值:

        /// <summary>
        /// 得到JS表达式的值
        /// </summary>
        /// <param name="expression">JS表达式</param>
        /// <returns>JS表达式运行后的结果</returns>
        public static string GetJsValue(string expression)
        {
            using (var context = new JavascriptContext())//.net中的JS上下文
            {
                context.SetParameter("args", "");//设置一个js参数

                context.Run("args=" + expression);//运行表达式并且得到结果
                string result = context.GetParameter("args").ToString();//取出来参数运行后的值
                return result;
            }
        }

然后我们在需要得到js表达式值的地方把js表达式当作参数传递过去就可以得到结果,如下:

View Code
            string str = GetJsValue("(-~[]<<((__=-~-~[])))*(-~[]<<((___=-~__)))+(-~[]<<(___))*___+(-~[]<<(___))*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(___))+(-~[]<<(__))*(-~[]<<(-~[]))+(-~[]<<(-~[]))*(-~[]<<(___))+__+(-~[]<<(__))*___+(-~[]<<(__))*(-~[]<<(__))+(-~[]<<(___))*-~(____=-~___)+__+(-~[]<<(-~[]))*(-~[]<<(-~[]))+(-~[]<<(__))*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(__))+-~-~-~-~____+(-~[]<<(__))*(-~[]<<(__))+(-~[]<<(___))*(-~[]<<(__))+(-~[]<<(-~[]))*-~-~____+__+(-~[]<<(__))*(-~[]<<(__))+____+____+____*__+-~-~-~-~____*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(___))+-~-~-~____*(-~[]<<(___))+(-~[]<<(___))*(-~[]<<(__))+-~-~-~-~____+____+(-~[]<<(__))*-~-~-~-~____+-~[]+-~-~-~-~____+-~-~____*-~-~-~-~-~____+(-~[]<<(__))*-~-~-~-~____+(-~[]<<(___))*-~-~-~____+__+(-~[]<<(-~[]))*(-~[]<<(___))+___*-~-~-~____+____+(-~[]<<(-~[]))*(-~[]<<(-~[]))+-~-~-~-~-~____+(-~[]<<(__))*___+____*(-~[]<<(___))+(-~[]<<(__))*(-~[]<<(-~[]))+___*(-~[]<<(-~[]))+(-~[]<<(__))*(-~[]<<(-~[]))+____+-~____*(-~[]<<(-~[]))+0");
            Console.WriteLine(str);

JavascriptContext这个类比较方便。

posted @ 2012-10-05 10:08  金河  阅读(311)  评论(0编辑  收藏  举报