public byte[] decrypt(byte[] data) {
		// 读取标记变量
		int block = data[0] + blockFix;
		byte key = (byte)((data[1] & 0xff) + keyFix);
		int skip = DataUtils.readInt32LE(data, 2) + skipFix;
		int size = DataUtils.readInt32LE(data, 6) + sizeFix;
		// 取出加密部分数据
		byte[] encrypt = new byte[size];
		System.arraycopy(data, data.length - size, encrypt, 0, size);
		// 数据解密
		int index = 0;
		while(true) {
			int i = 0;
			while(i < block) {
				encrypt[index] ^= key;
				if(++index > size) break;
				i += step;
			}
			index += skip;
			if(index > size) break;
		}
		// 使用zlib算法解压缩
		InflaterInputStream iis = new InflaterInputStream(new ByteArrayInputStream(encrypt));
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		try {
			// 读取第一字节，判断是否要做垃圾回收（？）
			int garbage = iis.read();
			// 存在该标识时，需要跳过一定数量的字节
			if(garbage != 0) {
				// 跳过一个整型（与解密无关）
				iis.skip(4);
				// 读取数据长度并跳过（与解密无关）
				int len = DataUtils.readInt32LE(iis);
				iis.skip(len);
			}
			// 跳过一个无用字节（无任何用途）
			iis.skip(1);
			// 跳过一段无用数据（与解密无关）
			int len = DataUtils.readInt32LE(iis);
			iis.skip(len);
			// 这里开始是目标SWF的数据，将其读出并返回
			for(int b; (b = iis.read()) >= 0;) {
				baos.write(b);
			}
			baos.close();
			iis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return baos.toByteArray();
	}