写在前面

一天 闲来无事,对SWF的内存提取产生了好奇,为什么要内存提取呢?因为很多游戏厂商或者私人作者会在自己的swf进行混淆、加密使得不能直接反编译,在几年前的一些网页游戏中还是使用了flash来做游戏,虽然现在大多数游戏都被h5给替换,但是技术不变。秉承着学习的态度,便写了这篇文章

0x01

首先我们要知道 SWF 是什么?
SWF 是 Small Web Format 的缩写,读作swiff 是Macromedia(现已被ADOBE公司收购)公司的动画设计软件Flash的专用格式,被广泛应用于网页设计、动画制作等领域,swf文件通常也被称为Flash文件。
代码文件 Adobe AcitonScript 3.0 简称AS3.0
运行SWF文件是需要 flash播放器

主要厂商的Flash“退役”时间表:

Mozilla:

2018 – Firefox 用户必须在每个要使用 Flash 的会话上启用 Flash。
2019 – 如果站点使用 Flash,Firefox 将向用户显示可见的警告。
2019 – 默认情况下禁用 Flash。
2020 – 从 Firefox 中删除 Flash支 持。
2021 – Firefox 将不再加载 Flash 插件

微软:

2018 – Microsoft Edge 将要求用户单独为每个会话启用 Flash。Internet Explorer 继续允许 Flash。
2019 – 默认在 Microsoft Edge 和 Internet Explorer 中禁用 Flash。
2020 – 删除 Flash

Google:Chrome 将于 2020 年底前删除 Flash,并无时间表。

Apple:Safari 默认关闭 Flash,并无时间表。

Facebook:内置 Flash 的游戏将能支持到 2020 年底。

缅怀一下

0x02

我们这篇主要讲的是《如何在内存中提取出加密的SWF》在开始之前我先给大家安利一下SWF的反编译软件。

主流的反编译工具

ASV(Action Script Viewer)

是一款付费的反编译软件,目前国内只能搜索到ASV2010的破解版,反编译FlashCC Achemy 有一家声称是代理商的 某某堂 也只是停留在 asv2013 版,其实ASV在国内是没有代理商的,而且一直有更新目前最新版本是 ASV2019 不但是私人会使用,连flash 团队的内部人员调试的时候 也会用到这个工具,所以功能之强大可想而知

JPEXS Free Flash Decompiler

这是一款由 Java 编写的免费开源的反编译软件,支持反编译FlashCC Achemy、多国语言、多个平台。我觉得是一款超良心,排名第一的免费反编译软件,可直接编辑修改 AS 代码,P-code,同时也支持内存提取swf

Sothink SWF Decompiler

硕思闪客是一款付费的软件,价格很贵,软件功能相比于上面两款来说,我个人认为是有点鸡肋了。支持将SWF转换为Fla/Flex/HTML 5。国内一些破解论坛有破解版,我在刚开始接触flash游戏的时候,使用的是这款软件来进行反编译。后来就慢慢的被JPEXS强大的功能吸引,也就没用硕思来反编译。

Swf Reader

swf reader 由 Java 编写的一款强大的内存提取、反编译SWF工具,最初内存提取swf时我所使用的就是这款工具。由于很多游戏厂商把swf进行加密处理,直接反编译是会报错,这个可以内存提取并无限制保存swf,比swf窗口吸血鬼要猛得多。
而且,更恐怖的是直接针对SWF Encrypt,DoSwf,SecureSWF等主流加密工具一键破解…
以前也是开源的,但是目前开源网站打不开了。只能从网上搜索出流传的版本SwfReaderFull_2.3_build47
还有一些反编译工具就不一一介绍了。

0x03

不管是什么类型的加密,在运行的时候都会将加密的swf进行解密然后才能运行,所以在内存里的swf文件是解密后的文件。
我们要想内存提取 swf 必须先了解 swf 的文件信息
swf文件格式说明文档 Adobe 官网连接已经消失了,只能从网上下载我推荐 swf_file_format_spec_v10.pdf

