搞过不少flash游戏的逆向分析,这两天居然被一个多年前的游戏给难住了。
现在想想,原因就是我太依赖于那几个工具,写pcode的时候都是直接通过工具去改。
例如使用ffdec分析城堡破坏者的as2脚本出错,导致我重写回去的时候发生了bug。
用另外一个工具导出为xml,也无法正确分析。
最后这个怎么解决的呢?
直接上HxD,找到了所谓的加密脚本,发现代码头(ACTIONRECORDHEADER)有一些不是常规的AVM1代码头(抑或是上古版本?游戏作者使用了改写过的flash播放器?),比如这一段:
A3 0B 00 08 01 06 00 00 00 00 00 00 00 00 4F
代码头A3就不对,没有这种代码头的。
反编译工具由于识别不了这种代码头,就直接略过不读,最终出现了getmember之后立刻setmember这种奇怪的pcode。
综合前后数据分析,这段的A3应该可以无缝改写为96,即push,0B代表00之后的数据长度,4F就是setmember。
有了这个思路,就可以把这个代码块扒出来,再跑一段程序把不认识的代码头找出来,分析之后替换为正常的代码头再重写回去。