ring3 下挂钩Native API 简单实现文件防删除

hook pte_简单HOOK SSDT实现文件防删除 被玩烂了的SSDT,索性就让它更烂吧,没啥技术含量,只是想增进下和驱动的感情,慢慢跟上那帮人的步伐。关于SSDT的描述,推荐看下堕落天才的文章:http://bbs.pediy.com/showthread.php?t=40832。OD跟踪DeleteFile API的执行流程,会大致看到这样的调用:DeleteFileA -> DeleteFileW -> ntdll.ZwSetIn... 阅读详情


简单实现文件防删除,说简单是因为没有用很底层的技术,例如文件驱动之类。我只用最简单的方法实现了, 使用 ring3 的API hook 技术。
随着技术的发展这种技术已经过不了很多的主动防御技术了。主要是思路和方法和分析过程。(高手飘过)

ring3 下挂钩 API 基本上也就是修改导入表,和Inline hook 修改前5个字节这几种方法。挂钩Native API 没有什么区别,也就是多声明几个结构和变量类型。关于挂钩API 请参见:www.xfocus.net/articles/200403/681.html 

文件删除的ring3 API 是DeleteFile, 此API 存在于kernel32.dll 中,用OD分析一下。(哪个都可以,IDA更不用说)

DeleteFileA 的反汇编代码:

7C80D2FB >/$  8BFF          mov     edi, edi
7C80D2FD  |.  55            push    ebp
7C80D2FE  |.  8BEC          mov     ebp, esp
7C80D300  |.  FF75 08       push    dword ptr [ebp+8]
7C80D303  |.  E8 17790100   call    7C824C1F
7C80D308  |.  85C0          test    eax, eax
7C80D30A  |.  74 08         je      short 7C80D314
7C80D30C  |.  FF70 04       push    dword ptr [eax+4]                ; /FileName
7C80D30F  |.  E8 3D170000   call    DeleteFileW                      ; /DeleteFileW
7C80D314  |>  5D            pop     ebp
7C80D315  /.  C2 0400       retn    4

可以得到一个流程 DeleteFileA --> DeleteFileW

DeleteFileW 的反汇编代码:

