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这个类比较方便。