encode脚本和normal脚本混用的问题与解决方法
发布时间:2024-04-22 13:02:39
半年前第一次做脚本编码的时候,由于没有什么使用经验,于是在51js上询问了一下encode脚本和normal脚本混用是否有什么问题呢?结果没有得到任何有建设性的意见,这也至少说明了两个问题,一是没有人在意,二是就没有什么问题嘛。当然我更乐意于接受后一种结果,就开始了encode脚本和normal脚本的混合使用。
在这样的理解下做了很多的脚本,似乎也真的没有出现过什么问题,于是更加笃信自己当初的判断。结果又一次被IE暗算了,encode后的脚本和normal的脚本混和使用不是没有问题,也不是都有问题,只是在特定的条件下会出问题,真是晕死。看下面这个示例:
<html>
<head>
<title>JScript Encode Research</title>
<meta name="author" content="birdshome@cnblogs" />
</head>
<body>
<script language="jscript.encode" type="text/jscript.encode">
#@~^8gAAAA==~,P~,P,Pr(L^Ycw.WDWOza+Rtn/klo~xP6E mOkGUv#@#@&,~P,P~~, @#@&~,P~P,~,P~,P,lVDDcB}4%+1Y 2MWYKOXa+Rtnd/moBbi@#@&,P~P,~P,8I@#@&PP~~,P~P@#@&,P~,P,PP}4NnmDR\+k/CLP',WE mYbGU`*@#@&P~P~~,P~ @#@&P,P~~,PP~~,P~l^nMYcEr(L+1Yc\+k/CoBbI@#@&P,~P,PP,NIGjkAAA==^#~@
</script>
<script language="jscript.encode" type="text/jscript.encode">
#@~^FgEAAA==~,P~,P,P0!x1OkKx~2mG[`#,`8@#@&@#@&~~P,P,P~2U^KNnRa.WDWOza+R\nk/Co~{PW!x1YkKxvb@#@&P~P,P~~, @#@&~P,PP,~~P,P,.kOndkU+vv2 mG[Rw.GDWOXancHnk/mo+E#p@#@&,P~P,P~~)i@#@&@#@&,PP,~~P,2 mGNn t+d/mL+,'~W!xmOrKxc#@#@&,P~,P,PPP@#@&~P,P~P,P~~,PMrYSk ncBAx1W[+ \/dlTnB*i@#@&,PP~~,P~8p~,V0MAAA==^#~@
</script>
<script language="jscript" type="text/jscript">
function Normal() {}
Normal.prototype.Message = function()
{
WriteLine('Normal.prototype.Message');
};
Normal.Message = function()
{
WriteLine('Normal.Message');
};
</script>
<script language="jscript" type="text/jscript">
var msg = '.prototype.Message" Fail.<br>';
function WriteLine(msg) { document.write(msg + '<br><br>'); }
var o = new Object();
try { o.Message(); }
catch(e) { WriteLine('Call "Object' + msg + e.message); }
try { Object.Message(); }
catch(e) { WriteLine('Call "Object.Message" Fail. <br>' + e.message); }
var e = new Encode();
try { e.Message(); }
catch(e) { WriteLine('Call "Encode' + msg + e.message); }
Encode.Message();
var n = new Normal();
try { n.Message(); }
catch(e) { WriteLine('Call "Normal' + msg + e.message); }
Normal.Message();
</script>
</body>
</html>
把上面的代码存为一个*.htm文件,打开后得到结果为:
Call "Object.prototype.Message" Fail.
Object doesn't support this property or method
Call "Object.Message" Fail.
Object doesn't support this property or method
Encode.prototype.Message
Encode.Message
Normal.prototype.Message
Normal.Message
上面那两段jscript.encode的代码很简单,就是: Object.prototype.Message = function()
{
alert('Object.prototype.Message');
};
Object.Message = function()
{
alert('Object.Message');
};
function Encode() {}
Encode.prototype.Message = function()
{
WriteLine('Encode.prototype.Message');
};
Encode.Message = function()
{
WriteLine('Encode.Message');
};
如果我们把上面两段代码替换那个html中的两段jscript.encode的代码,后面的运行将不会出任何异常,会得到这样的输出: Object.prototype.Message
Object.Message
...
上面这些代码实例的试验,已经详细的说明了encode脚本代码的问题。就是,不能在非编码脚本中,引用编码脚本中导入到JScript内置对象上的原型(prototype)方法和静态方法。上面示例中的Object就是JScript的一个内置对象,我们分别导入了一个prototpye方法和静态方法Message()。而对于非内置对象Encode,我们在已编码代码中导入的prototype和static方法,都可以在非编码代码中正常的访问。
那么怎么访问内置对象的导入方法呢?其实解决起来也不复杂,只是比较繁琐。我们需要使用一些wrapper方法,把他们和被编码的代码放在一起,就可以在非编码代码中访问了,比如上面的Object的导入,我们可以这样包装它:
Object.prototype.Message = function()
{
WriteLine('Object.prototype.Message');
};
Object.Message = function()
{
WriteLine('Object.Message');
};
var obj = new Object();
function ObjectPrototypeMessage()
{
obj.Message();
}
function ObjectMessage()
{
Object.Message();
}
这时,我们就可以通过ObjectPrototypeMessage和ObjectMessage这样的wrapper方法访问到已编码代码中内置对象的导入方法了。
猜你喜欢
- Python入门 本系列为Python学习相关笔记整理所得,IT人
- 我对这两种连接方式认识不够深,似乎朋友们对此也没有定论。请问哪一种更好呢?DSN是采用数据源的连接方式,其使用方法是: Conn.
- 分享一个sql数据库面试题。问题:表 table1,主键为 ID,ID为自动编号(ID可能不连续),要求查询第31-40行记录,请问SQL语
- 为什么是三谈为什么是三谈呢?一是因为这真的是一个被说烂的话题,二是因为太师傅在n年前就写过这篇再谈iframe自适应高度。之所以再提该问题,
- 今天想使用pdf的切分软件实现pdf文件的切分,但是软件需要会员???好吧,,,,又要会员,这么简单的功能能难倒咱们程序员吗。俗话说自给自足
- 第一步:创建django项目打开终端,切换到期望所写项目的地址:cd python3_django_projects;输入命令:django
- 直方图介绍直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表
- <script language=javascript> function moveIt(obj){ var tableId;
- 什么是Urllib库Urllib是Python提供的一个用于操作URL的模块,我们爬取网页的时候,经常需要用到这个库。升级合并后,模块中的包
- 首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?  
- 本篇文章是作者关于在学习了《Python学习手册》以后,分享的学习心得,在此之前,我们先给大家分享一下这本书:下载地址:Python学习手册
- 引言本文讨论 ChatGTP 与 Node.js 的结合,由于最近在学 Remix, 考虑到 Remix 可以单独的作为 API 来使用,并
- 调用时输入参数如: www.jb51.net/表示删除www.jb51.net首页的缓存, www.jb51.net/test.
- 引言python的一个优势是有着大量自带和在线的模块(module)资源,可以提供丰富的功能,在使用这些模块的时候,如果每次都去网站找在线文
- 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为
- 今天再为大家提供一种方法:不需要安装Excel也可以导入到我们的SQL Server数据库。首先用SQL Server自身的数据转换功能把E
- windows环境下python2.7 脚本指定一个参数作为要检索的字符串例如: >find.py ./ hello# coding=
- 前言废话滑块验证码破解是一直都想搞的项目,毕竟多数网站都会采用滑块验证码,于是最近在修改论文的闲暇之余把这事儿给解决了。要搞现在的滑块验证码
- jenkins是什么? Jenkins是一个开
- 目录Python的安装VS Code配置Hello World测试调用Python函数string.split()第一次尝试第二次尝试第三次