[分析引擎开发笔记]监控粒度

2014-1-11 Nie.Meining Life

分析引擎基于硬件模拟器,本身不存在控制权转移的问题,但若是对每个tb都进行全套解析(例如识别当前线程、当前进程等)还是会带来很多不必要的开销。监控粒度是平衡性能和准确度的关键。今天改进了一下,仅在处理线程切换的关键tb中进行全套解析操作,其它时候只处理行为捕获。性能提高了不少。

评论(0) 浏览(1082)

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

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.png



阅读全文>>

评论(0) 浏览(1009)

[分析引擎开发笔记]写PE行为

2013-12-30 Nie.Meining Life

有时候API监控与样本行为可以有多对一的关系,例如从写文件行为中分化出写PE文件的行为:

kfbjpe.png

虽然从技术上来讲,写PE文件也是一个写文件行为,但是在结果呈现上抽象成另一种行为会带来意想不到的效果,毕竟用户看到写PE文件行为时基本可以判定样本感染或释放了PE文件,属于典型的敏感行为。

类似的“虚拟”行为还有很多,能直接提高系统的用户体验,这就是经常了解用户需求的重要性

阅读全文>>

评论(0) 浏览(1201)

[开发笔记]关于匈牙利命名法

2013-12-19 Nie.Meining Life

由于项目需要,这段时间都在研究linux内核。感觉linux内核代码跟wrk的代码相比,风格上的最大区别是命名法。linuxer似乎都觉得匈牙利命名法是没有必要,甚至在内核编码规范中也明确抵制匈牙利命名法。但作为一名长期使用匈牙利命名法的码农,我个人觉得这种命名法在开发过程中还是能带来很大帮助的,尤其是可能帮助你避免很多潜在的bug,提高代码的严谨性举几个例子:


1. 假设你要给某个变量赋值:

unsigned short usLocal = g_usGlobal;

是的,不用疯狂向上滚屏去寻找 g_usGlobal 的声明了,我们知道它的类型是unsigned short。更给力的是,你能立刻知道 g_usGlobal 是一个全局变量,于是你被迫去思考这个地方是否会出现多线程竞争的问题……

阅读全文>>

评论(1) 浏览(43577)

[分析引擎开发笔记]硬件模拟器

2013-12-18 Nie.Meining Life

最初选择硬件模拟器作为基础架构,主要出于以下几个方面考虑:

1. 可以模拟多种硬件架构,这样针对不同的分析环境提供统一的分析方法,如x86架构的Windows/Linux系统、arm架构的Android系统等……

2. 这种软件模拟硬件的方法,容易从虚拟硬件层提取原始数据进行分析,实现不对虚拟操作系统做任何更改,在对抗检测虚拟机的样本时,有一定优势。不过硬件模拟器这种译码执行的方式也肯定会带来性能损失……

3. 方便在不修改虚拟操作系统的情况下实现远程屏幕控制。我们正在测试的深度分析客户端截图:

image003.png

阅读全文>>

评论(0) 浏览(774)

Powered by emlog