自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zuishikonghuan的博客

welcome to my blog ^_^

  • 博客(80)
  • 收藏
  • 关注

原创 MinGW 与 MSVC 生成 DLL 各种情况的折腾笔记

写这篇博客,主要是刚折腾 MinGW,相关内容网上的资料不全,而且错误很多其实之前我根本没把这个当回事,我就想 MinGW 跟 Linux 上的 GNU 编译器不会有差别,但是事实却不是这样。。。提示:所有代码均使用 __stdcall安装 MSVC 和 MinGWMSVC:安装 Visual Studio,之后即可在开始菜单中找到“Visual Studio开发人员命令提示”,启

2016-07-15 18:43:55 17035 2

原创 Ring3 下 API Inline Hook 优化方案探索与实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/51302024  以前写过两篇“[Win32] API Hook(1)在32/64位系统上的实现”博客,介绍并给出了 API inline hook 代码,如下: bl

2016-05-03 09:30:33 7356 4

原创 驱动开发(13)IRP 的异步完成和 CancelRoutine

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/51301922在之前的博文中,我们对于IRP,都是同步完成的,但是 Windows 对异步操作很友好,我们来看看如何异步完成 IRP 。在应用程序中异步访问设备在开始之前,我认为有必要提

2016-05-03 09:26:53 2833

