Adobe公司将在2020年底停止更新和淘汰Flash播放器插件。这也预示着Flash即将淡出人们的视线。在此之后,除了不再发布更新和补丁以外,Adobe还将删除官网上所有早期版本,并且阻止基于Flash的内容运行,可谓是从根源上压缩了Flash的生存空间。这款存在了长达24年的传奇软件的故事终将落幕。其实想想,Flash承载了我们这代人大量的时光。不少网页动画、网页小游戏都是基于Flash呈现。比如火柴人、功夫兔、小破孩都是当时的代表作,7K7K、3366、4399这些游戏网站也都是我们儿时的回忆。但由于
F
lash存在很多安全漏洞,解码视频非常耗电,运行缓慢等问题 。而后有更新的技术如HTML5,WebGL2的出现,新事物必将取代旧事物。随着HTML5技术的发展成熟更加促使了Flash走向消亡。当Flash作为一类旧事物退出历史舞台时,我们难免要唏嘘一番。当然我们也期待着在失去Flash支持之后,曾经基于该程序的网站能够早日转变,保证网站的正常运转。进入正题,有时候我们需要定位Flash中一个操作的AS代码,比如点击了游戏中某个按钮,我们在没有办法调试的情况下,只能通过反编译然后猜想和搜索关键字去找,非常慢而且不一定能找到。本文将介绍一种非常方便的定位Flash执行AS代码的方法。
需要用到软件:Adobe Scout
Adobe Scout是一个内存概要分析工具,可以对 ActionScript 应用程序以及在 Adobe AIR 上运行的移动设备应用程序进行概要分析。主要用于分析swf运行资源占用情况,定位瓶颈。
这里有关于该软件的详细使用说明,英文好的可以看这个:
https://www.adobe.com/devnet/scout/articles/adobe-scout-getting-started.html
另外还需要用到一个插件,用于给已编译的swf添加高级遥测功能:
https://github.com/adamcath/telemetry-utils
下载安装好Scout,打开后界面如图:
我们首先把要跟踪的swf下载下来,用telemetry-utils处理,添加高级遥测标志:
然后用Charles的Map Local功能,替换服务器上的文件为我们本地修改过的文件:
接着打开游戏网页,或者在Flash Player加载swf,在帧时间轴窗口按CTRL+A全选,此时Scout中便会实时地显示该swf运行时调用过的AS方法和打印出跟踪日志了:
举个例子,假设我们要找游戏中打开背包的方法:
Scout时间轴窗口中按END键定位到最后,
然后点击游戏中的背包
此时在帧时间轴窗口中鼠标图标那一行有一段蓝色的部分,就是鼠标的动作所在帧。选中这一段,ActionScript窗口便会显示出这一段帧所调用过的AS函数了。
这里打开背包的方法可以确定为 BagViewManager.openBag():