替换SWF中的字符串
我们已经为大型Flash项目的不同客户修改了数十种SWF版本,现在必须替换每个副本中嵌入在脚本中的一些字符串。其中某些文件的FLA文件很难找到甚至丢失(我继承了这个烂摊子,目前无法重构)。
是否有(免费)工具来替换ActionScript中使用的字符串?我尝试过swfmill将文件转换为XML并返回,但是它不能处理字符串中包含的国际字符,因此我只能将它们进行部分转换。大部分字符串都已正确提取,因此可以使用其他工具来完成。
解决方案
棘手的事情可能并不容易,但是我们可以将"锁定的" swf加载到我们控制的swf中,然后遍历其对象直到我们击中TextBox,使用for ... in循环,这将是一个漫长而艰巨的过程将它们映射出来然后更改它们,特别是如果以前的开发人员没有以有用的方式命名事物,但是如果它是一个相当简单的.swf,那么它可能太糟糕了...
另外,还有一个仅用于Mac的反编译SWF文件的实用程序,我记得一个同事发誓,但是我不记得这个名字了……有人吗?
好吧,我唯一能想到的建议就是修复swfmill以支持国际字符。我们可能想在swfmill邮件列表(据我所知[email protected])中询问如何做到这一点的最佳方法,如果我们有点C / C ++也不难。
我们是否曾经尝试过Sothink反编译器?如果那不起作用,我会说尝试将swf加载到另一个swf,然后向下钻取并更改文本字段的内容,例如_root.loadedswf.clip1.box2.textField.text =" New text";
显然,如果应用程序很复杂,这可能不起作用。
我们可以尝试Burak的URL操作编辑器-它显示URL,但我敢肯定,它可以让我们编辑SWF中的任何文本。我没有使用过它,但是我使用了他的ActionScript Viewer,它的运行效果非常好。
如果文件使用的是ActionScript 2,则可以使用http://flasm.sourceforge.net/进行反汇编和重新汇编(当然:在重新汇编之前修改字符串)。对于as3,adobe提供了可用于实现相同功能的反编译器,但我认为如果继承了它,flash不会是as3.
这个怎么样?
http://code.google.com/p/swfreplacer/wiki/简介
在我看来,swfmill已更新了其工具,以支持国际字符,至少对于拉脱维亚语(要求UTF-8)支持。字符串被编码为HTML实体。
解决了旧版swf文件的一些类似问题。
我们可以将Apparat用于此类任务。它允许我们更改SWF和SWC文件中的ActionScript 3字节码。
我希望Scala源代码分支可以完成任务。基本上,代码如下所示:
val swf = Swf from "in.swf" for(tag <- swf.tags) { (Abc fromTag tag) match { case Some(abc) => { val strings = abc.cpool.strings for(i <- 1 until strings.length) { if(strings(i) == 'search) { strings(i) = 'replacement } } abc write tag } case None => } swf write "out.swf"