原创 驱动开发(12)内核中的多线程和同步对象

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在内核模式下创建线程在驱动程序中创建线程的方法是调用 PsCreateSystemThread 内核函数,此函数即可以创建系统线程,也可以创建用户线程。此函数的原型如下:NTSTATUS PsCreateSystemThread( _Out_ PHANDLE

2016-05-03 09:04:24 3231 2

原创 驱动开发(11)中断请求级

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/51062287“中断”是一个非常重要的概念,在 80x86 的设备上,Windows 引入了“中断请求级”(IRQL)这一个概念,(在 x86 平台)其中0-2为软件中断,3-31

2016-05-02 08:35:44 2051

原创 驱动开发(10)直接I/O和内存描述符表

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/50643005在上篇博文中,我们实现了在驱动程序中处理设备收到读写I/O请求,这个请求我们是使用缓冲I/O处理的。在上一篇中,我已经详细解释了使用缓冲I/O的原因,在这里简

2016-03-18 16:52:27 2342

原创 内核编程之SSDTHook(3)Hook NtCreateSection监控所有可执行模块加载

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/50924829在上两篇博文中,我介绍了SSDTHook的原理,并给出了一个实例--通过Hook NtOpenProcess来实现进程保护:http://blog.csdn.net/

2016-03-18 16:51:54 5535

原创 内核编程之SSDTHook(2)Hook NtOpenProcess实现进程保护

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:上一篇博文“内核编程之SSDTHook(1)原理(地址:)”中,介绍了SSDTHook的原理,这一篇博文,我们来写一个实例,通过Hook NtOpenProcess来的实现进程保护。我之前写过两篇Ring3下的API Inline Hook的博文,这两篇博文通过Inline

2016-03-11 14:20:36 7374

原创 内核编程之SSDTHook(1)原理

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:说驱动开发这么长时间了,也玩玩内核钩子,钩子(Hook)技术是一种截获对某一对象访问的技术,不仅在Windows平台,Linux平台上也有Hook技术。Hook技术种类繁多,实现细节也不同,还可以灵活使用。我之前写过两篇Ring3下的API Inline Hook的博文,这

2016-03-11 14:19:58 8992

原创 驱动开发(9)处理缓冲I/O设备的读写请求

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/50413094在上面的几篇博文中,介绍了 IRP 与派遣函数,通过例子“磁盘设备的绝对读写”演示了在应用程序中向一个设备发出I/O请求,并实现了驱动程序中处理一个I/O请求——

2016-01-03 16:32:16 2747

原创 驱动开发(8)处理设备I/O控制函数DeviceIoControl

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在上面的两篇博文中,介绍了IRP与派遣函数,以及我们通过了一个例子“磁盘设备的绝对读写”来演示了在应用程序中是如何向一个设备发出I/O请求的。这篇博文将演示在驱动程序中处理一个非常简单的I/O请求——由DeviceIoControl这个Win32API经过一系列的调用,在内核中

2016-01-03 16:31:37 8444

原创 [Win32] 直接读写磁盘扇区(磁盘绝对读写)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:正讲着驱动开发呢,这里突然插一篇Win32的博文,其实,还是做引子,上一篇博文“IRP与派遣函数”中,我们知道了驱动程序需要处理I/O请求,我们先来看看怎么发出一个I/O请求。一般的程序不会直接去访问磁盘,毕竟有文件系统(FileSystem)帮助我们轻松地组织文件,但是有

2016-01-03 16:31:00 23888 17

原创 驱动开发(7)IRP与派遣函数

在上一篇博文中,介绍了NT驱动的基本结构,这几篇博文,博主来说说驱动开发的一个核心内容——如何处理I/O请求。为何要处理I/O请求?因为通常一个驱动程序是为了控制硬件而设计的(虽然没有对应具体硬件的驱动远比有对应具体硬件的驱动要多得多),可以说,是操作系统与硬件通信的桥梁。而I/O操作是控制硬件的基本方法(不考虑对CPU和内存的操作),而驱动程序就是为操作系统提供了一种抽象,驱动程序如

2016-01-03 16:30:19 2830

原创 驱动开发(6)NT驱动的基本结构

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/49047055在之前的一篇博文“驱动开发(2)第一个NT驱动和NT驱动的编译”(http://blog.csdn.net/zuishikonghuan/article/detail

2015-11-08 13:25:55 2523

原创 [Win32] ShellHook的实现

启动Windows,加载Win32子系统,登录一个用户会话后,会启动Shell程序,默认是explorer.exe,就是我们看到的桌面和任务栏等,其实Shell是可以自定义的,我们完全可以自己编写一个Shell取代系统的Shell。下面我们来看看编写Windows Shell的核心技术之一——ShellHook。ShellHook是什么?当一个窗口创建、激活、关闭时,explorer总

2015-11-08 13:25:01 4065

原创 驱动开发(5)内核中的字符串

在驱动开发中,内核函数使用的字符串不再是应用程序使用的Win32子系统API和Native API中的char*和wchar_t*,而是内核Unicode字符串UNICODE_STRING。内核字符串有两种,ANSI字符串是ANSI_STRING,Unicode字符串是UNICODE_STRING,他们的结构是这样定义的:

2015-11-08 13:23:40 2357

原创 驱动开发(4)内核中的内存分配和错误码

在驱动开发中,我们不应该使用C/C++运行时函数中的malloc或者calloc函数分配内存,更不应该使用new关键字,因为内核中的内存分配需要特殊处理。在应用程序中,每个应用都有2G的虚拟内存,因此内存并不紧张,而所有的驱动程序共用内核模式的2G虚拟内存,因此内核中的资源非常宝贵,应该尽量节省。更可怕的是内存泄露,应用程序即使发生了内存泄露,在其结束时操作系统可以通过进程上下文中的虚拟内

2015-11-08 12:36:53 2505 1

原创 驱动开发(3)使用SCM加载NT驱动(用应用程序加载驱动)

在上一篇中,我简单介绍编写了一个NT驱动空壳,这一篇中,将介绍如何自己编写一个驱动程序加载器,即使用编程的方法加载驱动,而不是使用工具。我在上一篇中也提到了,驱动程序是通过服务加载的,我以前写过SCM(服务控制管理器)API的文章,详细介绍各函数的具体用法,详见:[Win32] SCManager 服务控制管理器API(1):http://blog.csdn.net/zuishi

2015-10-02 11:02:59 2884

原创 驱动开发(2)第一个NT驱动和NT驱动的编译

在上一篇中,我简单介绍了驱动开发的基础知识,这一篇中,将介绍编写一个NT空壳驱动(驱动基础框架)一、驱动入口驱动程序的入口点是DriverEntry,此函数的原型是:extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath) 参数1:系统发来的驱动对象

2015-10-02 10:59:21 4532

原创 驱动开发(1)基础知识

驱动程序是操作系统和硬件通讯的桥梁,同时,驱动程序可以实现很多特殊功能,比如,虚拟光驱(虚拟设备),内核级hook,文件系统透明加密(过滤驱动),修改Windows内核等等并非所有驱动程序都必须由设备的设计方编写。如果设备根据已发布的硬件标准来设计。这时驱动程序可以由 Microsoft 编写,设备设计者无须提供驱动程序。并非所有的驱动程序都与硬件关联。某些驱动程序与任何硬件设备根

2015-10-02 10:51:21 3330

原创 [Win32] 多线程和线程同步

多线程:一个进程创建时,默认情况下系统会为它创建一个主线程,(如果使用Native API创建的线程就没有主线程,是空的,必须自己创建主线程),应用程序可以自己创建线程,还有以前写过的一篇“DLL注入技术”,就是远程在其他进程中创建线程,然后让远程线程load我们的dll。系统是如何实现多线程的?其实,对于单CPU单核心的设备上,在一个确定的时刻,只能执行内存中的一个指令。所谓的“多任务抢占式

2015-10-02 10:46:46 6082

原创 [Win32 & GDI+Flat] 用分层窗口实现简单仿Aero透明效果

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:首先说一下GDI+Flat:我有写过一个GDI+Flat的系列博客,一共有10篇,都是顺着的,这是第一篇:GdiplusFlat(1)GDI+平面API:用GDI的思想进行GDI+编程,有兴趣的可以看一看。因为本篇中的绘图函数都是用的GDI+Flat,因此我们需要自己声明函数,自己

2015-09-01 13:59:16 7830 1

原创 [Win32] Windows Sockets 2笔记(4)TCP Client端的实现(长数据接收+超时机制)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在上上篇中,我说了Winsock2的基本函数,上一篇,我们制作了一个TCP Server端,并且实现了TCP Server端要支持长数据接收和接收超时机制(地址:http://blog.csdn.net/zuishikonghuan/article/details/4802

2015-09-01 13:58:03 3540

原创 [Win32] Windows Sockets 2笔记(3)TCP Server端的实现(长数据接收+超时机制)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/48027823在上一篇中,我说了Winsock2的基本函数,这一篇,我们来制作一个TCP Server端,并且要求这个TCP Server端要支持长数据接收和接收超时机制由

2015-09-01 13:57:20 3743

原创 [Win32] Windows Sockets 2笔记(2)基本函数

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/48001135在上一篇中,我说了网络的基础知识以及Winsock2的开启方法,这一篇,我们来制作一个TCP Server端1。创建Socket:socket()函数SOCK

2015-09-01 13:56:04 3015

原创 让Socket穿透Windows防火墙

创建了ServerSocket以后,并不是没事了,其实上,为了系统安全考虑,创建服务器套接字后,只是创建成功了,但是在数据包入站的时候呢,会被防火墙过滤,因此,我们就收不到来自网络的数据了。因此,在系统的默认安全级别下,当一个程序第一次创建ServerSocket时,系统会弹出一个这样的对话框:除非用户同意,点“运行访问”,否则就没办法通信,而你的程序,收不到半点异常因为防火墙不是

2015-08-28 16:20:43 13395 1

原创 [Win32] Windows Sockets 2笔记(1)在开始之前

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:Winsock2(Windows Sockets 2)是Windows上的套接字,但是没有Raw Socket,从XP开始,应用程序就不能再使用完整的原始套接字了,只允许内核程序(比如设备驱动)使用。但是如果我们只想进行TCP、UDP的网络通信,Winsock2不一定最简单

2015-08-26 10:29:11 2778

原创 [Win32] API Hook(2)在64位系统上的实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47979603本文是对上一篇的补充。关于apihook的原理,效果动画,代码分析,实现细节和32位hook的源码请见上一篇:[Win32] API Hook(1)在32

2015-08-25 17:19:11 12295 2

原创 [Win32] API Hook(1)在32位系统上的实现

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:API Hook技术,虽然很老了,但是依旧是很有用的技术,同时网上的资料往往不能直接拿过来用,c语言的太少。这回呢,我要用C语言来完整的编写一个Win32SDK编程的API Hook源码,但是我还是用cpp保存编译,为哈?因为微软对c语言标准支持的很不好,我不知道vs2013支持c

2015-08-25 14:57:52 9289 2

原创 [Win32] SCManager 服务控制管理器API(2)

在上一篇博文“[Win32] SCManager 服务控制管理器API(1)”中(地址:http://blog.csdn.net/zuishikonghuan/article/details/47803033),讲到了打开服务控制管理器、创建服务、打开服务、删除服务、获取服务状态、启动服务、发送控制码,这一篇继续。9。枚举服务

2015-08-21 10:43:53 4027

原创 [Win32] SCManager 服务控制管理器API(1)

1。OpenSCManager 打开服务控制管理器函数原型:SC_HANDLE WINAPI OpenSCManager( _In_opt_ LPCTSTR lpMachineName, _In_opt_ LPCTSTR lpDatabaseName, _In_ DWORD dwDesiredAccess);lpMachineName:置NULLlpD

2015-08-20 15:40:25 5308

原创 [Win32] DLL注入技术

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47781883DLL注入是什么?DLL注入是把指定的DLL加载到另一个进程的内存空间中去的技术。为何要注入DLL?完成一些特殊目的,病毒把恶意代码隐藏在正常的宿主进程中,瞒天过

2015-08-19 16:46:58 5902

原创 [Win32] DLL的开发和使用

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:为何要开发DLL:1。DLL可以在程序需要时加载或卸载,可以实现软件的“模块化开发”。2。可以达到一些特殊目的,比如通过DLL注入来进入另一个进程的空间,Hook它的函数,等等。所以不管怎么说,DLL是Windows开发中相当重要的一部分。DllMain

2015-08-19 15:41:41 3434

原创 [Win32] 获取进程完整路径

上两篇中,我们讲到了ToolHelp API,Process API和提升Debug权限,这一篇中来说说如何获取进程的程序路径。获取进程路径其实有很多方法。方法1。使用ToolHelp API枚举模块,其中,Module32First得到一个MODULEENTRY32 结构,结构中有一个szExePath成员,这个成员代表这个进程第一个模块的路径,也就是进程的路径(32位程序只能获取3

2015-08-18 10:35:49 11163

原创 [Win32] 启用进程Debug权限

在上一篇中,写过一个KillProcessAndWait函数,这个函数是用来终止一个进程并等待进程退出的函数,我们使用这个函数,可以关闭同一个用户下的进程,但是,即使以管理员权限运行程序,我们发现也无法终止系统的进程(比如系统桌面管理器dwm.exe)!这是为什么呢。另外,在写一篇中获取进程映像路径中,也会出现此问题。甚至只要是访问那些进程,即使是管理员权限都会出问题!其实,管

2015-08-18 08:57:21 7729 1

原创 [Win32] ToolHelp API 和 进程API 详解

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:

2015-08-17 15:38:32 4733

原创 [Win32] 服务程序开发(4)自定义控制码与服务通信

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47720285在上几篇博文中,我演示了如何编写一个系统服务,介绍了如何穿透Session 0在当前用户的桌面上创建一个用户进程,也可以获取服务自己的权限令牌在用户的桌面上创建一

2015-08-17 09:35:07 3543

原创 [Win32] 服务程序开发(3)Session 0隔离(下)创建SYSTEM权限可交互进程

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/47662727在上上篇博文中,我说了如何编写一个系统服务,上一篇,介绍了如何穿透Session 0在当前用户的桌面上创建一个进程,但是缺陷很明显,如果UAC处于开启状态,创

2015-08-14 16:13:27 4804

原创 [Win32] 服务程序开发(2)Session 0隔离(上)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:在上一篇博文中,我说了如何创建一个系统服务

2015-08-14 15:11:30 4268

原创 [Win32] 服务程序开发(1)基本概念和服务程序的框架

一。服务程序基本概念二。服务程序的编写框架1。StartServiceCtrlDispatcher函数BOOL WINAPI StartServiceCtrlDispatcher( _In_ const SERVICE_TABLE_ENTRY *lpServiceTable);函数功能:连接到服务控制管理器参数:一个SERVICE_TABLE_ENTRY结构的指针

2015-08-13 16:18:57 9672

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除