谈谈加密和混淆吧[转]

简介:

还是谈谈自己一直在做的一个应用:flash加密及混淆。从去年8,9月份开始研究。先是研究swf的文件结构,然后是abc的结构。慢慢也明了swf运 行的原理。特别是研究abc结构后,收获很多。然后在写as代码的时候会联想到这些会编译后对应的指令。比如 var a:Number = 3。对应指令就先在local数据中设置一个空间:null,接着一个指令将该空间转换为Number类型,然后添加一个byte数据3到scope,最 后才是指令将3复制到给先前的空间。a字段是不会被编译进去的,这就是为什么用编译软件看到的临时变量都不是原先的名称;再引申下,你可以尽量明了的命名 临时变量,比如:var theFirstValue:Number = 0, 而不用var b:Number = 0。很明显theFirstValue很适合阅读,而且反正也不会编译到swf中去,不用担心太长而增加swf体积。

接下来自己便开始做 加密。先想到的是加壳的方法。后来和别人一交流,才发现,这种方法其实已经早已不是什么新想法了。只要你研究写swf的文件结构,就很容易想到这个方法。 虽然后来想久,尝试很久,还是没有更好的加密方法。其实对于swf而言,已没有加密可言。除非借助与第三方交互。或者adobe自己的人去加密——毕竟 swf文件结构白皮书公布的信息只是一部分而已。所以,最好还是混淆。

加密完成之后,我就开始研究混淆。研究过abc结构的人,应该都很 清楚:要混淆一个方法、一个类名其实很容易。比如你有一个类ABCD,这时候你只要在abc数据中找到这个ABCD,替换为你想混淆成的样子,比如 aaa1。重新组装abc,就完成了混淆。但是如果你有一个类alpha呢?你将alpha混淆成aaa1了。然后你会发现你的代码:(new MovieClip).alpha = 0.3;变成了(new MovieClip).aaa1= 0.3;——swf是一个高压缩的文件格式,abc也是如此。它不可能为同一个字段保存两字。也就是说你的类名alpha和属性alpha引用的是同一数 据,当这个数据被改变是,一切引用该数据的地方都改变了。于是,你需要一个操作:将不混淆字段复制。就上面这个例子:将alpha数据复制一份给“new MovieClip”使用,而类alpha使用的一份进行混淆。
好,这样完成了一小部分。但是还会有问题。比如你从服务器接受了一个xml数据:

best wish to demi

然 后你会通过xml.title来得到这个数据。但是你恰恰这个时候有类方法:public function get title():String。然后你混淆了title为aaa1,然后xml.titlt变为xml.aaa1了,就获取不到数据了。于是又涉及到一个 问题了:特殊字段。还比如:
getDefinitionByName(”MainAPP”); MainAPP是特殊字
ExternalInterface.call(”eval”, “alert(’asdf’);”); eval是关键字
等等。有了这些特殊字和copy字段后,就可以进行大力混淆了。当然本人研究也是有限,很多情况没有遇到过,所以肯定会漏掉一些情况。

以上只是自己的对加密和混淆的一些心得。有不对的地方,敬请指正。
另外就是可以下载DoSWF,里面有上面谈到的加密和混淆功能。
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/archive/2009/10/27/1590611.html

jiahuafu

相关文章
|
3月前
|
前端开发 JavaScript 安全
顶级加密混淆混淆工具测评:ipagurd
顶级加密混淆混淆工具测评:ipagurd
50 0
|
存储 Rust 并行计算
【密码学】一文读懂XTS模式
这篇文章的灵感来源于我偶然翻到的一个某U盘有关磁盘加密的一个介绍(这一篇不是广告蛤), 然后发现这个模式我之前还真没遇到过,因此呢,就学习了一下,就出来了这一篇文章。
3435 0
【密码学】一文读懂XTS模式
|
23天前
|
JavaScript 安全 数据安全/隐私保护
代码混淆的原理和方法详解
代码混淆的原理和方法详解
44 0
|
27天前
|
安全 Java 数据安全/隐私保护
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
|
25天前
|
移动开发 安全 Java
代码混淆的原理是什么?常见代码混淆方法介绍
代码混淆的原理是什么?常见代码混淆方法介绍
19 3
|
2月前
|
安全 算法 数据安全/隐私保护
现代密码学 补充1:两种窃听不可区分实验的区别
现代密码学 补充1:两种窃听不可区分实验的区别
21 0
|
5月前
Zelix KlassMaster混淆工具使用摘要
Zelix KlassMaster混淆工具使用摘要
70 0
|
8月前
|
JavaScript 数据安全/隐私保护 开发者
JS逆向实战之混淆加密和AES加密的破解
JS逆向实战之混淆加密和AES加密的破解
|
算法 安全 数据安全/隐私保护
非对称加密加密原理和开发场景解析
过上一节,就能很好的理解非对称加密就是加密和解密双方使用的是不同的密钥。比喻就是:一把锁,如果被A用钥匙锁上了,那么A无法继续使用自己的钥匙打开,只能让B用他的钥匙打开。而如果B用钥匙把锁给锁上之后,同样必须只有A的钥匙才能打开。所以非对称加密主要解决的问题就是:可信问题,防窃听问题。
576 0
|
安全 算法 大数据
对称加密加密原理和开发场景解析
加密是自古以来人们都在不断使用的技术,目的是为了隐藏信息,只是随着时代在不断的变化,加密也在不断的更新。从古代的藏宝图对藏宝地点进行隐藏。到二战时候,破译敌方电台,都是属于加密和破解的过程。进入21世纪后,加密在互联网时代也有了新的加密方法。也创造了密码学这个学科。目前在加密的场景下,通常分为:可逆加密和不可逆加密。而在可逆加密场景里又分为:对称加密和非对称加密。本次主要讨论集中在可逆加密上。可逆加密顾名思义就是在对明文进行加密后生成密文,能够通过解密把密文再还原成明文。数据加密一般主要解决三个问题:可信问题(非对称加密可解决),防篡改问题(不可逆加密解决),防窃听问题...
292 0