Windows核心编程1-天青
Windows核心编程1-天青错误处理FormatMessage1234567891011121314151617DWORD dwError = ::GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE);HLOCAL hlocal = NULL;DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL); //设置FormatMessage返回的语言BOOL fOk = ::FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwError, systemLocale, (PTSTR)&hlocal, 0, NULL);if (!fOk) { //不成功还可能是网络相关错误 HMODULE hDll = ::LoadLibraryEx(TEXT("netmsg.dll") ...
Windows驱动开发入门-文件管理技术
Windows驱动开发入门-文件管理技术文件管理内核API创建文件或目录InitializeObjectAttributes打开文件、注册表或设备都需要先用这个初始化一个OBJECT_ATTRIBUTES属性:
1234567VOID InitializeObjectAttributes( OUT POBJECT_ATTRIBUTES InitializedAttributes, IN PUNICODE_STRING ObjectName, IN ULONG Attributes, IN HANDLE RootDirectory, IN PSECURITY_DESCRIUPTOR SecurityDescriptor)
IO_STATUS_BLOCK常用于表示一个操作的结果。
1234567typedef struct _IO_STATUS_BLOCK{ union{ NTSTATUS Status; PVOID Pointer; }; ULONG_PTR Infromation ...
手把手教你手撕NTFS文件系统
手把手教你手撕NTFS文件系统Markdown小崩修不好,凑合着看。
目标:定位H:\NtfsTest\520.exe。
第一步:计算$MFT偏移地址NTFS数据存放格式为:引导扇区DBR、主文件表$MFT、系统文件、数据区。
看到全映像开头,各字段含义为:
偏移
长度(字节)
含义
0x00
3
跳转指令
0x03
8
“NTFS”
0x0B
2
每个扇区大小(字节)
0x0D
1
簇大小
0x0E
2
保留
0x10
3
0
0x13
1
0x14
2
每磁头扇区数
0x16
2
每柱面磁头数
0x18
2
MBR到DBE扇区总数
0x1A
2
0x1C
4
0x20
4
扇区总数/分区大小
0x24
4
$MFT开始簇号
0x28
8
0x30
8
0x38
8
$MFTMirr开始簇号
0x40
4
每个MFT记录簇数
0x44
4
每索引簇数
0x48
8
分区逻辑序列号
当0x0B处为0x0200、0x0D处为0x08时,$MFT开始的偏移地址为:$$0\math ...
Windows驱动开发入门
Windows驱动开发入门开始到微软官网上下载并安装SDK和WDK,这俩内部版本号必须得对上,且安装时必须保持默认安装路径不变,新建Empty WDM Driver项目。当编译时出现Spectre相关错误,在项目设置中把这东西关掉。如果还是不能编译通过,把项目目录下的.inf文件从工程中移除。当某些警告被当作错误处理时,降低警告等级并关闭警告视为错误。
如果你的项目设置中没有链接器等选项(像我这样),恭喜你需要重装系统,或搞个虚拟机装吧!
WinDBG调试Windows 7别真机搞,弄个虚拟机,先在虚拟机设置中把打印机删除,再添加串行端口,使用名字“\\.\pipe\com_1”,并把轮询时中断CPU勾选上。当虚拟机为Windows 7时运行msconfig,引导中选择高级选项并勾选调试。Windows 10中要在设置的安全和更新选项卡的针对开发人员选项中开启开发人员模式。最后运行命令:
1bcdedit /set testsigning on
打开WinDBG Preview并Attach to Kernel,选项选COM,勾选Pipe和Reconnect,Port输入“\\.\p ...
WindowsAPI编程核心技术-功能技术
WindowsAPI编程核心技术-功能技术进程遍历CreateToolhelp32Snapshot为进程/堆/模块/线程创立快照。
123456HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, //选项 TH32CS_SNAPPROCESS所有进程 TH32CS_SNAPTHREAD所有线程 TH2CS_SNAPALL所有线程加进程 TH2CS_SNAPHEAPLIST所有th32ProcessID的堆 TH2CS_SNAPMODULE所有th32ProcessID的模块 DWORD th32ProcessID //PID)//成功返回快照句柄 失败INVALID_HANDLE_VALUE
Process32First系统快照中遇到的第一个进程信息。
1234BOOL WINAPI Process32First( _In_ HANDLE hSnapshot, _Out_ LPPROCESSENTRY32 lppe)//成功TRUE 失败FALSE GetLas ...
WindowsAPI编程核心技术-传输技术
WindowsAPI编程核心技术-传输技术TCPSocket分配个套接字。
12345678SOCKET WAAPI Socket( _In_ int af, //指定地址族规范 _In_ int type, //套接字类型 _In_ int protocol //协议)//成功返回引用新套接字的描述符 否则返回INVALID_SOCKET并通过WSAGetLastError来获取错误代码
bind本地地址与套接字绑定。
12345678int bind( _In_ SOCKET s, //标识未绑定套接字的描述符 _In_ const struct sockaddr* name, //sockaddr结构分配给绑定的套接字 _In_ int namelen //值的长度)//成功返回0 否则SOCKET_ERROR
htons将整数变量从主机字节序转为网络字节序。
1234u_short WSAAPI htons( _In_ u_short hostshort //主机字节序)//网络字节序
i ...
WindowsAPI编程核心技术-加密技术
WindowsAPI编程核心技术-加密技术CryptoAPIHASHCryptAcquireContext获取特定CSP内特定密钥容器句柄。
123456789101112BOOL WINAPI CryptAcquireContext( _Out_ HCRYPTPROV *phProv, //CSP句柄指针 _In_ LPCTSTR pszContainer, //密钥容器名称 _In_ LPCTSTR pszProvider, //CSP名称 _In_ DWORD dwProvType, //获取提供程序的类型 _In_ DWORD dwFlags //标志)//成功TRUE 失败FALSE
CryptCreateHash创建空HASH对象。
123456789101112BOOL WINAPI CryptCreateHash( _In_ HCRYPTPROV hProv, //CSP句柄 _In_ ALG_ID Algid, //要使用的HASH算法ID CALG_MD5 CALG_SHA1 CA ...
WindowsAPI编程核心技术-压缩技术
WindowsAPI编程核心技术-压缩技术数据压缩APIRtlGetCompressionWorkSpaceSize确定压缩和解压缩工作空间缓冲区的正确大小,单位字节。
12345678NTSTATUS RtlGetCompressionWorkSpaceSize( _In_ USHORT CompressionFormatAndEngine, //压缩格式和引擎类型 _Out_ PULONG CompressBufferWorkSpaceSize, //接收接收缓冲区所需大小 _Out_ PULONG CompressFragmentWorkSpaceSize //接收解压缓冲区为片段所需大小)//成功返回STATUS_SUCCESS 否则失败
RtlCompressBuffer压缩缓冲区。
123456789101112131415161718NTSTATUS RtlCompressBuffer( _In_ USHORT CompressionFormatAndEngine, //压缩格式和引擎类型 有枚举值自己去查 _In_ ...
WindowsAPI编程核心技术-隐藏技术
WindowsAPI编程核心技术-隐藏技术进程伪装NtQueryInformationProcess123456789101112NTSTATUS WINAPI NtQueryInformationProcess( _In_ HANDLE ProcessHandle, //要获取信息的进程句柄 _In_ PROCESSINFOCLASS ProcessInformationClass, //要获取的进程信息的类型 _Out_ PVOID ProcessInformation, //请求的信息 _In_ ULONG ProcessInformationLength, //缓冲区大小 _Out_opt_ PULONG ReturnLength //所请求信息的大小)//返回NTSTATUS成功或错误代码
PROCESS_BASIC_INFORMATION1234567typedef struct _PROCESS_BASIC_INFORMATION{ PVOID Reserved1; PPEB PebBas ...
WindowsAPI编程核心技术-提权技术
WindowsAPI编程核心技术-提权技术进程访问令牌权限提升‘OpenProcessToken打开与进程关联的访问令牌。
12345678BOOL WINAPI OpenProcessToken( _In_ HANDLE ProcessHandle, //打开访问令牌的进程句柄 _In_ DWORD DesiredAccess, //指定一个访问掩码 并指定访问令牌的请求类型 _Out_ PHANDLE TokenHandle //新打开的访问令牌句柄)//成功非0 失败0
LookupPrivilegeValue查看系统权限特权值并返回信息到一个LUID结构体中。
12345678BOOL WINAPI LookupPrivilegeValue( _In_opt_ LPCTSTR lpSystemName, //要获取特权值的系统名称 _In_ LPCTSTR lpName, //指定特权名称 在Winnt.h中定义 可以是枚举值常量 也可以是字符串 _Out_ PLUID lpLuid //接收指定系统中已 ...