首页
社区
课程
招聘
[原创]分析DoSWF处理过的SWF
发表于: 2014-8-21 23:50 35680

[原创]分析DoSWF处理过的SWF

2014-8-21 23:50
35680

最近看到不少SWF是被DoSWF处理过的,给静态分析带来了不少麻烦。尤其是其中的op_li系列的指令,也阻碍了将反编译的code执行下去。看到网上有不少人都问到如何处理这一类sample,下面将自己总结的方法写下来,希望能够有兴趣的朋友共享。
本人使用的方法是基于这样的假设:无论flash packer怎么混淆,最后总会通过loadBytes将原始flash file加载起来。那么,在Flash Player的进程空间中一定可以搜寻到这样的flash file。这种方法并不局限于解决DoSWF混淆的SWF文件,其他的packer也可以对抗。有兴趣的朋友,可以试试。
思路有了,就具体实施。使用Flash Player将混淆后的flash file打开,搜寻FWS/CWS/ZWS起始的memory,就可以找到(可以使用你喜爱的任何一款二进制编辑工具都可以,甚至在windbg里使用s直接search也可以)。FWS的flash file没有经过压缩,文件size可以通过指定的size来确认,但是CWS/ZWS就麻烦许多。这里就不赘述了,因为我们有更方便的工具来解决这些问题。另外多说一句,在搜索前,看看当前flash file的版本信息很有必要,因为绝大多数情况下,混淆以后的SWF不会修改version信息,这就便于我们过滤掉一下干扰信息。
推荐使用FFDec,开源的Flash Decompiler,47aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3k6J5k6h3g2Q4x3X3c8V1k6h3y4G2L8i4m8A6L8r3g2J5i4K6u0W2j5$3!0E0i4K6u0r3k6X3I4S2M7$3S2Q4x3V1j5`.。后面,我们就使用这个工具完成上面的思路。
打开混淆后的flash file

可以看到SWF version是11,那么后面,我们在搜索到的SWF中多留意这个了。简单看看被DoSWF处理以后的SWF是长成什么样。
 
有价值的东西被藏在binaryData里,这些code的主要作用就是从binaryData中解析出最终的那个SWF,并加载进来。
下面这段code就是影响静态分析的根源,如果能突破这里,静态分析也是可以搞定的。当然,还是有方法的。虽然AVM specification里没有对这些指令做介绍,但是,Tamarin code里已经实现了,有兴趣的可以自己下载下来看看。
 
下面开始干正事了!
点击左侧目录结构的顶层.swf文件,可以在Process Explorer中看到SWF已经运行起来了。
 
继续搜索这个进程空间,当然不是用二进制编辑器,而是使用FFDec自带的搜索功能。
 
双击左侧的FlashPlayer.exe,可以从这个进程空间搜寻到所有的SWF,列于右侧,如下图:
 
我们可以看到很多SWF,有不同版本的,其中version=11的还非常多。其实,这就是DoSWF的混淆策略,为了防止很容易在memory中找到真实的SWF,创建了许多garbage SWF,这个可以在混淆后的SWF code里看到。
 
将上述Version=11的SWF逐个过一遍,就可以找到真实的SWF,当然,为了图省事,你可以写一个简单的过滤工具,检查constant pool中是否包含”940K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3c8G2M7%4N6X3i4K6u0W2j5$3!0E0i4@1f1J5i4K6R3H3i4K6W2p5i4@1f1$3i4K6R3^5i4K6V1$3i4@1f1^5i4K6R3H3i4K6R3#2i4@1f1#2i4K6R3#2i4@1t1$3i4@1f1@1i4@1u0n7i4K6V1$3i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1@1i4@1u0r3i4@1p5I4i4@1f1$3i4K6R3I4i4@1q4r3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1t1H3i4K6R3$3i4@1f1#2i4K6R3#2i4@1t1$3i4@1f1^5i4@1u0r3i4K6R3%4i4@1f1$3i4@1u0n7i4@1p5@1i4@1f1$3i4K6S2q4i4K6R3&6i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4K6R3&6i4@1p5&6i4@1f1@1i4@1t1^5i4K6S2n7i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1#2i4@1t1H3i4@1t1I4i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1%4i4K6W2o6i4K6W2r3i4@1f1#2i4@1q4q4i4K6W2q4i4@1f1%4i4K6W2m8i4K6R3@1f1#2N6r3i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1K6i4K6R3H3i4K6R3J5


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (16)
雪    币: 406
活跃值: (175)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
感谢分享。。
2014-8-22 03:00
0
雪    币: 6
活跃值: (1488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
good
2014-8-22 07:04
0
雪    币: 4668
活跃值: (5323)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
4
对于SWF的size如何来确定?
是不是用FFDC直接复制出来就行了,不需要手动指定size.
2014-8-22 07:59
0
雪    币: 59
活跃值: (94)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
在FFDec里无需指定size
2014-8-22 10:21
0
雪    币: 62
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
先入为主的认为混淆就是将abc指令进行了变化,至少得有指令替换和加花指令等,应该不能从内存中直接搜索到原文件。
2014-8-22 12:52
0
雪    币: 59
活跃值: (94)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
不对之处,多谢指教!如果可以的话,能否将此类sample共享一份,一起学习。
2014-8-22 13:52
0
雪    币: 4668
活跃值: (5323)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
8
晓得了,THANKS
2014-8-22 18:40
0
雪    币: 62
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你太谦虚了,上述只是学习你的文章恍然大悟之感
2014-8-23 12:29
0
雪    币: 211
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
分析Flash的文章很少,看了这篇教程,学习了不少,谢谢分享
2014-8-25 19:45
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这位大哥好牛啊
2014-10-2 21:50
0
雪    币: 406
活跃值: (175)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
12
手机mark 下
2014-10-2 23:16
0
雪    币: 59
活跃值: (94)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
13
另外一种更为简单的方法是hook loadBytes,可以参考:9ccK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6r3i4K6u0V1f1$3g2U0N6i4u0W2i4K6u0r3f1%4g2D9L8H3`.`.
2015-2-11 15:23
0
雪    币: 256
活跃值: (377)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主的文章不错,学习了
顺便给楼主推荐下另外一个大牛的方法
使用Object共享方式破解DoSWF加密的swf
百度搜下这个就有了
2015-2-13 22:13
0
雪    币: 59
活跃值: (94)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
15
谢谢,学习了!
2015-2-16 10:13
0
雪    币: 205
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢分享!
2015-2-27 10:12
0
雪    币: 6845
活跃值: (3871)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
michaelpdu 另外一种更为简单的方法是hook loadBytes,可以参考:6e6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6r3i4K6u0V1f1$3g2U0N6i4u0W2i4K6u0r3f1%4g2D9L8H3`.`.
有联系方式不,一起学习一下
2017-3-28 15:40
0
游客
登录 | 注册 方可回帖
返回