encode脚本和normal脚本混用的问题

简介:

  半年前第一次做脚本编码的时候由于没有什么使用经验于是在51js上询问了一下encode脚本和normal脚本混用是否有什么问题呢结果没有得到任何有建设性的意见这也至少说明了两个问题一是没有人在意二是就没有什么问题嘛。当然我更乐意于接受后一种结果就开始了encode脚本和normal脚本的混合使用。

    在这样的理解下做了很多的脚本似乎也真的没有出现过什么问题于是更加笃信自己当初的判断。结果又一次被IE暗算了encode后的脚本和normal的脚本混和使用不是没有问题也不是都有问题只是在特定的条件下会出问题真是晕死。看下面这个示例

None.gif < html >
None.gif < head >
None.gif     < title >JScript Encode Research </ title >
None.gif     < meta  name ="author"  content ="birdshome@cnblogs"   />
None.gif </ head >
None.gif < body >
ExpandedBlockStart.gif ContractedBlock.gif     < script  language ="jscript.encode"  type ="text/jscript.encode" > dot.gif
InBlock.gif        #@
~^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==^#~@
ExpandedBlockEnd.gif    
</ script >
ExpandedBlockStart.gif ContractedBlock.gif     < script  language ="jscript.encode"  type ="text/jscript.encode" > dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        #@
~^FgEAAA==~,P~,P,P0!x1OkKx~2mG[`#,`8@#@&@#@&~~P,P,P~2U^KNnRa.WDWOza+R\nk/Co~dot.gif{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==^#~@
ExpandedBlockEnd.gif    
</ script >
ExpandedBlockStart.gif ContractedBlock.gif     < script  language ="jscript"  type ="text/jscript" > dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
function Normal() dot.gif{} 
InBlock.gif        Normal.prototype.Message 
= function()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            WriteLine('Normal.prototype.Message');
ExpandedSubBlockEnd.gif        }

InBlock.gif        Normal.Message 
= function()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            WriteLine('Normal.Message');
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    
</ script >
ExpandedBlockStart.gif ContractedBlock.gif     < script  language ="jscript"  type ="text/jscript" > dot.gif
InBlock.gif        
var msg = '.prototype.Message" Fail.<br>';
InBlock.gif        function WriteLine(msg) { document.write(msg + '<br><br>'); }
InBlock.gif        
InBlock.gif        var o = new Object();
InBlock.gif        try { o.Message(); }
InBlock.gif        catch(e) { WriteLine('Call 
"Object' + msg + e.message); }
ExpandedSubBlockStart.gifContractedSubBlock.gif        
try dot.gif{ Object.Message(); }
ExpandedSubBlockStart.gifContractedSubBlock.gif        
catch(e) dot.gif{ WriteLine('Call "Object.Message" Fail. <br>+ e.message); }
InBlock.gif      
InBlock.gif        
var e = new Encode();
ExpandedSubBlockStart.gifContractedSubBlock.gif        
try dot.gif{ e.Message(); }
ExpandedSubBlockStart.gifContractedSubBlock.gif        
catch(e) dot.gif{ WriteLine('Call "Encode' + msg + e.message); }
InBlock.gif        Encode.Message();
InBlock.gif
InBlock.gif        var n = new Normal();
InBlock.gif        try { n.Message(); }
ExpandedSubBlockEnd.gif        catch(e) { WriteLine('Call 
"Normal' + msg + e.message); }
InBlock.gif        Normal.Message();
ExpandedBlockEnd.gif    
</ script >
None.gif </ body >
None.gif </ 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的代码很简单就是
None.gifObject.prototype.Message =  function()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    alert('Object.prototype.Message');
ExpandedBlockEnd.gif};
None.gifObject.Message =  function()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    alert('Object.Message');
ExpandedBlockEnd.gif}; 

ExpandedBlockStart.gif ContractedBlock.gif function Encode()  dot.gif{}
None.gifEncode.prototype.Message =  function()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    WriteLine('Encode.prototype.Message');
ExpandedBlockEnd.gif};
None.gifEncode.Message =  function()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    WriteLine('Encode.Message');
ExpandedBlockEnd.gif};  

    如果我们把上面两段代码替换那个html中的两段jscript.encode的代码后面的运行将不会出任何异常会得到这样的输出
  Object.prototype.Message
  Object.Message
  ...

    上面这些代码实例的试验已经详细的说明了encode脚本代码的问题。就是 不能在非编码脚本中引用编码脚本中导入到JScript内置对象上的原型(prototype)方法和静态方法。上面示例中的Object就是JScript的一个内置对象我们分别导入了一个prototpye方法和静态方法Message()。而对于非内置对象Encode我们在已编码代码中导入的prototype和static方法都可以在非编码代码中正常的访问。

    那么怎么访问内置对象的导入方法呢其实解决起来也不复杂只是比较繁琐。我们需要使用一些wrapper方法把他们和被编码的代码放在一起就可以在非编码代码中访问了比如上面的Object的导入我们可以这样包装它

None.gifObject.prototype.Message =  function()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    WriteLine('Object.prototype.Message');
ExpandedBlockEnd.gif};
None.gifObject.Message =  function()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    WriteLine('Object.Message');
ExpandedBlockEnd.gif};
None.gif var obj =  new Object();
None.gif
None.gif function ObjectPrototypeMessage()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    obj.Message();
ExpandedBlockEnd.gif}
None.gif function ObjectMessage()
ExpandedBlockStart.gif ContractedBlock.gif dot.gif{
InBlock.gif    Object.Message();
ExpandedBlockEnd.gif}

    这时我们就可以通过ObjectPrototypeMessage和ObjectMessage这样的wrapper方法访问到已编码代码中内置对象的导入方法了。


