对云函数隐藏C2技术的防御反制思路

云函数隐藏c2服务器 学习记录 阅读详情

声明

出品|先知社区(ID:Jw5t)
以下内容,来自先知社区的Jw5t作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

前言

随着云函数概念越来越火热,最近几次攻防演练经常能看见云函数扫描器以及云函数隐藏C2服务器,网上只有使用云函数攻击的技术,而基本没有防御的技术,于是我想着就总结一下,如有差错,欢迎斧正

环境复现

关于环境的搭建,前人之述备矣

https://xz.aliyun.com/t/10764

我这里补充一些版本更新过后可能会出现的一些坑

  • 对于腾讯云函数,如果你的python选择了比较新的python3.7,它是不带request库的,需要你自己安装(python3.6自带这个库)所以建议用3.6版本的python

  • 现在安装库可以不用自己上传zip包了,可以直接在终端使用pip下载

  • 腾讯云只有新版本在线编辑器才能使用终端指令,而且会特别慢特别卡

  • 安装完成后访问80显示404是正常现象,访问后腾讯云出现日志记录就代表成功了

  • 全部安装完成后cs中的两个上线地址 必须去掉http://和:80,比如service-

    xxxxxxxx-xxxxxxxxxx.sh.apigw.tencentcs.com这样的格式,否则不会成功

流量分析

现在我的环境已经配置好了,我们先从流量方面分析,cs的流量可以简单的分为三个阶段

  • stage下载

  • beacon的心跳包阶段

  • 执行C2服务器的命令并将结果回传阶段

如果是unstage则只有俩个(因为unstage相当于stage+payload,所以unstage的大小比stage大很多,stage才17KB多,unstage直接上了200)

  • beacon的心跳包阶段

  • 执行C2服务器的命令并将结果回传阶段

stage下载

当你执行bean文件时(我用的是这个stager,可以远程下载一个payload)

它会注入到当前被执行服务器内存,然后执行C2的命令

图片

beacon的心跳包阶段

beacon按照在profile里面的配置以get方法向c2发起心跳请求,同时将宿主机的信息经过公私钥加密后再通过配置文件的加密混淆方式加密再发出

执行C2服务器的命令并将结果回传阶段

C2服务器不会主动请求客户端,当客户端向C2服务端发送心跳包的时候,C2会把命令放入http心跳请求返回包中,然后当beacon端处理完成后,通过post方法回传数据。

stage下载

请求包

图片

这个地方有一个特点,就是 符合一个checksum8规则,即:路径的ascii之和与256取余计算值等于92。

返回包

图片

相对应的profile文件

图片

这一阶段分析措施主要是看这个大流量包,流量包的大小差不多是在210kb左右,通过解析后可以看到回连地址、加密字段、公钥等配置信息

对加解密有兴趣的可以看看这个工具

https://github.com/WBGlIl/CS_Decrypt

set uri_x86 就是 32位的机子发送的

set uri_x64 就是64位的机子发送的

我的靶机是64位所以Get请求包是访问/bootstrap-2.min.js

此外,返回包里面还包括了云函数特有的几个属性

X-Request-Id: 请求的id
X-Api-FuncName: 函数名,比如我在云函数里面设置的就是 test,这个是会被看出来的,所以建议红队伪装一个业务名字 
X-Api-AppId: 对应账号但是不是账号,后面说明
X-Api-ServiceId: 服务id
X-Api-HttpHost: 就是把appid 账号id 还有腾讯云函数的域名放一起
X-Api-Status: 200 返回值
X-Api-UpstreamStatus: 200  返回值

但凡看到有这个格式,基本可以判断是云函数了(但具体是不是业务需要和甲方业务组沟通)

心跳包阶段

图片

这是cs的心跳包,心跳包通过cookie传输机器信息(使用了公私钥加密),先经过一次base64编码,再添加"SESSIONID=",最后添加 header “Cookie”;

对于云函数配置下的cs配置文件(此处可以更改)

