Flash加密解密(一)——doswf混淆还原

 研究了一段时间的加密解密技术,对比其他类型的软件加密,swf加密方法是非常有限的,想要彻底保护swf十分困难。而且随着技术的进步,个人认为swf加密技术难以抵挡解密技术的发展,只能在一定程度给予保护。

这次主要带大家分析doswf中最简单的混淆处理。后续我会给大家介绍使用doswf最强加密后的文件如何恢复出来。介绍这些也是让大家更深入的了解swf中的原理,同时也可以了解到保护自己swf的一些基本方法。

混淆的意思就是改变函数或变量名,让解密者难以很直观的看出其中的含义。而在swf中,我们可以利用十六进制编辑器对其中的变量名和函数名进行更改,改成一些奇怪的符号或者编译难以通过的非ANSI字符,这并不影响swf的运行,但是反编译回去再编译就会出现编译错误。

 

好的,现在开始,我们目标很简单,还原被doswf混淆的源代码:

 

本帖隐藏的内容

首先我们准备了一个测试文件:

简单的测试文件.png



所有的代码很简单:

  1. package
  2. {
  3.         import flash.display.MovieClip;
  4.         
  5.         public class Main extends MovieClip
  6.         {
  7.                 private var a:int;
  8.                 private var b:String;
  9.                 public function Main()
  10.                 {
  11.                         var i:int;
  12.                         a=45;
  13.                         b="test_swf";
  14.                         tip.text=b;
  15.                         test_mc.rotation = a;
  16.                         for (i=1; i<5; i++)
  17.                         {                                
  18.                                 trace(i);
  19.                                 fun_alp();
  20.                         }
  21.                 }
  22.                 function fun_alp()
  23.                 {
  24.                         test_mc.alpha = test_mc.alpha*0.9;
  25.                 }
  26.         }
  27. }
复制代码

现在我们用doswf进行混淆处理:

360软件小助手截图20131029105816.png


其他所有的加密都不勾选,我们只进行混淆处理。



我们用asv来查看其中的代码:


360软件小助手截图20131029105930.png


我们可以看到其中有许多奇怪的字符,如果反编译回去再进行编译是会发生错误的。



我们可以利用ASV中的一个功能帮我们处理一下其中的非ANSI字符:


将非ANSI字符转成ANSI字符.png


修正过后我们导出文件,进行编译,会发现还是会有一些错误,我们可以根据提示修正这些代码。

修正好后,这个文件就可以编译运行了。(如果你使用的asv版本很高,有些问题将不会出现)


修改其中的错误代码,恢复运行.png

2013-10-29 10:55:08 上传
下载附件 (47.69 KB)

我们发现这个文件被doswf加入了水印,同时还会每间隔一段时间自动弹窗(试用版的限制)。


后面我会给大家分析doswf生成的代码的含义,以及去除试用版限制的代码。

你可能感兴趣的:(Flash)