首页
社区
课程
招聘
[原创]调试AVM中的JITed code技巧
发表于: 2014-11-26 14:09 7823

[原创]调试AVM中的JITed code技巧

2014-11-26 14:09
7823

分析Flash Exploit的时候,为了分析详细的执行过程,需要给JITed code设断点。而JITed code是随机放在heap上的,如何定位这些JITed code的地址,如何将actionscript function与JITed code对应起来?感谢Haifei大牛的idea!
随便写写,有兴趣的随便看看,如有错误之处,请斧正!

之前在分析flash exploit的时候,需要给JITed code设置断点,方便跟踪。JITed code调试的难点在于这些code在heap中的位置是变动的,为了能够给JITed code设置断点,我们需要知道何时JITed code被部署好,在那之后,就可以设断点了。
MethodInfo对象用于存储method相关的信息,+4h的偏移位置是用于存放function address,包括native function, JITed function, interp function。调试以后,会发现verifyMethod的实现中每当verify相应的函数以后,相应的位置便更新为正确的地址了(有兴趣的同学,可以自己调试一下)。所以,我们可以在每一个verify*函数之后,取对应的函数地址。

其中,ESI存放的是method_info pointer,所以,function address应该是poi(esi+4)。

现在我们知道如何取到function address,但是如何与actionscript bytecode对应起来?毕竟在Adobe SWF Investigator里能看到只是下面这样。

可以看到每一个函数都有一个method_id,AVM又是如何处理method_id的?
分析以后,可以知道:AVM在解析constant pool的时候,需要调用parseMethodBodies,这个函数主要是将每一个函数的body解析出来。在这里,可以拿到method_index与相应的method_info指针。


写一个简单的windbg script,调试结果如下:



这样,在函数执行之前,就可以断住相应的JITed code了。

除了上面介绍的方法,还有一种变通的思路:如果可以修改actionscript,在需要调试的函数首部增加一些探针函数,如MathUtils::ceil, MathUtils::round之类的函数,只要可以断住这些函数,再找到caller即可,后续相应的code便可以被调试了。








调试用的flashplayer详细信息如下:


写了个工具,用于调试flash JITed code,放在这里,有需要,自己玩。
https://github.com/michaelpdu/flashext


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

上传的附件:
收藏
免费 3
支持
分享
最新回复 (10)
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哈哈,不容易,支持楼主
2014-11-26 14:13
0
雪    币: 1886
活跃值: (216)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
请问,在哪可以得到 flash 的符号文件?
2014-12-14 02:13
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
厉害,膜拜楼主,为什么不上传demo
2014-12-14 11:25
0
雪    币: 59
活跃值: (94)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
没有symbol,逆向+Tamarin
2014-12-28 08:40
0
雪    币: 59
活跃值: (94)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
可以用FlashDevelop写一个简单的flash,自己调试一下即可,如果需要CVE可以在VT上download
2014-12-28 08:41
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害,支持一个。
2014-12-28 10:15
0
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
8
学习了
楼主
2014-12-29 10:17
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
小伙子有前途
2015-1-7 08:46
0
雪    币: 203
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
此法甚妙!!收藏了!
2015-3-2 18:02
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,虽然很久远。有参考价值
2016-1-8 20:59
0
游客
登录 | 注册 方可回帖
返回
//