为什么使用jpexs工具反编译SWF文件时无法正常工作?

3

有人知道如何反编译.SWF文件吗?

我尝试了JPEXS和Sothink SWF Decompiler但都无法工作。

我将这个.swf文件放在这个链接中。

谢谢。


我假设该文件已被混淆(受到反编译的保护)。 - Organis
@Organis,在这种情况下我该怎么办呢? - Bao L.T
2
在这种情况下,您应该明白 SWF 的作者不希望您对其进行反编译,并且您应该尊重作者的意愿并停止这样做。 - Organis
1个回答

2
SWF文件无法使用JPEXS打开,因为它被压缩了!当一个文件(例如:swf、jpeg、mp3、mp4)无法在任何程序中打开时,你应该做的第一件事是使用十六进制编辑器检查格式字节是否正确。检查你的文件字节:通常,SWF文件以字节43 57 53开头(例如:"CWS"),甚至以字节46 57 53开头(例如:"FWS")。你的文件以78 DA 00 43 40 BC BF 43 57 53开始(最后三个字节是正常SWF的期望43 57 53)。那前两个字节78 DA表示它有一些ZLib压缩(例如:像一个.zip文件)。
解决方案: 有两种方法可以解压缩ZLib。一种是使用AS3代码,另一种是使用外部(Windows)工具。
选项1)使用AS3进行解压缩。
  • 获取库AS3ZLib并将其as3zlib文件夹复制到Flash项目.as文件所在的同一位置。(在此处找到文件夹:src/com/wirelust/as3zlib/)。

  • 将SWF文件的字节加载(或读取)到名为fileBytes的AS3 bytearray中。

尝试这个代码逻辑:

import Zlib; //do import of API

....

public var zlibdecomp :Zlib; //create instance variable

....

public var fileBytes :ByteArray = new ByteArray;
public var swfBytes :ByteArray = new ByteArray;

//#  SWF original file bytes load
fileBytes = ... ; //your loading code here

//# Decompress loaded into new SWF bytes
zlibdecomp = new Zlib; //create new ZLIB instance in variable
swfBytes = zlibdecomp.uncompress( fileBytes ); //update with decompress version
trace("swfBytes length (DEFLATED) : " + swfBytes.length); //is 8,617,377 bytes??

swfBytes中的字节现在可以保存为文件new.swf,并且可以在JPEXS中正确打开。使用fileReference API将AS3字节保存到磁盘。

选项2) 使用外部ZLib工具。

使用 OffZip(适用于Windows操作系统),您可以解压SWF。
这是直接的OffZip文件。将Offzip.exe复制到一个文件夹中,如c:\offzip\

现在通过运行cmd.exe来打开命令行。输入cd\offzip\(按下enter)。或者只需按住shift并右键单击Offzip文件夹,然后选择“在此处打开命令窗口”

输入offzip -a vpt.swf(按下enter)。

你应该看到类似这样的输出...
C:\offzip>offzip -a vpt.swf

Offzip 0.4
by Luigi Auriemma
e-mail: aluigi@autistici.org
web:    aluigi.org

- open input file:    vpt.swf
- zip data to check:  32 bytes
- zip windowBits:     15
- seek offset:        0x00000000  (0)

+------------+-----+----------------------------+----------------------+
| hex_offset | ... | zip -> unzip size / offset | spaces before | info |
+------------+-----+----------------------------+----------------------+
  0x00000000 .

................................................................................
................................................................................
................................................................................


................................................................................
................................................................................
.................................................................... 8496131 ->
8617377 / 0x0081a403 _ 0 8:7:26:0:1:2657f334


- 1 valid compressed streams found
- 0x0081a403 -> 0x00837da1 bytes covering the 100% of the file

现在输出文件00000000.cws可以在JPEXS中打开。您可以将其重命名为00000000.swf


您好,我使用https://www.onlinehexeditor.com,并且我的文件以42 55 53 08 aa开头。接下来我该怎么做? - Bao L.T
这是一个SWF文件吗?你可以尝试将前2个字节从42 55更改为43 57。如果可能,请展示更多字节或共享SWF文件的链接。 - VC.One
是的,它是一个SWF文件。我已经将其更改为43 57并尝试了相同的教程,但无法提取它。我有一个示例文件 - Bao L.T
你怎么知道它是SWF文件?你看到它工作过吗?这些字节看起来不像SWF,并且在浏览器中无法工作(HTML嵌入Flash播放器)。 - VC.One
这个文件是网页游戏的资源文件之一。该资源中有很多像我给你的文件一样的文件。并且它有两种类型,如果您添加扩展名:PNG和SWF。我在这里获得了那个文件,你可以看到这里的照片 - Bao L.T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接