[分析引擎开发笔记]行为监控

2014-1-9 Nie.Meining Life

行为监控的核心是API拦截。由于模块动态加载以及的ASLR等问题,API地址不能硬编码,或者至少需要监控模块加载并硬编码API偏移。

行为监控还有一个关键问题是,拦截到相关API后,需要提取出用户需要的大量辅助数据。由于分析引擎是基于硬件模拟器实现的,并且我不希望对操作系统内部做任何更改,因此需要解析各种内核数据结构,硬编码一大堆……似乎不是一个很好的方式……

具体一点,例如大量API的参数中只有handle,用户希望那个知道handle对应的东西是什么,因此需要从句柄表中索引出真正的object,再取得object的对象名。根据对象的不同,对象名不一定都在对象头中,甚至不一定在对象体中(对象的类型对象允许定义自己的名称parse方法),有时候对象的完整名称还会需要拼接,例如文件对象、注册表对象等。之前逆向注册表对象时还做过一个笔记:《KeyObject结构中的Name信息》。此外还有一些更加麻烦的东西,比如通过socket取得IP/Port等(socket_id在底层的表示实际上是一个FileObject的handle,需要到FileObject->FsContext中读取ip、端口、socket版本号等信息)。除了这些需要逆向的工作,还有一些虽然技术难度不大但比较繁琐的工作,例如用户希望从网络数据包中提取url等。

20170331184001.png20170331184146.png

发表评论:

Powered by emlog