替换SWF中的字符串

时间:2020-03-06 14:35:07  来源:igfitidea点击:

我们已经为大型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"