1.Flash加密解密(一)——doswf混淆还原2.Flash加密解密(二)——Doswf生成代码分析
3.Flash加密解密(三)——特殊混淆让asv2010解析代码失败
从前面两节的分析可以看出,脆弱的swf文件极其容易被一些现成的工具反编译回可执行源代码。一旦可以进行动态调试,那 么这个文件将被他人掌控,即使你使用了最先进的加密算法来保护你的资源,但是你的解密操作总会暴露在你的代码中。所以必须重点保护好代码来确保核心算法以 及资源安全。
混淆的意思就是改变函数或变量名,让解密者难以很直观的看出其中的含义。对于编译好的swf文件来 说,它保存有全局变量以及函数名信息,但是在虚拟机运行的时候,这些变量名和函数名对于执行并没有影响,虚拟机只依靠他们id来区分他们。这种机制就给予 我们混淆带来了便利。我们可以对其中的变量名和函数名进行修改,让他们被反编译回去后,重新编译会发生错误,这样就增加了的复杂程度。
这次给大家介绍如何手动混淆一个swf文件,并提供一种方法,只需要改变swf中的一个字符,就可以使asv2010无法正常解析出代码。
现在开始我们的内容~
本帖隐藏的内容
首先我们先写一个测试文件,这个文件的作用是在舞台上显示一个“hello”的文本框,并设置其alpha值,代码如下:
1. package
2. {
3. import flash.display.MovieClip;
4. import flash.text.TextField;
5. import flash.text.TextFormat;
6.
7. public class Test extends MovieClip
8. {
9. private var a1:int;
10. private var a2:Number;
11. private var a3:String;
12. private var t1:TextField;
13. public function Test()
14. {
15. a1 = 275;
16. a2 = 200;
17. a3 = "test2";
18. t1=new TextField();
19.
20. fun1();
21. fun2();
22. fun3();
23.
24. }
25. public function fun1()
26. {
27. t1.x = a1;
28. t1.y = a2;
29. t1.text = "hello";
30. addChild(t1);
31. trace(t1.text);
32.
33. }
34. public function fun2()
35. {
36. t1.alpha = 0.8;
37. }
38. public function fun3()
39. {
40. t1.rotation = t1.rotation * 0.8;
41. }
42. }
43. }
复制代码
运行结果如下:
我们导出swf文件,然后用WinHex文件打开(如果swf文件被压缩,则先解压缩后在打开),我们可以看到swf文件中的内容:
具体文件各个地方表示的什么意思,可以参考官方文档。
我们往下面翻,可以看到:
我们刚才代码中定义的全局变量和函数的名字都在这里。
现在我们就可以对他们进行混淆了,你可以选择你喜欢的字符进行混淆。
我们对这些名字进行更改,将所有字符都改为数字:
保存后,发现swf可以正常运行,导入到asv中查看:
发现函数名和变量名都变成了数字,如果重新编译将无法通过。
如何让asv获取不到任何代码(仅针对asv2010及以前版本)?其实很简单,我们只需要打开编译好的swf文件,然后将任意变量名的第一个字符改为一个特殊字符,如下:
我们发现asv没有解析出任何代码:
标签:文件,混淆,代码,Flash,解密,swf,asv2010,t1 From: https://blog.51cto.com/u_4387387/6174609