希望大家了解一些解密方面的东西,对自己的心血好好保护。最好的方法就是完全不给,一旦作品发布,必须做好被人破解的准备。另外,无论何时,不是技术相当人之间的交流性质的话,不要发论坛短消息或邮件和我讨论这一话题。
Q1:为什么要破解flash文件
我认为目前有五种性质:
一 是通过破解别人的文件,了解别人的编程思路,进行模仿或学习
二 汉化优秀flash软件,游戏,让大家分享。或因为游戏设置不平衡,改部分参数,如xxxx百倍经验值版等等。
三 一些小公司,仅仅通过将别人的作品,改头换脸,把自己的标望上面一打。
四 一些个人,行为同上。
五 通过flash破解,来了解flash加密技术。
而为什么加密,基本上原因就只一种,保护自己的心血。
Q2:怎么才算是破解了
由Q1,我们也可以这么分
一 反编译出大部分代码,尤其是核心代码
二 需要得到所有的字符串,参数的修改
三 这是最无耻的,什么都破解的了。因为不需要完整破解,很多加个读取的壳可能就能加水印了。
四 同上
五 此类基本同一
Q3:加密的总被破解了,再没什么加密是安全的了吧?
Swf的文件格式,现在已经是透明的了,很多人,人云亦云的说,因为flash文件格式的透明,flash加密总是会被解开的。此说法完全没道理。不过flash是脚本语言,它不能自己运行,必须要flashplayer或类似的东西进行解释,所以不管怎么加密,你必须保证flashplayer仍然认识它。
由Q2,如有些方式的加密,反编译后可以生成伪码,而且伪码也能运行,但是人看不懂,不能修改。这也能算加密成功。但是只要让flash变成既可以运行,但是又不是人可以看懂的代码,太难。目前见过几个混淆可以达到这种效果,方式不详。
有些方式的加密,用软件完全反编译不能。手动也非常辛苦,最后得不尝失,即使破解了,也不方便修改。即使破解了一个,也不一定能破解同样方式的第二个。这也算成功了。Doswf基本做到了这一点。不过doswf太能损坏文件了,且试用版水印+弹窗,我并不建议大家使用。
基本上,目前主要就用swfEncrypt直接加密了,要么自己想办法,自己写。最好的加密是把文件格式变成exe,用别的软件给它加壳。Exe加解密技术成熟得多。但是缺点是,大家都是要的网络上能流通的swf啊。
Q4:怎么加密?
Flash,现在主要就分动画和程序。
Swf是tag标签格式的文件,支持的标签也并不多。而flash中的库,是暴露在最外面的,自身完全无法加密。要保护动画,必须要加loader的壳。而action部分,支持很多指令。Opcode其实和汇编码没多大区别。(另外这里插一句,有些人断章取意的认为alchemy能让flash执行效率高N倍,也没道理,如果看过官方的详细说明,外加avm2的说明的话,就应该知道,大多abc只是转换成了flash本身支持的opcode,极少数为avm2额外的专门的解释器,alchemy的出现,最多是为了方便别的平台的程序员而已,不久以后可能我这观点也行不通了)。因此,action部分能做很多文章,而市面上的加密软件也多是在这部分上动脑筋。你也可以写个loader,配合改一些动画swf的数据。然后加密as部分的loader来达到加密动画的目的。
不过现在,商业气息太浓,产品没测试好就拿出来卖了。真没想到5个小时不到就能把swfEncrypt6.04完全搞定。即使因为没读完avm2的tag及一些debugtag而不能完全还原成源码,也能轻松的注入自己的指令到加密后的文件中,能修改,也能删除。
Q5:解密需要些什么?
解构的头脑,对代码的熟悉,外加大量的猜码运气。其实大多flash也没怎么加密的。一般用软件可以直接反编译。swf8及以前,swf9,swf10在tag上有很大不同。我也没研究透彻,主要讲下之前的。Swf8及以前的是用avm1解释,swf9如果包含byteArray asset的,和swf10基本可以视为一致。因此建议as3加密时,即使你用不上,也把byteArray,bitmapdata,loader类导入进去,在原先代码基础上,间接插上垃圾代码。Swf9,swf10本身的废话部分也比swf8及以前多多了,本身破解难度要高一些。
目前市面上这些解密的软件,由效果大小来排
Swf10方面
闪客精灵,WINHEX,tamarin相关工具,nemo
Swf9方面
闪客精灵,ASV,WINHEX,tamarin相关工具,nemo
Swf8方面
Asv。flasm,闪客精灵,WINHEX,flash游戏修改大师
另外,如果是要破解游戏,必须还有一款用得熟练的游戏修改软件。最近不知道有什么新的好,我用习惯了GameExpert,虽然功能很少。网络方面,还得再加WPE(这软件忒久了,,以前自己做星际和传奇的简单外挂就用的它,功能也不怎么样,就没发现换代的东西)。
至于什么flash吸血鬼,URLEDITOR,UE用处不大,flash橡皮插偶尔还能一用。
基本上,软件是对于新手破解用的,这在Q1里面,新手一般是 一 三
四 这类人。闪客精灵和WINHEX因为功能强大,基本无可替代。而其他的,高手必须得有能力去写软件,去帮助你完成这些活。
Q6:flash可以动态修改?
很多人都试图用金山游侠修改过flash游戏,结果没人修改成功,实际上因为现在很多游戏都开始采用动态内存,所以基本上金山游侠这类软件改不了。Flash可能是网页上最早采用防护动态修改的技术了吧。
我以前成功过好几次,理论上来讲,基本上所有程序都是调内存里再运行,像flash,基本上和flashplayer一起装内存里运行。所以改内存绝对是有效果的。只是flash数据和很多dos,win下面的游戏数值表示方法不一样,因为动态内存,位置也总跑,用金山游侠基本很难找到。
不过现在有flash游戏修改大师这一工具,as2的游戏算是不需要费脑筋去想数值存在哪,在哪个范围跳来跳去,用什么方法锁定它们而不至于死机。游戏人只是因为游戏难度过大想修改,建议直接用flash游戏修改大师,就此打住。
Q7:swf如何加密才比较容易防止破解呢?
其实上面也提到过一些,一个成熟的加密:
1 加壳,一定要用URLLoader+ByteArray读一次
2 读这一次的过程中,可能会用到某个算法,这一算法一定不能每次一样,可以随机生成。而密匙完全可以以另一种算法,加密后放在同一文件中。比如说先读某几个bytes来知道是什么算法,再整个的解密。密匙藏法太多了,我另有一篇文章有相关的内容,目前还未发表过。
3 大量改方法名,所有都改,让破解者很难猜。改法也完全可以随机。
4 手动改跳转和push命令部分。Push和jump历来都是加密用兵之地。目前我也没摸透什么改法可以让最新闪客精灵和asv完全挂掉。所有加解密软件都是很规矩的读tag数据的,flashplayer有点不同。因为这个,所以一个用某软件加密过的swf,不可能再被另一个加密软件再加密了。可以视为后一个加密软件没能力解读之前的加密。(这方面具体的我又写了一篇文章,也暂未发表,很早以前看过有个老外写过很多,有人翻译了,可以网上找找看。记得那里面提到的方法已经对现在的闪客精灵无效了,不过很有启发。)
5 加无效代码进去。无效代码基本是if之类,不怎么拖速度。目前只发现几个加密swf能够在真实代码之间插进大量无效代码。而大部分都是加在头和尾。。。和没加密没什么区别。
6 死循环!一个让除了flashplayer外,所有加解密软件都挂掉的死循环。这招算比较狠的,不过好难啊,改jump也能产生这种效果,不过多半是flashplayer也挂掉,基本只能手动不靠批量,太依靠运气。
Q8:怎么算是加密成功了?
由Q2:
一 首先得让asv,闪客精灵完全捕捉不到真实代码的影子。
二 能隐藏库元件的话,加分!
三 闪客精灵和asv在反编译时挂掉了
四 手动分析发现,代码太多扰码。好不容易解读后,发现只是能达到效果的伪码,却不能还原成原始代码。
五 只能完全手动分析,太耗时,放弃
基本上,一个加密至少要达到第四点才能算是成功了。如果你找到了办法使你的swf可以让闪客精灵和asv挂掉,恭喜你。之后想办法在中间加大量的无效码吧。这样如果不是很严重的利益驱使,你的swf就没人能破了。