http://bbs.9ria.com/thread-45137-1-1.html
前言:之前作了两个swf加壳试验
http://flash.9ria.com/thread-44239-1-1.html
http://flash.9ria.com/thread-45096-1-1.html,
全被flash023用内存抓取法破掉了.没料到内存抓取工具已经被使用得这么普遍,
虽然还没sothink那样泛滥.今天干脆普及一下内存抓取工具的使用.
一是为了让两次小实验有个结局,二是给使用加壳的人们题个醒-内存抓取工具已经开始大行其道,希望以此激励高手们发展防内存抓取的技巧.
首先,加密只是防止被人看到源代码的方法,而并不是保护自己著作权的方法.真想要保护自己的权利,应该加的是lisence而不是加密(当然在一个无视作者权利的环境下,这只不过是一句空话).
但是,我仍然认为所有代码可以并且应该完全公开,因为真正值钱的东西是原理,是服务,是文档,是技术支持,而不是那一堆只有机器能看得懂的代码.
不管怎么样,我希望大家都能自重,之前的奥运福娃游戏可以说地丢尽了大家的脸(直到最近还有人拿那件事情大做文章).
其次,衷心感谢flash023,askforone等朋友们的热心回复与帮助.
言归正传,以我的第二次加壳文件破解为例:
此加壳要想通过用直接反编译源代码,用as3层层去壳的方法破解,恐怕只有神仙能做得到.
但如果使用正确的工具,只不过是点几下鼠标的功夫而已.
推荐工具:
1.asv2009(action script viewer,根据我的经验,比sothink那个不中用的东西强了不知多少倍
这里还要感谢deepin3000提供试用:http://www.deepin3000.com/blog/index.php/archives/306)
2.swf窗口吸血鬼(不再推荐使用,推荐更好用的工具swf reader请见下面更新)
(不要当成flash吸血鬼,flash吸血鬼基本就是个废物,
swf窗口吸血鬼,可以将运行时flash内存中全部的符合swf格式的ByteArray保存出来,
可以从内存中提取我的破壳后原始swf,
30天试用下载:http://www.swfvampire.com/
当然,如果有更好的内存抓取器,欢迎大家提供)
好了,下载安装好两个工具,下面就是大展身手的时候了:
到这个主题的顶楼下载加壳swf附件encrypt_test2.swf
http://flash.9ria.com/thread-45096-1-1.html,
作为第一个试验品.
使用flash player 10 运行swf,显示如下(速度可能有点慢,中间经过多次去壳):
运行SWF窗口吸血鬼,点击window list框,选中Adobe Flash Player 10, 点击suck now,结果如下:
依次delete掉前三个Main Movie,再open Empty SWF Movie 7.swf,发现,这正是去壳后内存中的原始swf.
由于试用版swf窗口吸血鬼不能保存swf,这该怎么办?没法用asv看源代码啊!
别急,点击flash player文件-创建播放器,另存为"原始.exe"不就保存下来了(感谢mbr提供方法)!
不过,这样保存下来的是exe格式的,但这可完全难不到asv,直接将exe拖入asv图标上,asv会自动搜索exe中的swf,
显示如下:
open第5个swf,
被保护的代码一览无余:
哈哈!
最后祝大家新年快乐!
再贴一个东西,有兴趣看一下:(感谢mbr)
new_test.swf (94.71 KB)
更新:
一个更好用的内存提取工具http://www.swf-reader.com/
(demo版可以无限制保存swf,而且可以过滤搜索swf:
http://flash.9ria.com/thread-46123-1-1.html)
简单教程(swf内存抓取):
1.到http://www.swf-reader.com/downloads.php?cat_id=2 下载最新demo,
2.解压文件,双击运行SwfReaderDemo.jar(需java支持,choose mode normal就可以)
3.用flashplayer运行加壳swf附件encrypt_test2.swf
4.file->Load swf from memory, process选择flashplayer.exe, Find swfs-> save swfs as...
另外,这个东西据说可以秒杀目前几款主流加密工具(SWF Encrypt,DoSwf,SecureSWF)。
总之,目前任何swf加密都难保证可靠性。
另,上面附件是一个"重口味"的加密swf(加了三层壳,混入大量马甲,修改了变量名),
没有实用性,有兴趣可以下载用swf-reader试验一下。
看来加密还是混淆比较靠谱,有时间再总结一下as3代码混淆的方法...