cuckoo在部署阶段,只在Guest系统里塞了一个agent,这个agent在运行阶段负责与Host端程序进行通信,从Host端接收sample, 整个客户端程序,以及配置文件。

在Host端主要的源文件为:

./lib/cuckoo/core/scheduler.py
class AnalysisManager(Thread):

    def acquire_machine(self):

// 获得虚拟机    

    def build_options(self):

//生成.conf配置文件

    def launch_analysis(self):

//启动分析过程

    def process_results(self):

//生成分析结果报告

launch_analysis会调用:

agent/agent.py

    def add_malware(self, data, name):

    def add_config(self, options):

    def add_analyzer(self, data):

    def execute(self):

执行analyser.py,由Host上传到Guest上的分析程序包含如下结构:

.

└── windows

    ├── analyzer.py

    ├── bin

    │   └── execsc.exe

    ├── dll

    │   ├── cuckoomon_bson.dll

    │   ├── cuckoomon.dll

    │   └── cuckoomon_netlog.dll

    ├── lib

    │   ├── api

    │   │   ├── __init__.py

    │   │   ├── process.py

    │   │   └── screenshot.py

    │   ├── common

    │   │   ├── abstracts.py

    │   │   ├── constants.py

    │   │   ├── defines.py

    │   │   ├── errors.py

    │   │   ├── exceptions.py

    │   │   ├── __init__.py

    │   │   ├── rand.py

    │   │   └── results.py

    │   ├── core

    │   │   ├── config.py

    │   │   ├── __init__.py

    │   │   ├── packages.py

    │   │   ├── privileges.py

    │   │   └── startup.py

    │   └── __init__.py

    └── modules

        ├── auxiliary

        │   ├── disguise.py

        │   ├── human.py

        │   ├── __init__.py

        │   └── screenshots.py

        ├── __init__.py

        └── packages

            ├── applet.py

            ├── bin.py

            ├── cpl.py

            ├── dll.py

            ├── doc.py

            ├── exe.py

            ├── generic.py

            ├── html.py

            ├── ie.py

            ├── __init__.py

            ├── jar.py

            ├── pdf.py

            ├── vbs.py

            ├── xls.py

            └── zip.py

具体的inject方法在该包的api/process.py下面

def inject(self, dll=None, apc=False):

inject方法支持两种注入方式:

QueueUserAPC

CreateRemoteThread

这两种方式的原理都是一样的,都是用LoadLibrary来替换回调函数,同时将需要加载的dll名称作为回调的参数传递给回调函数,这样回调函数一执行,相应的dll就被加载到了进行的地址空间中。

在./analyser/windows/modules/packages/下面有对于各个文件格式的sample的启动代码,基本上都是:

p = Process()

p.execute()

p.inject(dll)

p.resume()

p.close()

基本上就是,先找到启动某一类型文件的程序,然后启动它,并且注入dll进行监控。

对于shellcode,使用execsc.exe执行这段shellcode。

execsc.exe的主要源码为:

// jump into shellcode

int (*func)();

func = (int (*)()) buf;

(int)(*func)();

Cuckoo架构的更多相关文章

  1. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  2. node服务的监控预警系统架构

    需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...

  3. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...

  4. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  5. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  6. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

  7. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  8. 谈一下关于CQRS架构如何实现高性能

    CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...

  9. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

随机推荐

  1. 简单使用Laravel-admin构建一个功能强大的后台管理

    Laravel-admin可以快速构建一个功能强大的后台,方便快速开发. 以下内容记录简单使用Laravel-admin,以及遇到小错误的解决方法. Laravel-admin 依赖以下环境 需要提前 ...

  2. winform DataGridView的虚模式填充,CellValueNeeded事件的触发条件

    虚模式填充常用来处理大量数据,某个字段的显示问题. DataGridView是.net 2.0新增的表格数据编辑和显示控件,简单的数据显示和编辑,只需直接和数据源绑定就可以了. 对于 一些特殊情况,我 ...

  3. Ngrinder简单使用

    文章目录 安装 试玩 性能测试 安装 https://github.com/naver/ngrinder/releases 下载对应版本,是一个war包,3.4以上支持jdk1.8 将war包放到to ...

  4. FPGA前仿真后仿真

    前仿真 后仿真 时序(综合后)仿真 时序仿真将时延考虑进去,包括综合后产生的(与.或.非)门时延,还有布局布线产生的时延. 综合(Synthesize),就是将HDL语言设计输入翻译成由与.或.非门和 ...

  5. python学习笔记:目录结构

    "项目目录结构"其实也是属于"可读性和可维护性"的范畴. 目录组织方式 关于如何组织一个较好的Python工程目录结构,已经有一些得到了共识的目录结构.在Sta ...

  6. Django框架(二十二)—— Django rest_framework-频率组件

    目录 频率组件 一.作用 二.自定义频率类 三.内置的访问频率控制类 四.全局.局部使用 1.全局使用 2.局部使用 3.局部禁用 五.源码分析 1.as_view -----> view -- ...

  7. gitlab+gitlab-ci+docker自动化部署

    导言 本次测试用的是gitlab-ci,单纯与gitlab搭配而言,gitlab-ci较jenkins更加一体,顺畅. 主机1:192.168.100.151 gitlab 主机2:192.168.1 ...

  8. jenkins中的pipeline学习

    Jenkins pipeline 升级打怪攻略(二): http://haurqb42j0gnc7zyxam.exp.bcevod.com/mda-jg9eq66184z5manh/mda-jg9eq ...

  9. 数据概览神器pandas_profiling

    安装: pip install pandas_profiling 用法如下: import pandas as pd import pandas_profiling df = pd.read_exce ...

  10. [已解决]报错:xlrd.compdoc.CompDocError: Workbook: size exceeds expected 17920 bytes; corrupt?

    报错代码如下: filePath='test.xls' data=pd.read_excel(filePath) print(data.head()) 报错内容如下: Traceback (most ...