_ _ (_) | | __ ____ __ _ _ _ _ __ ___ _ __ _ __ ___ | |_ \ \ / /\ \/ /| || | | || '_ ` _ \ | '_ \ | '_ \ / _ \| __| \ V / > < | || |_| || | | | | || |_) |_ | | | || __/| |_ \_/ /_/\_\| | \__,_||_| |_| |_|| .__/(_)|_| |_| \___| \__| _/ | | | |__/ |_| /---------------------------------------------------------------------------------------\ |>...................[ 反病毒引擎设计之可控制引擎流(修正版) ]...................<| |>......................[ by nEINEI/vxjump.net ]......................<| |>......................[ 07-07-26 ]......................<| \>...................... [ neineit@gmail.com ] ...................... dwSize) { Return false; // 特征超出文件长度,非法。 } PSIGNSTRUCT pSign = vSignVector.begin(); //取特征库第一条记录 While(pSign != vSignVector.end()) // 遍历特征 { //匹配一次特征成功 if(0 == memcmp(pSign->FistSign,pBuff+dwEop,FirsSignLen)) { if((pSign->SecOffse + SecSignLen)> dwSize) { Return false; } //匹配二次特征成功 if(0== memcpy(pSign->SecSign,pBuff+pSign->SecOffset,SecSignLen)) { Return true; // 发现病毒 } } pSign++; } Return false; } 以上仅是说明处理流程,实际代码并非如此简单。将该代码及修复代码(修复也很简单只是分离捆绑式的PE文件即可)封装成k_viking.dll加入BFM中即可, 库可以由提取二次特征的工具生成。剩下的工作就是编写处理脚本了,这一步最简单仅是处理描述的流程。这样我们增加了k_viking.dll、k_viking.lib、 k_viking.ces(处理流程的脚本)文件,就完成了对viking的检测,后期维护仅是k_viking.lib文件。 在这样的引擎体系下,可以针对库的穿透、检测流程的穿透做出及时的反应。病毒分析员只需针对特殊处理的部分,编写小的功能模块,投放到基础环境当中。 由外部的控制脚本重新组织一个新的检测引擎即可。这样病毒技术的穿透并没有打乱我们已有的检测体系,我们仅是在原有的引擎调度队列中新增加一个引擎而已。 即便有新问题的引入也只是在新加入的小功能模块当中,不会影响原有功能。 [0x06].关于未来 为了验证这一想法笔者编写了一个简单的CES框架,其灵活性、快速响应性都要优于笔者原有的设计体系。虽然开发CES的其前期工作较为烦琐,可一旦框架设计完成, 后期的维护及应急处理则是非常方便。但CES体系也有先天性的不足,对于向引擎这样要求高效率的模块,动态生成模块节点树的处理流程效率上要落后于静态编译好的 处理流程,具体的效率差异上笔者没有做具体的比较,但一下步的研究方向将是对CES引擎处理流程的优化。 一个新的想法或技术上的创新是否具有商用性,是需要不断实践的来检验的,CES的问题还很多,但希望它能帮助我们解决一些问题。 以上的想法仅是一家之言,错误或纰漏在所难免,在此还恳请大家指正,欢迎交流^_^ !! 摘自《浅析反病毒引擎》 附参考文献: [1] 江海客.《浅析反病毒引擎》 2002-12