前3个字节为文件标识头,F代表为未压缩,C代表已压缩,使用的是zlib压缩。第四个字节代表版本号,第五个到第九个字节代表文件的长度(小端需要注意转换),第十个字节 swf的舞台大小,单位:twips 1px = 20twips ,第十一到十二字节代表帧率,
SWF File Header
U表示 unsigned 无符号 I 表示 Interger 后面的数字表示二进制 8位 16位 32位

Field Type Comment
Signature UI8 Signature byte: “F” 未压缩 “C” 压缩
Signature UI8 固定为“W”
Signature UI8 固定为“S”
Version UI8 版本号 (如: 0x06 表示swf6)
FileLength UI32 该swf文件的长度,单位:字节
FrameSize RECT swf的舞台大小,单位:twips 1px = 20twips
FrameRate UI16 帧率,这里总共有16位,只有后面8位有效
FrameCount UI16 总帧数

所以我们可以从内存里搜索 FWS 然后取出 版本号 和 长度 就可以取出内存里的Swf
至于使用什么类型的编程软件就看个人的喜好了。
我这边使用 中文编程软件 “易语言” 来编写例子,理由是比较方便,很多API可以直接拿来用。

首先枚举出所有的进程

然后 取出进程ID,接着内存搜索

将搜索出来的内容进行分析



使用 JPEXS 反编译

End

SWF 学习笔记 ——《如何在内存中提取出加密的SWF》相关推荐

  1. Java快速入门学习笔记3 | Java语言中的表达式与操作符

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  2. Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示

    Kinect开发学习笔记之(四)提取颜色数据并用OpenCV显示 zouxy09@qq.com http://blog.csdn.net/zouxy09 我的Kinect开发平台是: Win7 x86 ...

  3. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

  4. 嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器B、累加器A和程序状态字PSW)

    嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器.累加器和程序状态字) 累加器A 寄存器B 程序状态字PSW 累加器A 累加器A是ACC(Accumulator)的缩写,累加器A是一个具有特 ...

  5. C语言学习笔记Day3——持续更新中... ...

    上一篇文章C语言学习笔记Day2--持续更新中- - 八. 容器 1. 一维数组 1.1 什么是一维数组 当数组中每个元素都只带有一个下标(第一个元素的下标为0, 第二个元素的下标为1, 以此类推)时 ...

  6. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记2 | Java语言中的基本类型

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  10. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

最新文章

  1. PortableApps的使用方法
  2. BZOJ3336: Uva10572 Black and White(插头Dp)
  3. solr 使用自定义的 QueryParser
  4. 第十一章 “她”值多少钱
  5. 记录各种体育活动(持续更新到不更新为止)
  6. C#LeetCode刷题之#559-N叉树的最大深度​​​​​​​(Maximum Depth of N-ary Tree)
  7. 鸿蒙车载智慧屏评测,华为鸿蒙系统初体验,华为智慧屏评测,功能超乎想象
  8. java读取redis数据_Java连接redis操作数据
  9. 锐捷客户端linux登录密码忘记,锐捷S3760忘记密码的恢复方法
  10. Excel-制作简单的环形柱状图
  11. unity3d棋牌游戏教程之手机斗地主的发牌功能实现
  12. k8s pv与pvc
  13. 网站使用QQ互联接入第三方登录,实现qq快捷登录网站的功能
  14. vs2008设置选中 高亮
  15. 实现聊天发送语音消息功能
  16. 想学好前端 H5 CSS3 的小朋友们康康我~
  17. 如何在react中禁止浏览器后退
  18. HL7 标准及实现指南 必看的网址
  19. 数据挖掘求职岗位要求分析
  20. Android引用ttf图标字体库

热门文章

  1. SwitchHost下载安装和配置
  2. 幼儿园管理系统的设计与实现
  3. python大数据和java大数据的区别-学习大数据先学Python还是JAVA?
  4. 高德sdk定位当前位置_高德地图定位,获取当前位置坐标
  5. Android开发:关于高德地图轨迹纠偏,只显示两个点问题的整体概述
  6. origin游戏服务器引擎
  7. 小米air2se耳机只有一边有声音怎么办_别光盯着AirPods,这些无线蓝牙耳机,其实也很好用...
  8. CSDN获得c币办法
  9. Axure Mac汉化
  10. 《Axure RP 9实战指南》Axure RP 9.0最新版汉化问题