http-get {
set uri "/api/getit";
 client {
        header "Accept" "*/*";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }

X-Api-AppId 不是账号啊ID,但是是对应着账号ID的,

图片

X-Api-ServiceId 我在控制台没找到,应该是对应test云函数服务的id 的

命令执行阶段

图片

执行了两次命令 一次是whoami 一次是pwd

图片

流量包是这样的,可以看出请求头依旧会带有很明显的云函数特征,Host头带有请求云函数的api的url,header中带有云函数的各种参数

profile文件分析

红队对cs魔改大部分是profile文件,这是一个比较常见的云函数的profile文件

set sample_name "t";
set sleeptime "3000";
set jitter    "0";
set maxdns    "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
http-get {
    set uri "/api/x";

    client {
        header "Accept" "*/*";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Server" "Nodejs";
        output {
            base64;
            print;
        }
    }
}
http-stager {  
    set uri_x86 "/vue.min.js";
    set uri_x64 "/bootstrap-2.min.js";
}
http-post {
    set uri "/api/y";
    client {
        header "Accept" "*/*";
        id {
            base64;
            prepend "JSESSION=";
            header "Cookie";
        }
        output {
            base64;
            print;
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Connection" "keep-alive";
        output {
            base64;
            print;
        }
    }
}

您可以通过配置文件配置 Beacon 的默认值。有两种类型的选项:全局选项和局部选项。全局选项更改全局的信标设置。

本地选项是特定于事务的 (这句话的翻译自cs的官方手册,原文是 Local options are transaction specific 在我看来,在这里的意思是专注于方式的配置,比如对于http协议应该如何配置,对于https又应该选择如何配置)

全局选项

如

1 set sleeptime

set sleeptime “3000”;

是设置默认的睡眠时间,注意此处是以毫秒为单位的

2 set jitter

set jitter “0”;

这个是设置数据抖动

官方给出的解释是

Append random-length string (up to data_jitter value) to http-get and http-post server output.

就是让返回包的大小在一定范围内随机抖动,单位是百分比

在一些文章中,会通过它cs流量包的默认大小来溯源,建议修改

3 set maxdns

` set maxdns 是 通过 DNS 上传数据时主机名的最大长度 (0-255)

详情见于
https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_dns-beacons.htm?Highlight=maxdns

4 set useragent

set useragent 这个显而易见 设置UA

如果你对这个感兴趣,可以参考

https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_profile-language.htm#_Toc65482842

局部选项

首先它会有一个模板

# this is a comment
http-get {
    set uri "/api/x";

    client {
        header "Accept" "*/*";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }
    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Server" "Nodejs";
        output {
            base64;
            print;
        }
    }
}

这是一个对get请求方式的局部选项配置

# 是代表注释

set uri

set uri 分配客户端和服务器在此事务期间将引用的 URI, set 语句需要出现在客户端和服务器代码块之外,因为它适用于它们两者。

client

header 添加header

metadata {    base64;    prepend "SESSIONID=";    header "Cookie";}

是代表metadata先经过一次base64编码,再在编码后的数据前面添加

“SESSIONID=”,最后在修改过的数据后添加 header头 “Cookie”;

server

output { base64; print;}

输出的metadata进行base64编码,再打印

分析与反制思路

所以 综上所述 有几个分析与反制的思路

判断流量特征

  • 如果是stage,会有一个payload下载阶段,大小约为210kb,payload未解密之前间隔有大批量重复字符串(cs本身特征)

  • 未经魔改的云函数配置在stage下载阶段访问/bootstrap-2.min.js (配置文件特征),同时返回包有很大一串加密数据,且路径的ascii之和与256取余计算值等于92(cs本身特征)

  • 未经魔改的云函数会访问/api/getit这样类似api的模式,可以重点关注(配置文件特征)

  • 云函数的host是

    service-173y3w0z-xxxxxxxxxx.sh.apigw.tencentcs.com这样的格式,有点类似域前置,host为白域名,可以着重注意host为apigw.tencentcs.com格式的流量,如果业务部门没有这样的业务,特殊时期,可以直接封禁这个域名

    apigw.tencentcs.com(云函数特征)

  • 请求头中会有云函数的特有特征,如

    X-Request-Id: 请求的id
    X-Api-FuncName: 函数名
    X-Api-AppId: 对应账号但是不是账号
    X-Api-ServiceId: 服务id
    X-Api-HttpHost: 就是把appid 账号id 还有腾讯云函数的域名放一起
    X-Api-Status: 200 返回值
    X-Api-UpstreamStatus: 200 返回值

  • 抓包看流量,通信的IP是腾讯云的CDN服务器IP

反制手段

  • 批量上线钓鱼马

  • 从cs客户端可以看出,上线后的ip过一会就会自动变一次(云函数特性),一次性上线大量ip会让红队直接无法分辨(直接放同一个虚拟机都行,因为每次云函数的特性,所以每个心跳包都是一个新的请求,都会分配一个新ip)

  • 消耗云函数额度

  • 工具 https://github.com/a1phaboy/MenoyGone

  • 云函数隐藏C2 和 cdn很像,都有同一个弱点,就是访问是需要计费的,所以可以使用脚本把红队的额度跑掉就好,这样红队的所有马都无法上线

  • 虚假上线

  • 重放心跳包进行上线,但是红队无法执行任何命令

  • 截图举报

  • 收集好证据,主要是 host名 X-Api-FuncName X-Api-AppId 这些带有明显云函数的特征的证据,(X-Api-AppId这个很重要)说明该人正在使用云函数对我司进行恶意攻击,请求对其暂时封禁.

拆解巧妙URL钓鱼攻击演进与多层防御实践 URL作为互联网的基础标识,其安全性与访问控制机制是网络安全的核心议题。URL的结构与解析原理决定了攻击者可能利用同形异义字、重定向链等技术进行混淆和欺骗,从而实施社会工程学攻击。这种攻击的技术价值在于其极高的隐蔽性和欺骗性,能绕过传统基于黑名单或关键字匹配的静态防御体系。在应用场景上,它常被用于针对企业员工、高价值个人的精准钓鱼,以窃取凭证、敏感数据。本文聚焦于【巧妙URL】钓鱼攻击的演进机制,通过分析【同形异义字攻击】、滥用重定向服务等具体技术手段,深入探讨了从视觉混淆、逻辑绕开到上下文伪造的多层攻击路 阅读详情

相关推荐

CobaltStrike实战攻防:从后门生成到主机上线的全流程解析与免杀对抗

在网络安全领域,后门与命令控制是攻击链中的核心环节,其原理在于攻击者通过植入恶意程序,与远程服务器建立隐蔽信道,实现对目标主机的持久控制。这项技术的价值在于模拟高级持续性威胁,用于红队演练、渗透测试与安全评估。其应用场景广泛,包括企业安全防护能力检验、安全人员技能培训以及安全产品检测能力验证。本文聚焦于CobaltStrike这一业界广泛使用的协同作战平台,深入剖析其**后门生成**与**免杀技术**的实战应用。内容涵盖分阶段与无阶段载荷的选择策略、静态免杀与动态行为规避的多层技术实现,并结合Malleab

weixin_34195546的博客 390

云函数实现隐藏c2地址

说明:云函数是一个可以为开发者提供的无服务器执行代码的环境,相当于我们可以提前部署一个云函数,当我们需要运行这段代码的时候只需要通过去请求某一个特定的地址(即云函数地址)就可以运行了。最后,该函数将响应的状态码、标头和正文转换为一个 JSON 对象,并将其返回给调用方。配置代码写如下代码,c2地址填写 协议+ip+port,如http://127.0.0.1:80,本文使用80端口,所以后续使用http beacon。该函数的目的是将传入的 HTTP 请求转发到指定的 URL,并将响应返回给调用方。

milu_Sec的博客 1237

Webshell免杀对抗实战:从静态混淆到流量隐匿的生存指南

在网络安全攻防领域,恶意软件与安全软件的对抗是永恒的主题。其核心原理在于安全产品通过特征码、行为监控和流量分析等多维度检测威胁,而攻击方则需通过技术手段规避这些检测。这种对抗的技术价值在于直接决定了攻击载荷能否在目标环境中成功部署与持久化,是红队评估和渗透测试成败的关键前置环节。应用场景广泛覆盖了授权安全测试、攻防演练及安全研究。本文聚焦于Webshell这一特定载荷,深入探讨了如何通过代码混淆、内存加载及流量伪装等实战技术,有效绕过静态查杀、行为拦截和网络监控,实现高隐蔽性的持久化访问。文中涉及的**内存

weixin_33924220的博客 377

利用腾讯云函数隐藏C2服务器

隐藏c2服务器

xiaokp7的博客 1004

网络安全竞赛进阶:从CTF到“獬豸杯”体系化攻防实战指南

网络安全竞赛正从传统的漏洞利用速度比拼,向体系化对抗与智能博弈演进。其核心原理在于模拟真实世界的高级持续性威胁(APT)环境,考察参赛者在持续对抗和数据驱动场景下的闭环安全能力。这种演进的技术价值在于,它更贴近企业实际安全运营需求,能系统性锻炼从业者的工程化、自动化及威胁研判能力。在应用场景上,它覆盖了从初始突破、内网横向移动到安全监测、溯源取证的完整攻防链条,涉及云原生、物联网、供应链安全等多个前沿领域。本文以“獬豸杯”等未来赛事范式为例,深入解析了其背后的核心能力框架、关键技术栈(如自动化工具链、威胁情

weixin_33725126的博客 456

CS云函数及上线提醒

CS云函数及上线提醒

LiBai'S BLOG 1万+

建筑行业信息系统建设中关于云函数攻击的防御体系研究

2.1 云函数定义云函数是 Serverless(无服务器计算)目前应用最广泛的一种计算服务产品,提供 FaaS(Function as a Service)能力。云函数是一段运行在云端的、轻量的、无关联的、并且可重用的代码,无需管理服务器,只需编写和上传代码,即可获得对应的数据结果。使用云函数可以使企业和开发者不需要担心服务器或底层运维设施,可以更专注代码和业务本身,也可以使代码进一步解耦,增加其重用性。2.2 云函数的特点。

Hern(宋兆恒) 1100

云函数冷启动攻击:AWSLambda流量中的资源耗尽攻击检测.pdf

文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 从隐写术到编码转换,从音频隐写到文件结构分析,CTF-Misc 教会你用技术的眼睛发现数据中的「彩蛋」。掌握 Stegsolve、CyberChef、Audacity 等工具,合法破解摩斯密码、二维码、LSB 隐写,在虚拟战场中提升网络安全意识与技术能力。记住:所有技术仅用于学习与竞赛!

蓝队中级面试(某蓝某达某中介合集)

近期面试了几家蓝队中级岗位(公司内面),在此做出相关面试题整理及面试总结。

今天是几号的博客 3256

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

qq_63315166的博客 1300

模拟退火算法详细讲解(含实例python代码)

模拟退火算法详细讲解(含实例python代码)(一)模拟退火算法简介三级目录(二)模拟退火算法原理(1)基本思想(2)算法步骤(3)参数控制(三)实例分析 最近老师要求做模拟退火算法实验,看了很多博客之后感觉还是不太清楚,最后问了老师之后才搞明白。想把自己的理解写下来,帮助大家更好的理解。本篇文章是在另一篇博客的基础上加了一下自己的理解,然后又把我们在实验中的实例写下来,还有参考代码。希望大家看了之后能够加深对模拟退火算法的理解。 另一篇博客链接: 深度学习 — 模拟退火算法详解. (一)模拟退火算法简介

weixin_48241292的博客 17万+

护网(HW)面试官这么面?

在护网行动、攻防演练等安全服务类岗位招聘中,面试官常遇到以下挑战**:**候选人简历堆砌工具使用经历,但缺乏真实攻防场景下的决策能力描述。**技术深度不足:**能复现漏洞但无法解释攻击链路设计逻辑,对0day利用、APT攻击缺乏体系化认知。**协作与响应短板:**熟悉单机渗透但不懂如何统筹安全设备联动、跨团队应急响应。本文通过拆解护网岗位面试逻辑,帮助求职者理解面试官如何快速筛选实战型人才。**候选人A:**简历罗列Nmap、BurpSuite等工具,但无攻防演练项目经历,被质疑“纸上谈兵”。

xx16755498979的博客 817

2021英伟达暑期实习面经(芯片设计)

2021英伟达暑期实习面经(芯片设计前端/DFT) 准备了将近一个月,终于赶在三月的最后一天拿到了offer,暑期实习算是上岸了,后面还有阿里/华为等一些国内公司的面试,但既然拿到了nv的offer,后面的先就当积累面试经验吧~ 网上关于nv的实习or秋招面经很少,硬件岗的更少(约等于没有好吧)。之前准备面试的时候,在网上找了半天,好像就只在牛客网上见过一篇关于nv硬件岗的面经,幸好当时认真看了哈哈。所以既然幸运上岸了,想趁自己还记得,record一下,希望可以帮到有缘人呀~ 好了,废话不多说,开始正题。

Hadleysjtu的博客 1万+

云函数隐匿C2服务器

第一步,创建云函数 登录腾讯云平台,访问云函数功能链接:https://console.cloud.tencent.com/scf/list?rid=8&ns=default。点击新建,创建方式选择自定义创建。函数名称可以自定义进行设置,主要是函数代码部分,将下面内容复制到函数代码中: # -*- coding: utf8 -*- import json,requests,base64 def main_handler(event, context): C2='http://<C

m0_58687645的博客 7312

【VoxCPM2】在Windows上从零搭建VoxCPM2 语音生成和语音克隆AI算法

建议你了解清楚VoxCPM2,再来考虑是否需要自己在本地搭建。

AnChenliang_1002的博客 760

Python全栈入门到实战【AI实战篇 01】DeepSeek官方API全流程实战,第一个AI项目前置必备

文章摘要 本文介绍了基于DeepSeek API开发智能助手的前期准备和基础调用流程。内容涵盖: 前期准备:访问DeepSeek官网、完成账号注册与实名认证。 API Key获取:充值并创建API Key,强调密钥安全保存的重要性。 查阅文档:定位官方接口文档中的Python调用示例。 环境配置:安装openai依赖包,配置环境变量存储API Key。 代码编写:使用Python调用DeepSeek API实现基础对话功能。 调试与验证:解决常见问题,确保API调用成功。 适合零基础开发者跟随操作,快速入门

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3742

使用腾讯云函数隐藏C2

腾讯云云函数(Serverless Cloud Function,SCF),可以为企业和开发者提供无服务器执行环境,无需购买和管理服务器,只要在腾讯云上使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。所有的流量都是通过腾讯云函数进行转发,因此溯源后门只能得到腾讯云的域名和IP,且云函数的服务器是自带 CDN 的,能够很好的隐藏我们的C2服务器。发布成功,到这里我们的云函数和触发器就配置成功了。域前置,走cdn域名,利用云函数。保存,生成后门进行测试。

2201_75387456的博客 1480

机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景

现在,我们将进入到机器学习的核心部分——算法原理。在本篇文章中,我们将详细探讨各种机器学习算法的原理、优缺点和适用场景。

a871923942的博客 2966

【红队APT】反朔源隐藏&C2项目&CDN域前置&云函数&数据中转&DNS转发

区别于单纯的CDN隐藏IP技术;域前置技术采用高权重域名进行伪装,效果要更上一层楼!可以看到这里正常上线,也是简单的进行流量代理,这里我把上面的iptables转发配置清空了,避免干扰 注: 如果中转服务器被拿下的话,那么搜集信息很可能就可以发现请求重定向的痕迹,从而找到真实C2地址。 请求重定向也可以和之前的CDN方法相结合,之前CDN方法是通过CDN将请求转发到真实的C2服务器上,而添加请求重定向后,流程就变为了CDN转发到中转服务器,中转服务器再转到C2,达到双重隐藏的效果。

今天是几号的博客 5085

UFS总体介绍及FPGA开发

通过实现UFS的主控制器、设备控制器等组件,我们可以在FPGA上进行UFS开发,并实现高速数据传输和低功耗特性的存储解决方案。物理层负责传输物理信号,数据链路层提供数据包的传输和错误检测功能,传输层处理数据包的分段、重组和重传,逻辑层管理设备和主控制器之间的命令和数据传输,文件系统层负责文件管理和数据存储。在本文中,我们将介绍UFS的总体架构和特性,并探讨如何在FPGA上进行UFS开发。这些组件的实现涉及到UFS协议的具体细节和硬件平台的特性,因此需要参考UFS协议规范和FPGA开发平台的相关文档。

PodProgram的博客 2138

从 0 到 1 玩转小智 AI 智能音箱:开发教程 + 实战项目全攻略

如果说 MCP 是工具箱,那 SDK 就是 “技能模板”—— 小智音箱的自定义技能本质是 “意图识别 + 逻辑响应” 的组合,就像给嵌入式设备写驱动程序,只要按规则调用接口,就能实现各种功能。小智 AI 音箱的开发门槛并不高,核心是利用 MCP SDK 封装好的接口,结合嵌入式开发的 “硬件对接 + 逻辑编程” 思维,就能实现各种自定义功能。从环境搭建到技能开发,再到实战项目落地,每一步都是对 “软件控制硬件” 的实践 —— 而这正是嵌入式开发的核心魅力。

weixin_42300449的博客 1193

云函数(变相代理池)的三种常见利用

之前学到一些云函数的利用,感觉很有趣,于是借此篇来总结一下三种对云函数的简单利用方式。

dzqxwzoe的博客 852

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【溯源反制】CDN&域前置&云函数-流量分析|溯源

1、不备案的域名+禁用不必要的域名解析记录(防止被溯源收集到更多信息)2、使用HTTPS通讯3、C2服务器混淆基础特征-修改profile配置文件,修改ssl证书4、CS服务端防火墙做策略,仅允许目标主机网段连接,防止其他网段主机对其进行扫描,防溯源5、加跳板、代理等,当然最重要的是免杀了……

今天是几号的博客 5732

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于baidu的云函数实现隐藏c2真实地址

baidu云函数的隐藏c2地址方式

dreamer292的博客 1543

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: Mantis BT CVE-2017-7615任意密码重置+认证后RCE漏洞分析
下一篇: 论如何优雅的注入Java Agent内存马
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值