swf逆向调试

来源:互联网 发布:mac怎么登陆千牛 编辑:程序博客网 时间:2024/06/06 01:06

最近对某文档网站的一个PageViewer.swf文件进行逆向工程,学习了一些swf文件反编译的方法。

第一部分 配置
  1. 安装firefox debug版的的flash:
    debug flash
  2. flash日志输出配置:
    在c:\Users[用户名]\ 下建立文件mm.cfg
AssetCacheSize=20AutoUpdateDisable=0AutoUpdateInterval=-1AVHardwareDisable=0DisableDeviceFontEnumeration=0DisableProductDownload=0ErrorReportingEnable=1FileDownloadDisable=0FileUploadDisable=0FullScreenDisable=0LocalFileReadDisable=0LocalStorageLimit=6MaxWarnings=500PolicyFileLog=1PolicyFileLogAppend=1SuppressDebuggerExceptionDialogs=1TraceOutputFileEnable=1TraceOutputFileName=C:\Users\[用户名]\AppData\Roaming\Macromedia\Flash Player\Logs\flashlog.txt

其中:
    ErrorReportingEnable:是否记录错误信息。(取值0或1,默认取值是0,取值为1时打开此功能)
    PolicyFileLog:是否记录策略文件请求消息。(取值0或1,默认取值是0,当取值为1时打开此功能)
    TraceOutputFileEnable:是否打开trace日志的记录功能。(取值0或1,默认取值是0,当取值为1时打开此功能)
    TraceOutputFileName:trace日志输出文件名(按上述文件配置,其中 [用户名] 替换为本机名称)
3. 安装 JPEXS flash 反编译工具
反编译工具

第二部分 调试

用JPEXS软件,打开要分析的PageViewer.swf文件,展开文档各节点后,得到:
PageViewer.swf框架
从中可以看出,整个swf的资源都能显示出来,而且能够很清楚的得到脚本的信息。

目标:以PageViewer脚本为例,在其combineFakeMovie()函数中,最后加入两类输出语句:
1、输出固定字符串
2、输出变量
实现步骤为:
1、点击上图的脚本文件,会在软件中间部分(AS资源)打开其内容。
2、双击需要修改的内容,会在软件的右侧(P代码资源),此部分即为可以修改的部分
这里写图片描述
3、点击 AS资源中要插入的地方,在右侧 P代码资源处,鼠标会跟踪到相应的位置,如上图绿色箭头指向所示。想在this.movieloader.loadBytes(loc1);后面插入语句,在右侧 P代码资源鼠标跟踪到了73行(此位置是一个相对精确的位置,实际在插入的时候,需要微调到具体的位置)。
4.1、静态字符串
点击右侧 P代码资源下方的Edit P-code按钮,在76行插入如下代码:

findpropstrict Qname(PackageNamespace(""),"trace")pushstring "=======这里是插入的静态字符串======"callpropvoid Qname(PackageNamespace(""),"trace") 1

点击下方的保存后,左侧的 AS资源中,相应的代码回出现 输出语句:
插入静态资源
4.2、变量
如4.1中相同的操作,在79行(续接4.1的操作)插入如下代码:

findpropstrict Qname(PackageNamespace(""),"trace")getlocal_0getproperty Qname(PrivateNamespace(null),"pageloader")getproperty Qname(PackageNamespace(""),"pageArray")callpropvoid Qname(PackageNamespace(""),"trace") 1

点击下方的保存后,左侧的 AS资源中,相应的代码回出现 输出语句:
插入变量
5、点击 JPEXS软件左上方的保存按钮,保存整个工程。
6、编写一个简单的测试页面 test.html。(swf需要在firefox中调用,才会有效果)

<html>    <object type="application/x-shockwave-flash"             data="PageViewer.swf?productId=13514979&pagenum=2&loadurl=page2.douding.cn"             width="100%" height="100%" id="1g1gPlayer" bgColor="#333333">           <param name="allowFullScreen" value="true" />           <param name="allowScriptAccess" value ="always" />       </object></body></html>

此页面要与刚才修改过的PageViewer.swf文件保存在同一路径下。
7、同firefox打开此text.html后,浏览器会正常加载文档,且C:\Users[用户名]\AppData\Roaming\Macromedia\Flash Player\Logs\flashlog.txt文件会保存有上述步骤加载的输出语句:
调试输出
上图中,变量输出部分,字符本身未知,故出现乱码,非不能正常输出。

第三部分 逆向工程总结

1、flash逆向软件可多,但好多都是收费的,功能都是锁定的,因此推荐JPEXS软件。
2、使用JPEXS软件时,不能直接在中间的 AS资源修改代码,否则有可能不会正常运行。
3、JPEXS软件进行逆向工程,在右侧 P代码资源处插入的格式一般为:

findpropstrict Qname(PackageNamespace(""),"trace")--- --- ---callpropvoid Qname(PackageNamespace(""),"trace") 1

中间的部分为,要插入的变量或者字符串。
而在获取变量时,一个变量往往对应着好几条的P代码,可以用光标跟踪一个变量的具体P代码,总结一下规律即可基本掌握。

0 0
原创粉丝点击