本文转自博客园鸟食轩的博客原文链接http://www.cnblogs.com/birdshome/如需转载请自行联系原博主。

目录
相关文章
|
2月前
|
开发者 Python
什么是Python中的类型提示(Type Hints)?如何使用它们?
类型提示是 Python 语言中的一种简单语法,用于确定变量、函数或类的类型,它可以在编写代码时提供类型检查和智能提示,帮助开发者更好地理解和使用代码。【2月更文挑战第1天】【2月更文挑战第1篇】
|
3月前
|
Python Windows
Python 执行RD命令的问题汇总(无效开关 - “Image“。)
Python 执行RD命令的问题汇总(无效开关 - “Image“。)
22 0
|
8月前
|
存储 程序员 Python
python--注释、变量、常量、print、input、type
python--注释、变量、常量、print、input、type
|
8月前
|
Shell
12.3.3 Shell script 的默认变量($0, $1...)
12.3.3 Shell script 的默认变量($0, $1...)
51 0
|
8月前
|
Python
Python input 读取用户指令
Python input 读取用户指令
38 0
|
Python
python中argparse库,在B文件中如何调取A文件中的args参数,通过保存文件的方式
在 Python 中,可以使用 argparse 库和 pickle 标准库来实现在不同的 Python 文件之间传递参数。假设我们有两个 Python 文件 A.py 和 B.py,其中 A.py 中定义了一些命令行参数并对其进行了解析,我们想要在 B.py 中调用这些参数,可以按照以下步骤进行操作:
227 0
|
存储 Python
python中argparse库,在B文件中如何调取A文件中的args参数,直接调用的方式
如果你想在 B 文件中导入 A 文件并直接访问其中的参数,那么需要注意以下两点: 1. 2. 在 A 文件中定义的参数必须是全局变量或者是可被外部访问的类属性或实例属性。否则,在 B 文件中无法直接访问这些参数。 3. 4. 如果 A 文件中定义了和 B 文件中相同名称的参数,那么在导入 A 文件之后,B 文件中的同名参数将被覆盖,导致访问到的值可能不是预期的值。
254 0
|
编译器 Python
关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
372 0
关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案
|
IDE 开发工具 Python
Python -类型提示 Type Hints
Python -类型提示 Type Hints
145 0
Python -类型提示 Type Hints
|
JavaScript 前端开发 Python
Python 技术篇 - 使用unicode_escape对js的escape()方法编码后的字符串进行解码实例演示
Python 技术篇 - 使用unicode_escape对js的escape()方法编码后的字符串进行解码实例演示
207 0
Python 技术篇 - 使用unicode_escape对js的escape()方法编码后的字符串进行解码实例演示

热门文章

最新文章