flash反编译杂记 - phphot - 博客频道 - CSDN.NET phphot php,apache,mysql,linux 目录视图 摘要视图 订阅 新年新气象------CSDN2014新版导航就要跟大家见面了 2014年1月微软MVP当选名单揭晓! 消灭0回答,赢下载分 “我的2013”年度征文活动火爆进行中! 专访何海涛:“不正经”程序员的进阶之路 flash反编译杂记 分类: +silverlight/flex/WPF/RIA/Rest 2009-06-23 11:55 2147人阅读 评论(4) 收藏 举报 flashactionscriptjava编译器工具脚本 近日有位童鞋让我帮忙把某个在线的flash游戏做成单机硬盘版的好在自己的电脑上玩,恰好又有些其它swf文件的反编译需求,于是很不专业的折腾了一番。思路比较混乱,随手记一下。Flash 达人请直接飘过。 现在的flash不像以前都是单个SWF,直接下载下来就完事儿。在AS3里面可以采用Loader / URLLoader / Sound 等来按需加载不同的外部内容数据,减少单次下载的内容大小。通过 Firebug 的网络面板可以很容易知道在交互过程中产生了哪些二次数据请求,当然也就很容易把这些必需的外部文件也同步保存到本地。 但这样保存下来的内容不见得是整个应用所需的全部素材,因为你不见得会在一次访问过程中触发所有的可能性。所以最彻底的方式是反编译保存下来的SWF文件,然后用全局搜索查找出全部的调用内容。 反编译的工具,对我来说 Sothink SWF Decompiler 不错,基本上能很好的还原出fla文件。但这个工具有一个很严重的问题,在反编译还原 AS 类库文件的时候会出现很多错误,比如把某些变量进行了错误的替换,某些注释被错误的赋值给变量,等等(我用的是 v4.4 ,不知道最新的 v5.0 还有没有这个问题)。如果直接用 Flash CS3 / CS4 去打开生成反编译出来的项目的话,很可能会报出一大堆的编译器错误!所以还需要使用另外一个工具 Action Script Viewer 6 ( ASV6 之前的版本并不支持AS3脚本的反编译),用ASV的 "Export Rebuild Data (JSFL)" 功能导出的 rebuild 脚本虽然有时候并不能完整的重建项目,但导出来的 AS 库文件源代码却很完整。 把 ASV 生成的 AS 库文件复制覆盖到 Sothink 生成的项目文件夹,再打开 Sothink 生成的flp项目文件去编译,应该就不会有一堆莫名其妙的编译器错误了 ---- 一开始我太相信 Sothink 的反编译结果,一度很纠结为什么源代码有这么多编译错误还能生成SWF并正常交互,还以为是跟 Flash CS4 版本兼容性问题又去搞了个 CS3。 ASV 网上能找到的好用版本貌似只有到 asv6 alpha4 ,由于不是 relase 版本,在反编译的时候会提示说反编译出来的东西不一定是完整的 ---- 由于这个提示我一度放弃使用 asv6 ,直到后来拿 asv6 反编出来的源代码去和 Sothink 反编出来的做比较才发现原来声明自己并不一定完整的反而是准确可用的。 这两个工具最好都不要找什么绿色汉化版,有后门。如果常规性会有类似反编译需求的童鞋是值得花钱去买一份正版的来用的。 Sothink 生成的flp项目文件是 for Flash CS3 的, CS4 打开flp文件的方法是:选择“窗口”>“其它面板”>“项目”打开“项目”面板;在“项目”面板中,从“项目”弹出菜单中选择“打开项目”;在“浏览文件夹”对话框中,导航到包含 FLP 文件的文件夹,然后单击“确定”,即可。 为了完成反编译修改大业,终于把机器上尘封了N久的Flash8给卸掉,换成了 Flash CS3 。一开始搞了个精简版,结果对 as 源代码进行语法检查就报“JAVA 运行时环境初始化时出现错误,您可能需要重新安装Flash”。原来精简版把 JVM 都给精简了,需要装一个 jre 环境(或者找找机器上是不是已经有 jre 环境目录了),把jre下的内容复制到 Flash 安装目录下的 JVM 文件夹中(没有的话建一个)。 当然最好还是找个原版镜像出来的比较好,否则总会出现各种古怪问题(比如当Flash项目中用到的字体文件在你本地环境中找不到的话,精简版会直接程序崩溃,就为这个我又一度不得不上网去找来项目中用到的微软雅黑字体给装上)。有时候浓缩不一定是精华。 发布项目时出现“5003: 生成字节代码时发生未知错误”。可以尝试的解决方法: 1、 在“文件->发布设置”的“ActionScript 3.0 设置”中不要勾选“减小文件大小并改善性能”(发布设置这个菜单项平时是没有的,必须打开项目的默认fla文件,一度又很纠结为什么在项目面板鼠标右键点击fla文件的时候不出现这个发布设置...); 2、 “控制->删除 ASO 文件”; 3、 增加一个系统环境变量 JAVA_TOOL_OPTIONS ,变量值设置为 -Xmx512M (注意 512 这个数字需要根据情况调整,不同的电脑配置可设置的数值不一样,可以从 1024 开始往小里改。我的本本要改到 400 才行,大于 400 的数字会又一次导致'JAVA 运行时环境初始化出现错误';修改了环境变量之后可以开一个命令行窗口输入命令 SET JAVA_TOOL_OPTIONS=ANYTHING 让新的环境变量立即生效,重新打开 Flash CS 程序即可)。 当去掉了发布设置选项中的"省略 trace 动作"勾选框之后,测试项目时会输出"VerifyError: Error #1030: 堆栈深度不对称"的错误,没搞清为什么,只好把这个选项再勾上。 URLLoader 加载本地文件,相对路径如果写成 "./data/......" 的话,测试项目没问题,生成项目之后用某些支持SWF的播放器也没问题,但用 Flash Player 运行生成出来的SWF时会抛出类似"Error #2044: 未处理的 ioError:。 text=Error #2032: 流错误" 的 ioError ,需要把 "./" 去掉,直接写 "data/......" 这样的相对路径才能正常读取到相对目录下的内容。 折腾完毕,一个字:累。或许是早期版本Flash IDE对as脚本编写支持的超级弱让我对 Flash 一直很排斥,即便到现在还是如此。也许 HTML 5 真的可以让人抱有期待。本来嘛,都是基于浏览器的东西为什么不做成内置标准以最简单的方式来提供给开发者? 更多 上一篇:“燕云十六将”之Rose金巍巍(10) 下一篇:和CIO问答软件项目实施管理 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 phphot 访问:3584198次 积分:100485分 排名:第1名 原创:6349篇 转载:35篇 译文:2篇 评论:1143条 文章搜索 文章分类 +3G/移动开发(27) +IE,Firefox,浏览器开发(0) +Regular/正则表达式(13) +Search Engine/搜索引擎/SEO/优化(37) +silverlight/flex/WPF/RIA/Rest(48) +sns/openAPI/open social/facebook(31) +SoftwareEngineering/软件工程(300) +User Experience Design/UED/用户体验(58) +WebArchitect/架构(21) +WebDesign/WebTest/WebUI/用户体验(8) +WebService/soap/xmlrpc/socket(8) @APACHE/IIS/NginX/lighttpd(81) @html/js/css/Ajax(292) @Linux/BSD/Unix/Win(180) @MySQL/Oracle/SQL(319) PHP/PHP基础/PHP高级(723) PHPHOT-ADODB(4) PHPHOT-Framework框架(20) PHPHOT-Memcache(23) PHPHOT-PDO(7) PHPHOT-PEAR(3) PHPHOT-PECL(0) PHPHOT-Smarty(37) PHPHOT-ZendFramework(33) PHPHOT-项目/开源(16) _.net/c#/vb.net/asp.net(145) _c/c++/汇编(57) _java/eclipse(133) _python/ruby/perl(59) 专题 - CRM下午茶(20) 专题 - IT创业见闻(13) 专题 - IT技术指数报告(结)(5) 专题 - Java编程那些事儿(109) 专题 - SOA业务开发平台(N久未更新)(5) 专题 - think in 互联网(N久未更新)(2) 专题 - VCL已死,RAD已死(完)(0) 专题 - 三五个人十来条枪 如何走出软件作坊成为开发正规军(完)(46) 专题 - 作团队感悟(N久未更新)(18) 专题 - 创业兵法(N久未更新)(14) 专题 - 感受微软外包项目(N久未更新)(3) 专题 - 我心中的敏捷(6) 专题 - 架构师之路(8) 专题 - 燕云十六将(14) 专题 - 疯狂的程序员 - 小说(完)(88) 专题 - 研发人员为什么留不住?(4) 专题 - 管理软件到底有没有前途(N久未更新)(3) 专题 - 管理软件未眠夜(N久未更新)(6) 专题 - 系统程序员成长计划(53) 专题 - 编程之美 - 书(结)(18) 专题 - 网站架构探索(3) 专题 - 谋划 - 小说(出书,停止连载)(39) 专题 - 谋划2 - 小说(3) 专题 - 轻松几步获得上万点击率(11) 专题 - 项目经理应该小心的游戏(16) 互联网(834) 其他/Other(637) 法律(24) 游戏/网络游戏/web游戏(34) 生活/Life(522) 经济(133) 职业/创业(537) 行业/IT行业/软件行业(436) 文章存档 2009年07月(118)2009年06月(193)2009年05月(164)2009年04月(396)2009年03月(421)2009年02月(264)2009年01月(197)2008年12月(395)2008年11月(284)2008年10月(215)2008年09月(293)2008年08月(142)2008年07月(290)2008年06月(248)2008年05月(220)2008年04月(318)2008年03月(528)2008年02月(424)2008年01月(379)2007年12月(265)2007年11月(248)2007年10月(132)2007年09月(117)2007年08月(91)2007年07月(44) 阅读排行 中国34个省未来发展趋势深度分析(23471) 失业七个月,面试六十家公司的深圳体验(18537) PHP导入导出Excel方法小结(14899) 歧路亡羊——我的编程人生回首(全)(14776) Discuz论坛结构(13101) 一个应界毕业生的深圳求职经历。(12421) apache2配置优化以及性能测试小结(11285) 中国人不能做蠢事(11229) 软件验收报告文档模版(10910) 离开公司时留给公司的十句话 与大家分享(8866) 评论排行 成功的背后!(给所有IT人)(33) 一个IT中专生在深圳的9年辛酸经历(28) 未来五年程序员应当具备的十项技能(25) 华为面试,第三轮被拒,想哭(23) 一则三个和尚的故事(20) 程序人生:女程序员的求职奋斗史(17) 一个应界毕业生的深圳求职经历。(12) 一个牛人给java初学者的建议(12) 大学时代影响我的人生的10件大事-前辈的经验(11) php到底是如何获得表单数据的(10) 推荐文章 最新评论 一个IT中专生在深圳的9年辛酸经历 abc123abc_123: 呵呵,不敢恭维。。。。 Get/Set函数和public成员变量 u011109433: 很清楚,赞一个 我国网民上网最爱干三件事:娱乐聊天看新闻 liuluqqzj: 这是原创吗?明明是转载。。 轻松几步获得上万点击率(11)专题策略 wang379275614: 霸主的地位很难撼动啊 发展“3G业务”急不得 wang379275614: 有眼光 “燕云十六将”之张永生(13) wang379275614: 都是牛人 firefox下如何实现window.event.clientX wang379275614: 试验试验 程序人生:女程序员的求职奋斗史 wang379275614: 都是生活啊 一个IT中专生在深圳的9年辛酸经历 wang379275614: 这。。排版 firefox下如何实现window.event.clientX lljl2009: 同样的方法在onbeforeunload=checkMouse(event)中传递过去为什么e.cl... 热门站 baidugoogleyahoo