查看文章 |
非常好啊,重写构造函数的确是个好办法。那如果是匿名对象的话,该怎么HOOK呢,比如:new function() {alert("you can not see me");}这样执行,或者直接:{alert("you can not see me");}如何hook匿名类的构造函数呢?
<script language="javascript"> 最后的输出为 function Function() { [native code] } 通过上面的结果,我们可以看出,上篇文章所讲的挂钩Function构造函数可以针对 (function() {alert("you can not see me");})(); 这种形式的写法进行拦截,但是像 mikawawa 后来所提到的 new function(){alert('xx');} 这种形式就不知道找谁去hook了。 当然,如果确实想获得 ExternalInterface.call 的内容,我们还是可以有办法的——直接从内存中dump出来,只不过在脚本层面是暂时没有方法了。 0023ddd4 "try { __flash__toXML(new functio" 不过用调试器来截取数据内容确实很不方便,找了下,最终找到一个好工具——IE8。通过IE8的开发人员工具,我们可以在单步调试中获取flash想要执行的脚本的完整内容。比如下面这段代码: <script language="javascript"> 先在 var test = null; 这里下个断点,在这里断下后继续单步前进,这个时候就能跳入flash所执行的js代码中去了。 另外,mikawawa同学所说的用 {alert("you can not see me");} 这种匿名类也是可以的。按照我的理解,这个应该是一个语句块,而非匿名类,匿名类的写法应该是 {}(空类)或者 {a:"a", b:"b"} 这种形式的吧。经过测试 ExternalInterface.call("{alert('you can not see me');}") 的执行是失败的。 |


