首页
社区
课程
招聘
[求助]调试Flash漏洞时如何查看堆内存数据的问题
发表于: 2014-5-7 10:18 3505

[求助]调试Flash漏洞时如何查看堆内存数据的问题

2014-5-7 10:18
3505
本人小菜。。。最近在尝试分析cve-2014-0502的Flash漏洞,把swf文件反编译后的代码重新用Flash builder编译,但是在调试时遇到了查看堆内存数据的问题。部分代码如下:
public function cc()
    {
      var loader = null;
      loader = new URLLoader();
      loader.dataFormat = "binary";
      loader.addEventListener("complete", Ƿ);
      loader.load(new URLRequest("logo.gif"));      
    }
    public function Ƿ(e:Event):void{
      var bytes:ByteArray = new ByteArray();
      bytes.writeBytes((e.target.data as ByteArray), 0, (e.target.data as ByteArray).length);
      bytes.position = (bytes.length - 4);
      bytes.endian = "littleEndian";
      var len:uint = bytes.readUnsignedInt();
      var shellbytes:ByteArray = new ByteArray();
      shellbytes.writeBytes(bytes, ((bytes.length - 4) - len), len);
      shellbytes.position = 0;      
    }
   我的本意是想实时查看堆内存数据,比如执行完"bytes.writeBytes((e.target.data as ByteArray), 0, (e.target.data as ByteArray).length);"语句后,内存中应该已经有"logo.gif"中的数据,但是变量窗口中显示的此bytes对象的结果如下图

给出的结果应该是一个内存地址,但此地址并不是存放加载的图片数据的起始地址。
   我想问有没有办法直接找到图片加载在内存中的地址(除了使用搜索16进制的方式)。如果有的话,那么分析之后的堆喷也能照此方法来直接定位到内存数据。如果不能的话,是否与AVM进行堆管理的机制有关系(自己的猜测)。(Java程序调试时对象的结果与此类似,能否直接查看堆内存数据。)另外,有没有办法在进行堆喷时下断点,以便跟踪堆喷的过程及内存地址  希望大大们指点

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
2
涉及调试技巧,你截图用的是什么调试工具
2014-5-8 20:09
0
雪    币: 221
活跃值: (40)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
调试技巧方面真的很欠缺..
文中使用的调试工具是Flash Builder,是不是跟调试工具的选择关系不大?使用另一种工具Flash Develop时,各对象在变量窗口中的显示结果与此一样,不知该如何看内存数据。另外在http://www.semantiscope.com/research/BHDC2010/BHDC-2010-Slides-v2.pdf 一文中52页提到如下截图的内容
            
不知道跟内存布局是否有关系,试着把第一张截图中的地址0x1f60101变为0x1f60100再进行寻址也没有看到数据
上传的附件:
2014-5-9 11:20
0
雪    币: 393
活跃值: (150)
能力值: (RANK:110 )
在线值:
发帖
回帖
粉丝
4
这一个是应用层上的调试工具,一个是内存状态的调试。你想用应用层的调试工具查看内存的状态,基本是不可能的。只能是内存状态和应用层之间搭个桥梁,应用层来控制内存状态。比如设置一些可以断下来的as指令之类的。
2014-5-9 16:13
0
雪    币: 221
活跃值: (40)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
回楼上,可能没说清楚,Flash Builder和Flash Develop都是面向Flash/ActionScript的开发IDE,编写完代码后可以直接在IDE中下断点然后运行调试,如果是简单的整形类型等,变量窗口可以直接看到数据,但是对于对象等看到的都是如截图中的属性值,并没有给出写入数据后的具体内存地址。IDE中可以直接调试这些AS3代码,就是不知道能否从调试给出的地址信息中找到数据的真实内存地址,如果可以那么都能直接定位到shellcode以及堆喷数据地址
2014-5-9 17:15
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
LZ,"把swf文件反编译后的代码",这里LZ用的反编译swf的工具是什么?
今天才接触swf...
2014-5-28 20:38
0
雪    币: 203
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
为什么没有大牛原因来此答疑解惑....同样问题,坐等。
2014-6-11 15:20
0
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主的这种调试工具感觉应该是不能进行内存级别的调试,另外我也在学习flash漏洞这一块,想要调试内存级别的需要找到ByteCode转变到JIT Code的代码,如果能定位到这段JIT Code基本就一目了然了,问题来了,如何定位到这段Jit呢?
2014-11-2 00:14
0
雪    币: 204
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
swf运行原理是在avm2虚拟机中,它有自己的默认堆栈,flashbuilder这些就是显示这个的,还不是真正的内存。
2014-11-12 15:02
0
游客
登录 | 注册 方可回帖
返回
//