7C80EA51 > $  8BFF          mov     edi, edi
7C80EA53   .  55            push    ebp
7C80EA54   .  8BEC          mov     ebp, esp
7C80EA56   .  83EC 50       sub     esp, 50
7C80EA59   .  56            push    esi
7C80EA5A   .  8D45 C8       lea     eax, dword ptr [ebp-38]
7C80EA5D   .  50            push    eax
7C80EA5E   .  33F6          xor     esi, esi
7C80EA60   .  56            push    esi
7C80EA61   .  8D45 E0       lea     eax, dword ptr [ebp-20]
7C80EA64   .  50            push    eax
7C80EA65   .  FF75 08       push    dword ptr [ebp+8]
7C80EA68   .  C645 FF 00    mov     byte ptr [ebp-1], 0
7C80EA6C   .  FF15 5411807C call    dword ptr [<&ntdll.RtlDosPathNam>;  ntdll.RtlDosPathNameToRelativeNtPathName_U
7C80EA72   .  84C0          test    al, al
7C80EA74   .  0F84 FBCC0200 je      7C83B775
7C80EA7A   .  8B45 E4       mov     eax, dword ptr [ebp-1C]
7C80EA7D   .  8945 F4       mov     dword ptr [ebp-C], eax
7C80EA80   .  8B45 C8       mov     eax, dword ptr [ebp-38]
7C80EA83   .  66:3BC6       cmp     ax, si
7C80EA86   .  0F85 E9660200 jnz     7C835175
7C80EA8C   .  8975 D0       mov     dword ptr [ebp-30], esi
7C80EA8F   >  8B45 D0       mov     eax, dword ptr [ebp-30]
7C80EA92   .  53            push    ebx
7C80EA93   .  57            push    edi
7C80EA94   .  8945 B4       mov     dword ptr [ebp-4C], eax
7C80EA97   .  8D45 E0       lea     eax, dword ptr [ebp-20]
7C80EA9A   .  8945 B8       mov     dword ptr [ebp-48], eax
7C80EA9D   .  BF 40402000   mov     edi, 204040
7C80EAA2   .  57            push    edi
7C80EAA3   .  6A 07         push    7
7C80EAA5   .  8D45 E8       lea     eax, dword ptr [ebp-18]
7C80EAA8   .  50            push    eax
7C80EAA9   .  8D45 B0       lea     eax, dword ptr [ebp-50]
7C80EAAC   .  50            push    eax
7C80EAAD   .  68 80000100   push    10080                            ;  UNICODE "ocuments and 
7C80EAB2   .  8D45 F8       lea     eax, dword ptr [ebp-8]
7C80EAB5   .  8975 C0       mov     dword ptr [ebp-40], esi
7C80EAB8   .  8975 C4       mov     dword ptr [ebp-3C], esi
7C80EABB   .  8B35 1410807C mov     esi, dword ptr [<&ntdll.NtOpenFi>;  ntdll.ZwOpenFile
7C80EAC1   .  50            push    eax
7C80EAC2   .  C745 B0 18000>mov     dword ptr [ebp-50], 18
7C80EAC9   .  C745 BC 40000>mov     dword ptr [ebp-44], 40
7C80EAD0   .  FFD6          call    esi                              ;  <&ntdll.NtOpenFile>
7C80EAD2   .  8BD8          mov     ebx, eax
7C80EAD4   .  85DB          test    ebx, ebx
7C80EAD6   .^ 0F8C F5F4FFFF jl      7C80DFD1
7C80EADC   .  6A 23         push    23                               ; /InfoClass = FileAttributeTagInformation
7C80EADE   .  6A 08         push    8                                ; |Bufsize = 8
7C80EAE0   .  8D45 D8       lea     eax, dword ptr [ebp-28]          ; |
7C80EAE3   .  50            push    eax                              ; |Buffer
7C80EAE4   .  8D45 E8       lea     eax, dword ptr [ebp-18]          ; |
7C80EAE7   .  50            push    eax                              ; |pStatusBlock
7C80EAE8   .  FF75 F8       push    dword ptr [ebp-8]                ; |hFile
7C80EAEB   .  FF15 1810807C call    dword ptr [<&ntdll.NtQueryInform>; /ZwQueryInformationFile
7C80EAF1   .  8BD8          mov     ebx, eax
7C80EAF3   .  85DB          test    ebx, ebx
7C80EAF5   .  0F8C D5CC0200 jl      7C83B7D0
7C80EAFB   .  8B45 D8       mov     eax, dword ptr [ebp-28]
7C80EAFE   .  25 00040000   and     eax, 400
7C80EB03   .  0F85 0ECD0200 jnz     7C83B817
7C80EB09   >  85C0          test    eax, eax
7C80EB0B   .  0F85 1CCD0200 jnz     7C83B82D
7C80EB11   >  8D45 C8       lea     eax, dword ptr [ebp-38]
7C80EB14   .  50            push    eax
7C80EB15   .  FF15 5011807C call    dword ptr [<&ntdll.RtlReleaseRel>;  ntdll.RtlReleaseRelativeName
7C80EB1B   .  FF75 F4       push    dword ptr [ebp-C]
7C80EB1E   .  64:A1 1800000>mov     eax, dword ptr fs:[18]
7C80EB24   .  8B40 30       mov     eax, dword ptr [eax+30]
7C80EB27   .  6A 00         push    0
7C80EB29   .  FF70 18       push    dword ptr [eax+18]
7C80EB2C   .  FF15 1010807C call    dword ptr [<&ntdll.RtlFreeHeap>] ;  ntdll.RtlFreeHeap
7C80EB32   .  6A 0D         push    0D                               ; /InfoClass = FileDispositionInformation
7C80EB34   .  6A 01         push    1                                ; |Bufsize = 1
7C80EB36   .  8D45 0B       lea     eax, dword ptr [ebp+B]           ; |
7C80EB39   .  50            push    eax                              ; |Buffer
7C80EB3A   .  8D45 E8       lea     eax, dword ptr [ebp-18]          ; |
7C80EB3D   .  50            push    eax                              ; |pStatusBlock
7C80EB3E   .  FF75 F8       push    dword ptr [ebp-8]                ; |hFile
7C80EB41   .  C645 0B 01    mov     byte ptr [ebp+B], 1              ; |
7C80EB45   .  FF15 3010807C call    dword ptr [<&ntdll.NtSetInformat>; /ntdll.ZwSetInformationFile
7C80EB4B   .  FF75 F8       push    dword ptr [ebp-8]                ; /Handle
7C80EB4E   .  8BF0          mov     esi, eax                         ; |
7C80EB50   .  FF15 3810807C call    dword ptr [<&ntdll.NtClose>]     ; /ZwClose
7C80EB56   .  85F6          test    esi, esi
7C80EB58   .^ 0F8C 1F91FFFF jl      7C807C7D
7C80EB5E   .  33C0          xor     eax, eax
7C80EB60   .  40            inc     eax
7C80EB61   >  5F            pop     edi
7C80EB62   .  5B            pop     ebx
7C80EB63   >  5E            pop     esi
7C80EB64   .  C9            leave
7C80EB65   .  C2 0400       retn    4

得到一个流程 DeleteFileA --> DeleteFileW --> ntdll.ZwSetInformationFile,因此我们只要挂钩了ZwSetInformationFile 就可以简单实现目标了。这里写出了新的 ZwSetInformationFile 函数。

typedef LONG NTSTATUS;
#define STATUS_SUCCESS               ((NTSTATUS)0x00000000L)
#define STATUS_ACCESS_DENIED         ((NTSTATUS)0xC0000022L)
#define STATUS_INFO_LENGTH_MISMATCH  ((NTSTATUS)0xC0000004L)

typedef struct _IO_STATUS_BLOCK {
DWORD Status;
ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef enum _FILE_INFORMATION_CLASS {
// end_wdm
   FileDirectoryInformation       = 1,
   FileFullDirectoryInformation, // 2
   FileBothDirectoryInformation, // 3
   FileBasicInformation,         // 4  wdm
   FileStandardInformation,      // 5  wdm
   FileInternalInformation,      // 6
   FileEaInformation,            // 7
   FileAccessInformation,        // 8
   FileNameInformation,          // 9
   FileRenameInformation,        // 10
   FileLinkInformation,          // 11
   FileNamesInformation,         // 12
   FileDispositionInformation,   // 13
   FilePositionInformation,      // 14 wdm
   FileFullEaInformation,        // 15
   FileModeInformation,          // 16
   FileAlignmentInformation,     // 17
   FileAllInformation,           // 18
   FileAllocationInformation,    // 19
   FileEndOfFileInformation,     // 20 wdm
   FileAlternateNameInformation, // 21
   FileStreamInformation,        // 22
   FilePipeInformation,          // 23
   FilePipeLocalInformation,     // 24
   FilePipeRemoteInformation,    // 25
   FileMailslotQueryInformation, // 26
   FileMailslotSetInformation,   // 27
   FileCompressionInformation,   // 28
   FileObjectIdInformation,      // 29
   FileCompletionInformation,    // 30
   FileMoveClusterInformation,   // 31
   FileQuotaInformation,         // 32
   FileReparsePointInformation,  // 33
   FileNetworkOpenInformation,   // 34
   FileAttributeTagInformation,  // 35
   FileTrackingInformation,      // 36
   FileMaximumInformation
// begin_wdm
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;

typedef struct _FILE_NAME_INFORMATION {  
  ULONG  FileNameLength;  
  WCHAR  FileName[1];
} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;



typedef NTSTATUS (__stdcall *ZWQUERYINFORMATIONFILE)(
IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID FileInformation,
IN ULONG FileInformationLength,
IN FILE_INFORMATION_CLASS FileInformationClass
);

ZWQUERYINFORMATIONFILE ZwQueryInformationFile;

NTSTATUS __stdcall Hook_ZwSetInformationFile(IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PVOID FileInformation,
IN ULONG FileInformationLength,
IN FILE_INFORMATION_CLASS FileInformationClass)
{
  NTSTATUS ntstatus = STATUS_ACCESS_DENIED;

  HMODULE hNtdll = GetModuleHandle("ntdll.dll");
  ZwQueryInformationFile = (ZWQUERYINFORMATIONFILE)GetProcAddress(hNtdll, "ZwQueryInformationFile");

   IO_STATUS_BLOCK  ioStatus;
   FILE_NAME_INFORMATION * psi = {0};

  psi = (FILE_NAME_INFORMATION*)new WCHAR[sizeof(FILE_NAME_INFORMATION) + 1024];
  memset(psi, 0, (sizeof(FILE_NAME_INFORMATION) + 1024)*2);
  psi->FileNameLength = 1024;

  ntstatus = ZwQueryInformationFile(FileHandle, &ioStatus, psi, sizeof(FILE_NAME_INFORMATION) + 1024 * sizeof(WCHAR), FileNameInformation);

  if (ntstatus != STATUS_SUCCESS)
    PrintZwError("ZwQueryInformationFile", ntstatus);

  ntstatus = STATUS_ACCESS_DENIED;
  
  if( wcsstr(psi->FileName, L"b.txt") == NULL)
     ntstatus = ((PFZWSETINFORMATIONFILE)(PROC)g_ZwSetInformationFile)(FileHandle,IoStatusBlock,FileInformation,FileInformationLength,FileInformationClass);

  delete psi;
  return ntstatus;

}


这只是一个证明性代码,要实战的兄弟自己动点手吧 
OpenArk:Windows内核级系统安全与深度分析工具实战指南 系统安全与内核分析是理解操作系统底层运行机制、排查恶意软件和进行逆向工程的核心领域。其原理在于通过直接访问系统内核数据结构与API,绕过用户态抽象层,实现对进程、线程、模块、句柄及内核对象的深度洞察。这项技术的价值在于能够有效对抗高级威胁,如Rootkit和无文件攻击,为安全分析、应急响应和系统调试提供不可替代的视角。应用场景广泛覆盖恶意软件分析、系统异常排查、漏洞研究以及软件行为监控。本文聚焦于OpenArk这一开源工具,它凭借其无驱化架构实现了内核级深度检测,并通过一体化关联视图整合了进程管理、句柄分析 阅读详情

相关推荐

跟踪 Ring3 - Ring0 的执行流程

理论知识SYSENTER 指令是在 Inter Pentium(R) Ⅱ 处理器上作为“快速系统调用”功能的一部分被首次引用的。 SYSENTER 指令进行过专门的优化,能够以最佳性能由 Ring3 层切换到 Ring0 层。 微软首次引用 SYSENTER 指令是在 Windows 2000 的系统上,再次之前微软的系统是通过自陷指令 int 0x2E 进入 Ring0 层的系统空间的。 在

11:00 啦 3674

Win7下过盛*大Hack*Shield的部分驱动保护

在Win7下很多XP的驱动都不适用了!前几个月研究了一下盛*大游戏的泡泡*堂的Hack*Shield驱动保护发现Hook了十多个内核函数,Ring 3和 Ring 0的双重保护,同时加了Themida的壳。 现在暂时发现钩住了以下函数: hook NtReadVirtualMemory hook NtWriteVirtualMemory Hook NtClose Hook NtProte

o6108的专栏 6501

【信息科学与工程学】计算机科学与技术——第二百二十五篇 架构设计 03 云原生架构02

启用HPA Controller Partial Cache(只缓存必要字段)、调整Informer Resync Period减少内存、启用Controller Memory Limit、监控Informer Cache内存。: 设置HPA stabilizationWindowSeconds大于CA扩容时间、启用CA scale-down-delay-after-add、使用PriorityBased策略优先保留Pod、监控HPA-CA震荡频率。模型并行allreduce需5TB/s→满足;

weixin_49199313的博客 352

Ring0层发送IRP消息打开文件不释放对象实现文件防删

背景 文件保护技术不论对于病毒木马还是杀软来说,都是至关重要的。要在内核层下实现文件防删除,通常是通过HOOK内核函数来实现,通过判断是否是删除保护文件,从而拒绝操作。本文将介绍一种不需要HOOK操作即可实现的文件保护方法,通过发送IRP信息打开文件并获取文件句柄,而不关闭文件句柄,使文件句柄一直保持打开状态。在文件句柄没有被关闭释放的情况,文件不能被删除,从而实现文件防删除。 实现过程 在前面章节就已经介绍过发送IRP管理操作文件,直接发送 IRP 对文件进行操作,可以避免一些HOOK的干扰。 在发送 I

毕业作品网站 716

Ring3 Hook ZwQuerySystemInformation

Ring3 Hook ZwQuerySystemInformation实现隐藏进程,在XP里测试通过。

Windows11+VS2022驱动开发环境搭建实战:从零到编译(避坑指南)

本文详细介绍了在Windows11系统下使用VS2022搭建驱动开发环境的完整流程,包括版本匹配、工具安装、环境配置及常见问题解决。重点强调了WDK与系统版本的严格匹配,以及VS2022中驱动开发组件的正确配置方法,帮助开发者高效避坑并成功编译第一个驱动程序。

weixin_29251337的博客 527

内核无HOOK文件防删除

内核无HOOK文件防删除,可以过冰刃,xuetr,easydelete 本来是打算写暴力删除文件的程序的,结果意外发现,只需要在内核发送irp打开一个文件,之后不关闭Object,就拒绝其他程序访问了,easydelete这个工具还是比较强的,不过也不能删除,关键是不挂钩任何函数,不修该系统内核,看属性的时候只能看到一个常规,其它的什么都看不到,当然了360(7.0)版本的

trents的专栏 2384

D2D与C2C高速互联技术对比:从封装到性能的全面解析

本文全面解析了Die-to-Die(D2D)与Chip-to-Chip(C2C)高速互联技术的差异,从封装形式、传输距离到性能指标进行深度对比。D2D技术在带宽、延迟和能效方面具有显著优势,适用于高性能计算和AI加速;而C2C技术则更适合车载电子系统等长距离传输场景。文章还探讨了UCIe标准化趋势,并提供了技术选型的实用建议。

weixin_29197051的博客 561

C++解除文件占用

1.解除文件占用,其含义比较

dasgk的专栏 1万+

【UE5 C++开发指南】从零配置Visual Studio 2022开发环境

本文详细指导如何从零开始为UE5 C++开发配置Visual Studio 2022环境。文章强调了VS2022与UE5的深度兼容性,并逐步讲解了社区版下载、核心工作负载(如“使用C++的游戏开发”)与组件安装、界面优化、专属工具设置以及首个C++项目的创建与验证流程,帮助开发者高效搭建专业开发环境。

weixin_29016865的博客 395

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 604

Windows内核驱动安装卸载与安全防御实战指南

Windows内核驱动是运行在Ring 0的特权代码,其生命周期管理远超用户态程序——安装涉及INF解析、签名校验、PE加载、DriverEntry准入四重内核校验;卸载则需协同PnP管理器、对象管理器与内存管理器完成资源逆向释放。理解这一过程,是掌握内核API调用约束(如上下文IRQL、内存池类型、同步语义)和构建可靠安全防御(如ObRegisterCallbacks、ETW监控、内联Hook)的前提。本文聚焦驱动级对抗的真实战场,覆盖WDM/WDF兼容的可验证安装/卸载设计、非分页池黄金三原则、IRP五

weixin_34413103的博客 355

模板匹配加速之金字塔分层搜索

图像金字塔是一种多分辨率图像表示方法,它通过一系列逐渐缩小或放大的图像来表示原始图像的不同尺度。高斯金字塔(Gaussian Pyramid):通过不断下采样(降采样)生成更小的图像。拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔和差分操作生成一组残差图像。在模板匹配中,我们主要使用高斯金字塔来实现多尺度匹配。金字塔灰度模板匹配通过多尺度搜索策略,在保持较高准确率的同时显著提升匹配速度,尤其适用于:高分辨率图像处理实时检测系统移动端设备等资源受限场景。

weixin_44969144的博客 1733

Windows下自删除的艺术

jonasLy利用文件特性巧妙的转移了文件锁,使得文件锁移动在可选备份流,得以在Ring3层面下达到自删除,这项技术将会存在很久很久,直到微软把NTFS技术废弃掉或者修改掉文件的API底层,2年已经过去,目前来说微软没有打算修复这个缺陷。

2301_80127209的博客 264

ctfshow---sql注入(171-213)

这里提一句,为什么不直接替换成acb这种,因为,flag原本就有字母,还原的时候会全部都还原成数字的,数字替换成符号应该也是可以的,这边测试了下除了&#好像别的符号都可以。插入查询后查询语句就会变成这样,由于id=11111这是一个不存在的id,而后面1=1又为真,所以会查询到表内所有的内容,--+是注释后面的字符。因为接受username的时候没有用引号,所以接受单纯的数字,而数字和字符比较会转换类型,字符串会变成数字0进行比较,所以相等。

fainpo的博客 1324

【PostgreSQL教程】PostgreSQL 高级篇之子查询

子查询也可称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、、>=、

No8g攻城狮的博客 1206

NTDLL.DLL API Publish!

__isascii__iscsym__iscsymf__toascii_alldiv_alldvrm_allmul_alloca_probe_allrem_allshl_allshr_atoi64_aulldiv_aulldvrm_aullrem_aullshr_chkstk_CIcos_CIlog_CIpow_CIsin_CIsqrt_fltused_ftol_i64toa_i64tow_ito

Lobbyfish的专栏 5246

车载软件架构 —— AUTOSAR Vector SIP包(三)

### 上一篇文章中介绍了AUTOSAR基础软件供应商Vector公司的开发工具链,本文将继续介绍Vector公司的AUTOSAR产品。 ### -> 1、Vector SIP包中的StartApplication ### -> 2、StartApplication如何开始使用

Soly_kun的博客 831

获取硬盘型号、序列号等信息的正确姿势

一般地,如果略去复杂的过滤驱动,读写文件时控制流会依次经过文件系统驱动(ntfs.sys或fastfat.sys等)、卷管理驱动(volmgr.sys)、分区管理驱动(partmgr.sys)、磁盘类驱动(disk.sys和classpnp.sys)、存储设备端口驱动(storport.sys、scsiport.sys和ataport.sys三者之一)和小端口驱动(storachi.sys、stornvme.sys或usbstor.sys等)等。

AcceZn的博客 7651

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python读取路径太长_路径名太长,无法打开?

常规DOS路径限制为MAX_PATH(260)个字符,包括字符串的终止字符NUL。通过使用以\\?\前缀开头的扩展长度路径,可以超过此限制。此路径必须是完全限定的Unicode字符串,并且只能使用反斜杠作为路径分隔符。根据Microsoft的file system functionality comparison,最大扩展路径长度为32760个字符。单个文件或目录名最多可以包含255个字符(UDF...

weixin_29057237的博客 5972

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[原创] Ring3挂钩实现网址过滤、重定向——《另类挂钩-RING3数据包监视》应用...

转一份本地备份,原帖发在看雪的:http://bbs.pediy.com/showthread.php?t=100847 这份代码演示了如何根据黑名单过滤指定URL(可以实现简单的网页防火墙),并且演示了一种最容易实现的页面劫持方法(重定向)。当然,使用这个方法钓鱼是绝对禁止的,出了任何问题都与本人无关 实现原理:1. 网址的黑名单过滤最简单,如果不需要模式匹配的话可以直接 Pos...

weixin_30853329的博客 261

深度学习工具包 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&#39;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(&#39;DeepLearnToolbox&#39;));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(&#39;state&#39;,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&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,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 = &#39;sigm&#39;;%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, &#39;Too big error&#39;);```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(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;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)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;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, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% 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&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 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, &#39;Too big error&#39;);```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(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,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, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % 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, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);%% 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(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % 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, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ZwQueryDirectoryFile获取文件信息

// tt.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include "pch.h" #include <windows.h> #include <stdio.h> typedef LONG NTSTAT...

angliu9837的博客 633

[转] 根据文件的Handle获取文件路径

<br />      在网上搜索此类问题,搜索到有用的内容相当少,可能是因为比较少人发表这种文章,也不排除比较少人使用内核模式的办法。今晚通过在网上看到的一点资料,结合自己近期研究的课题,使用NtQueryInformationFile实现了根据文件的Handle获取文件路径,程序在VC2008下调试通过,源代码如下:<br /> <br />#include "stdafx.h" #include <windows.h> #include <tchar.h> typedef long NTST

baggiowangyu的专栏 2637

磁盘文件操作_ZwCreateFile_ZwOpenFile_ZwReadFile_ZwWriteFile_ZwSetInformationFile_ZwQueryInformationFile

#include"ntddk.h" VOID xiezai1(PDRIVER_OBJECT qudongduixiang) { KdPrint(("驱动卸载 历程\n")); return; } NTSTATUS DriverEntry(PDRIVER_OBJECT qudongduixiang, PUNICODE_STRING zhucebiao1) { HANDLE wenjianju

3301

ZwWriteFile routine

ZwWriteFile routine The ZwWriteFile routine 往一个打开的文件里写入数据. Syntax   NTSTATUS ZwWriteFile(   _In_     HANDLE           FileHandle,   _In_opt_ HANDLE           Event,   _In_opt_ PIO_APC_ROUTINE

死胖子的博客 3040
上一篇: 注释PEMaker6源代码(三)
下一篇: 注释PEMaker6源代码(二)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值