查看文章
 
动态解密flash网马(二)
2009-08-25 17:34

今天看到LCX大哥转的这篇文章——《关于flash封装JS代码的一些TIPS》,讲的是关于flash网马封装的一些技巧,挺受学习的(比如返回一个假的网马来进行欺骗)。在文章中看到了部分关于绕过“脚本hook来得到网马内容”的一些方法,和我上次的文章有些关联,引用如下:

   JS代码可以由FLASH进行任意加密,调用之前当然会需要解密,看上去没什么区别。但是在使用静态分析的朋友的眼里那可就变得更复杂了一些。 因为经过加密后的js代码会被放入flash里一起编译进swf文件里,再对swf文件进行混淆,那个反编译出来的DD还有几个人能看得懂撒?
   说到这里,又有朋友说了,我不管你怎么加密,你的js最终还是要通过外部接口交由浏览器执行的,既然你执行,那么肯定会调用eval这个js函数的,那好,我hook这个函数不就行了吗?~~~我只能说,你很聪明,但还不够聪明。谁说的我执行js代码就非要用eval函数的撒?网上那么流传的而已,我使用setTimeout函数行不行?你说啥,你要把这个函数也hook了?OK,我使用匿名函数,我看你hook啥去?不相信?look下面的代码:

package{
import flash.external.ExternalInterface;

public class Movie extends Sprite{

public function Movie()   {
         var myjs:String="alert('see me?');";//换成你的js
         ExternalInterface.call("(function(){"+myjs+"})()");
       
     }
}
}
这样的代码,我看看你再hook啥去?啊?哈哈!除了这个难道就没别的了吗?多啊,匿名对象?toString重载?toValue重载?等等!


其实,作者提到的这个技巧还是能够被拦截的,示例代码如下:

<script language="javascript">

// hook
fnobj = Function;
Function = function(v) {
   alert("Hooker said: \r\n\t\r\n\tYou are...\r\n\t\r\n\t" + v);
   alert("Begin to execute your codes...");
   fn = new fnobj("(" + v + ")()");
   fn();
}

// ExternalInterface.call("...")
(function() {
   alert("you can not see me");
})();

</script>


类别:闲聊八卦||添加到搜藏 |分享到i贴吧|浏览(557)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu