예제 #1
0
        private void frmMain_DragDrop(object sender, DragEventArgs e)
        {
            bool fail = false;

            txtLog.Text = null;
            foreach (string file in (string[])e.Data.GetData(DataFormats.FileDrop))
            {
                FileInfo  fi   = new FileInfo(file);
                byte[]    data = File.ReadAllBytes(file);
                SwfParser swf  = new SwfParser();
                try
                {
                    swf.Parse(data);
                }
                catch
                {
                    Log($"->{fi.Name} 不是有效的 SWF 文件 (Invalid SWF)");
                    continue;
                }
                try
                {
                    DefineBinaryData payloadTag = swf.FindTags <DefineBinaryData>().ToList().Find(i => i.CharacterID == 7);
                    byte[]           payload    = payloadTag.ExtractData();
                    byte[]           decrypted  = MochiDecrypt.Decrypt(payload);
                    File.WriteAllBytes($"{fi.DirectoryName}\\{Path.GetFileNameWithoutExtension(fi.Name)}_Unpacked.swf", decrypted);
                    Log($"->{fi.Name} 解密成功 (Success)");
                }
                catch
                {
                    Log($"->{fi.Name} 解密失败 (Failed)");
                    fail = true;
                    continue;
                }
            }
            if (fail)
            {
                Log($"\r\n存在解密失败的文件, 可能不是 MochiCrypt 加密的文件, 或 MochiCrypt 版本有更新");
            }
        }