as3加密入门-3降低反编译代码可读性的代码书写习惯
来源:互联网 发布:js缺少对象原因 编辑:程序博客网 时间:2024/04/29 14:40
as3加密入门-3降低反编译代码可读性的代码书写习惯
from: http://bbs.9ria.com/viewthread.php?tid=47918
最近在考虑SWF安全方面的技术,看到一些关于这方面不错的技术文章,记录下来方便查阅.以下为转载内容:
这里不推荐源代码中使用无意义的变量名,如
- var asd=new Sprite();function asdf();
源代码中尽量使用有意义的变量名,然后使用第二部分方法混淆即可。
我推荐的书写习惯(针对代码混淆):
1.object vs class
尽量少声明class,绝大多时候,一个object对象({})就完全够用了:
使用类:
- public class mySprite extends Sprite
- {
- public var vx;
- public var vy;
- public function mySprite()
- ...
- }
- var myinstc=new mySprite();
使用object(等价写法):
- function newmySprite()
- {
- var mySprite=
- {vx:,vy:,cavans:new Sprite()};
- return mySprite;
- }
- var myinstc=newmySprite();
2.include vs import
include是我最喜欢用的关键字
少写类,我们就可以多用include预编译指令。
一个极端的做法是只写一个类“public class Main extends Sprite”,使用object代替class,将所有函数、变量作为Main类的类函数、属性。将相关联的函数、变量分别写进一个独立的.as文件中,最后在Main.as中将这些.as文件include进来。这样编译出的swf只有一个类文件,
反编译出的代码也就一个超长的Main.as文件,可能含有几十个变量和函数,极不便于阅读,从而达到混淆效果。而如果声明很多类,那反编译出的代码结构就会很清晰,各个包、类一目了然,很容易被破解者重复利用。
3.[]语法(By Zevan)
不推荐使用,有可能降低swf运行效率。但如果该部分代码只运行一次,对效率要求不高,可尝试一下:
- graphics.lineStyle(0,0);
- graphics[["drawEllipse", "drawRect"][int(Math.random()*2)]](Math.random()*400, Math.random()*300, Math.random()*100,Math.random()*100);
(可将"drawEllipse", "drawRect"赋值给自声明的变量达到混淆效果):
- var drawEllipse="drawRect";
- graphics[drawEllipse] (Math.random()*400, Math.random()*300, Math.random()*100,Math.random()*100);
正常写法
- var xp:Number, yp:Number, w:Number, h:Number;
- graphics.lineStyle(0,0);
- xp = Math.random()*400;
- yp = Math.random()*300;
- w = Math.random()*100;
- h = Math.random()*100;
- var choice:int= int(Math.random()*2)];
- if(choice=0)graphics.drawEllipse (xp, yp, w, h);
- else
- graphics.drawRect(xp, yp, w, h);
其实[]语法是as3比较强大的一种功能,在很多时候使用起来是非常方便的。
[]语法让我们可以使用字符串来调用as3函数,我们甚至可以利用[]语法写一个as3代码解释器,让as3代码不经编译而直接运行于swf中,
仿佛在flashplayer中运行了一个自定义的flashplayer,而这个自定义的flashplayer可以使用自己定义的语法,混淆效果当然没得说(当然执行效率也会很低)。
附件AS3Player.swf就是这样一个简单的例子。
AS3Player.swf (2.64 KB)
- as3加密入门-3降低反编译代码可读性的代码书写习惯
- as3加密入门-3降低反编译代码可读性的代码书写习惯
- css代码书写习惯
- 良好的编程习惯 (四)代码可读性
- flash cs5 书写代码的好习惯
- 关于代码的可读性
- 代码可读性的提升
- php代码书写习惯优化
- 代码可读性
- Eclipse打包Android混淆代码降低代码可读性时,出现的Warning:can't find referenced class问题的解决方案
- 增强代码可读性的途径
- 编写可读性代码的艺术
- 如何提升代码的可读性
- 编写可读性代码的艺术
- 转载:as3加密入门-1使用alchemy进行代码混淆
- as3加密入门-1使用alchemy进行代码混淆
- as3加密入门-1使用alchemy进行代码混淆
- 代码规范_1:代码的可读性
- JavaScript中的事件处理
- PB窗口之间传递多参数的方法
- c++ primer 9.19题
- JavaScript中的对象化编程
- C++对象的构造与拷贝以及析构
- as3加密入门-3降低反编译代码可读性的代码书写习惯
- 应用程序权限设计
- 应用程序权限设计
- JavaScript框架编程
- c++ primer 第9章 顺序容器
- 兼容 IE 和 FF 的换行 CSS 推荐样式
- ubuntu下卸载软件(两种方法)
- JavaScript的Cookies
- MySQL 关于连接池用完的问题和too many connection ----解决办法