码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 编程基础-C++入门到入土知识手册


    在这里插入图片描述
    在这里插入图片描述

    C++入门到入土知识手册

    • openGL 图形
    • 进程
    • 框架
      • QT
      • MFC
    • 驱动开发
    • windows核心编程
        • NT内核开发 NT API
      • NtQueryInformationProcess函数
      • NtSetInformationProcess函数
      • ZwCreateThreadEx函数
      • NtReadVirtualMemory
      • NtQuerySystemInformation
      • NtQueryInformationThread
      • Kernel32.dll
        • OpenProcess 函数
    • C语言
      • C语言开篇
      • Clion开发环境安装
      • 第一个C程序
      • 注释
    • 数据类型
      • 数据类型的导入
      • 常量和变量
      • 整型数据类型
      • long和long long的区别
      • 有符号和无符号数据
      • 整型数据的表示方法
      • 整型数据的输出格式
      • 字符数据类型
      • ASCII码表的高级应用
      • 转义字符
      • 浮点型数据
      • 数据在内存中的存储
    • 输入输出
      • 输入和输出的基本使用
      • getchar函数
    • 运算符和表达式
      • 运算符和表达式基本概念
      • 算术运算符
      • 赋值运算符
      • 关系运算符
      • 逻辑运算符
      • 位运算
      • 位运算高级用法
      • 逗号运算符
      • 条件运算符
    • 流程控制
      • 分支结构之if
      • 分支结构之if else
      • 分支结构之if else if
      • 分支结构之if else if荐
      • 分支结构之switch
      • 分支结构的嵌套
      • 循环结构之while循环
      • 循环结构之do while
      • 循环结构之for循环
      • 循环结构之循环的嵌套
      • 流程控制之break在switch语句中的使用
      • 流程控制之break在循环语句中的使用
      • 流程控制之continue的使用
      • 程序卡住了调试方法
      • 程序异常退出调试方法
      • 程序结果与预期不一致调试方法
    • 数组
      • 一维数组的基本使用
      • 一维数组元素的存储
      • 一维数组元素的地址
      • 一维数组应用举例
      • 一维数组逆置
      • 二维数组
      • 二维数组初始化
    • 函数
      • 函数的导入
      • 函数的定义
      • 函数的设计
      • 函数的使用
      • 函数的形参和实参
      • 局部变量和全局变量
      • 函数的嵌套调用
      • 函数的声明
      • 递归函数
    • C语言预处理
      • 宏定义的基本使用
      • 有参宏定义
      • 头文件的包含
      • 条件编译
    • 指针
      • 指针的基本概念
      • 指针的基本使用
      • 野指针
      • 不同类型指针变量之间的相同点
      • 不同类型指针变量之间的不同点
      • 指针的算术运算
      • 数组的指针
      • 指针数组
      • 指针变量的地址
      • 二级指针
      • 内存分配之malloc的基本使用
      • free内存释放
      • realloc的使用
      • 字符串的的定义
      • 字符串的操作
      • atoi和atof函数
      • strlen的使用及实现原理
      • strcpy函数
      • strncpy函数
      • strcat函数
      • strcmp函数
      • strstr函数
      • strtok函数
      • 函数指针
    • 复合数据类型
      • 结构体的定义
      • 结构体成员变量的初始化
      • 结构体中成员变量的访问
      • 函数指针在结构体中的应用
      • typedef对结构体类型进行重新定义
      • 结构体中的成员变量是另外一个结构体
      • 结构体的直接赋值
      • 联合体的定义及基本使用
      • 联合体的实际用途
      • 大端模式和小端模式
      • 枚举
    • C程序的组成
      • 头文件之宏定义
      • 头文件之结构体的定义
      • 全局变量和全局函数数的声明
      • 头文件编译原理
      • 头文件重复包含问题
      • static修饰
      • const的使用
    • winable.h
    • _WIN32_WINNT
    • __stdcall
    • 开辟内存
    • 创建线程
      • 二、程序结构
      • 编译 & 执行 C 程序
      • 三、 基本语法
        • C 的令牌(Token)
          • 1分号 ;
          • 2注释
          • 3标识符
          • 4关键字
          • 5 C 中的空格
      • 四、数据类型
        • 整数类型
        • 浮点类型
        • void 类型
    • C++ primer Plus
    • 黑马
    • C语言简介
    • C语言入门helloworld
    • CMD-Windows
      • 5种循环
    • 数组、函数算法应用
        • 冒泡法
        • 选择法排序
        • 递归函数
    • 嵌入式
          • GPIO //通用型之输入输出的简称
          • #pragma once
          • #include
          • afxtempl.h
          • afxcmn.h
          • themeutil.h
          • #ifndef
          • #define
          • #endif
          • tyedef
          • stdafx.h
          • stdafx.h并不是标准C++头文件,与项目的源代码文件存放在同一个文件文件夹下,通过#include"stdafx.h"引用。
          • stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)
          • GetWindowsDirectory // 用以获取Windows目录的完整路径名
          • strtok() 函数 //声明char *strtok(char *str, const char *delim)
          • wsprintf()将一系列的 字符 和数值输入到 缓冲区
          • FindResource // 该函数确定指定模块中指定类型和名称的资源所在位置
        • PID算法解析
        • min函数 //最小值的函数 c++标准库头文件
        • < algorithm> // 头文件
        • iostream库
        • constrain(x, a, b)
          • vga-hdmi 模拟视频信号转换
    • 灰帽编程-端口扫描
          • 获取IP地址之后 ---> 获取端口
          • 网路攻击信息收集途径——做到快速、精准、
    • 黑客编程-初识
        • #1 `来源标注
    • QQ登录群发实现
    • C++ 加载器
    • C++概述
    • C++ 对C的拓展
      • C++命令空间的基本常识
      • 命名空间的定义及成员的访问
      • 命名空间只能全局范围内定义
      • 命名空间的嵌套定义
      • 命名空间的声明和实现分开
      • 命名空间的别名
      • 引用的概念及基本使用
      • 使用引用的注意事项
      • 引用的本质
      • 引用作为函数的形参以及引用的意义
      • 内联函数的引入
      • 内联函数的基本概念
      • 内联函数的使用注意事项
      • 函数的默认参数
      • 默认参数注意事项
      • 函数重载的概念及使用
      • 函数重载的实现原理
      • const修饰
      • extern C在实际工作中的使用
      • nullptr
    • 类和对象
      • 类和对象的基本概念
      • 类的定义
      • 对象的实例化
      • 成员变量和成员函数的访问
      • 类成员的访问控制
      • 面向过程和面向对象程序设计
      • 习题讲解
      • 类的分开实现
      • 构造函数的引入
      • 无参构造函数
      • 有参构造函数
      • 无参构造函数设计的注意事项
      • 初始化成员列表的使用
      • 构造函数总结
      • 析构函数的用途
      • new运算符的使用
      • delete运算符的使用
      • new delete和malloc free的区别
      • 多个对象的构造和析构.
      • 使用已构造的对象初始化新的对象
      • 对象赋值的解决方法
      • 拷贝构造函数的使用
      • 拷贝构造函数的形参
      • 深拷贝和浅拷贝
      • 引用作为函数的形参
      • 编译器对属性和方法的处理机制
      • this指针
      • 静态成员变量
      • 静态成员函数
      • C++ sting类简述
      • 动态数组需求说明
      • Array类的设计
    • 继承
      • 为什么需要继承
      • 继承的概念
      • 派生类的定义
      • 派生类 继承基类 属性和方法验证
      • 三种不同的继承方式
      • protected和private的取别
      • 单继承中构造函数和析构函数的调用顺序
      • 派生类中调用基类的构造函数
      • 派生类中的成员变量和基类中的成员变量名冲突
      • 隐藏
      • 多继承
      • 环形继承
      • 虚继承
      • 静态成员的继承
    • 多态
      • 多态的概念
      • 运算符重载之前置++和后置++的重载
      • 静态联编的体现
      • 运算符重载之输出运算符的重载
      • 运算符重载的概念
      • 引用作为函数的返回值和对象作为函数返回值的差别
      • 运算符重载测试类构造函数的实现
      • Mstring类需求
      • 运算符重载之+号运算符的重载
      • Mstring类的声明
      • C++编译器对临时对象的优化
      • 运算符重载之+号运算符重载验证
      • 运算符重载之大于符号的重载
      • 运算符重载之符号的重载
      • 多态的引入
      • 运算符重载之=符号的重载
      • 友元函数
    • Mstring类=符号的重载
      • 友元类
      • Mstring 类输出运算符的重载
      • 动态多态的概念
      • 虚函数的基本使用
      • 重载覆盖隐藏
      • Mstring类+运算符的重载
      • 虚函数指针
      • Mstring类append函数的实现
      • 虚函数表的基本概念
      • Mstring类关系运算符的重载
      • 单继承关系中派生类 虚函数表中的内容
      • Mstring类destroyi函数的实现
      • 虚函数表指针的概念
      • 继承关系中各个类的虚函数表以及对象的内存模型
      • 动态绑定的引入
      • 动态绑定的原理
      • 基类指针指向派生类对象调用函数注意事项
      • 虚函数和非虚函数的灵活应用
      • 虚函数表指针的访问
      • 虚函数表及虚函数指针的访问
      • 纯虚函数的基本使用
      • 抽象类
      • 纯虚函数使用注意事项
      • 抽象类实例
      • 虚析构函数
    • 异常
      • 异常的基本概念
      • 抛出异常
      • 异常的捕获
      • C++标准异常
      • 自定义异常
    • 强制类型转换
      • 隐式类型转换和强制类型转换的概念
      • const_cast之const常量折查
      • const cast之const 修饰自定义类型
      • const cast之函数的形参和返回值
      • static cast
      • dynamic cast
    • 泛型编程

    https://cocomelonc.github.io/malware/2023/10/20/malware-cryptography-21.html

    1. BITSAdmin:用于管理后台智能传输服务(Background Intelligent Transfer Service,BITS)。
    
        
    3. Certutil:用于管理和转换数字证书。
        
    4. Netsh:用于管理网络接口和防火墙规则。
        
    5. Wget:虽然不是 Windows Server 2008 内置的命令,但可以通过下载 GNU Wget for Windows 软件包来在 Windows Server 2008 中使用。
        
    
    这些命令都可以在命令提示符下使用。例如,使用 BITSAdmin 命令下载文件:
    
    BITSAdmin /transfer myDownloadJob /download /priority normal http://example.com/myfile.zip C:\Downloads\myfile.zip
    
    
    
    https://www.baidu.com/link?url=T1ETjARTTho4cTHAgXogbZcxdFSgrjqLs36psTswI02S8zp4aOMXY7W2Xmm4F8m3qiL5BOou25toWoknTYKqe18x3qG9gf23Om7Wju4khZQMcqJ3VcZA_jIJGXPucBOA&wd=&eqid=fd46b11a000af06a00000004654af9b7
    
    
    https://www.baidu.com/link?url=iAC3J23jO24MCdAawb7F_h_7_m3D_Xr88b7kT9RH1u0Lfa9bURHF3Z8mgPIU1SaTgIBzDdkoJ4z3so5oldqKw_&wd=&eqid=bed218e90008395800000004654af9f1
    
    
    
    
    
    
    Windows 操作系统提供的一种高性能的 I/O 模型。它基于事件驱动机制,允许应用程序将 I/O 操作提交到一个 I/O 完成端口,操作系统会异步地处理这些 I/O 操作,并在操作完成后通知应用程序。使用 IOCP 模型,应用程序可以在单个线程上同时处理多个 I/O 操作,提高了应用程序的并发性和性能。
    
    在 IOCP 模型中,应用程序向操作系统注册一个 I/O 完成端口,并将 I/O 操作(如读、写、接受等)提交到这个端口。操作系统会将这个 I/O 操作异步地派发到相应的设备驱动程序或网络协议栈中处理。当操作系统完成一个 I/O 操作后,会将结果通知到 I/O 完成端口上,应用程序可以通过一个事件(如 CompletionRoutine 回调函数)获得通知并处理 I/O 操作的结果。
    
    IOCP 模型广泛应用于 Windows 平台的网络编程中,特别是高并发的服务器应用程序。它通过异步 I/O 操作,避免了应用程序在等待 I/O 执行完成时占用 CPU 时间,从而提高了处理能力和性能。
    
    
    
    
    Socket 是传统的网络编程模型,一般采用同步阻塞的方式进行 I/O 操作。它的优势是编程简单,易于理解;而劣势则是并发性能较差,无法充分利用系统资源,尤其在高并发、高负载的场景下容易出现性能瓶颈或阻塞,影响服务器的响应能力和表现。此外,使用 Socket 还需要处理复杂的网络协议栈和线程同步、互斥等问题。
    
    IOCP 则采用异步 I/O 完成端口模型,具有高并发、高性能、低延迟、低资源占用等优势。它能够实现单线程同时处理大量的客户端连接和并发请求,充分利用系统资源,避免阻塞和性能瓶颈问题。IOCP 还能够自适应负载,根据系统负载情况动态调整线程数和处理方式,保证系统稳定性和可用性。
    
    综上所述,IOCP 比 Socket 更适用于高并发、高负载的服务器应用程序,但也需要更复杂的编程和调试。因此,选择 Socket 还是 IOCP 需要根据实际需求和技术水平进行选择。
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    openGL 图形

    进程

    框架

    QT

    MFC

    驱动开发

    windows核心编程

    NT内核开发 NT API

    
    
    NtLoadDriver                      服务控制管理器加载设备驱动.
    NtUnloadDriver                    服务控制管理器支持卸载指定的驱动程序.
    NtRegisterNewDevice               加载新驱动文件.
    NtQueryIntervalProfile            返回数据.
    NtSetIntervalProfile              指定采样间隔.
    NtStartProfile                    开始取样.
    NtStopProfile                     停止采样.
    NtSystemDebugControl              实施了一系列的调试器支持的命令.
    NtRegisterThreadTerminatePort     一个调试登记通知线程终止.
    NtCreateDebugObject               创建一个调试对象.
    NtDebugActiveProcess              使调试器附加到一个积极的过程和调试它.
    NtDebugContinue                   允许一个进程,以线程产生了调试事件.
    NtQueryDebugFilterState           查询调试过滤国家一级的具体组成部分.
    NtRemoveProcessDebug              停止调试指定的进程.
    NtSetDebugFilterState             设置调试输出滤波器一级指定的组成部分.
    NtSetInformationDebugObject       设置属性的调试对象.
    NtWaitForDebugEvent               等待调试事件的进程正在调试.
    NtFlushInstructionCache           清空指定进程的指令缓冲区.
    NtInitiatePowerAction             启动电源事件.
    NtPowerInformation                获得该系统的电源状态.
    NtSetThreadExecutionState         设置一个线程的系统电源状态的要求.
    NtRequestWakeupLatency            设置一个进程唤醒延迟.
    NtClose                           关闭处理任何对象类型.
    NtDuplicateObject                 复制句柄的对象.
    NtCreateDirectoryObject           创建一个目录中的对象管理器命名空间.
    NtCreateSymbolicLinkObject        创建一个符号链接的对象管理器命名空间.
    NtOpenDirectoryObject             打开对象管理器名字空间目录.
    NtQueryDirectoryObject            用列举的对象位于一个目录对象.
    NtOpenSymbolicLinkObject          打开一个符号链接对象.
    NtQuerySymbolicLinkObject         归来的名称,对象,符号链接点.
    NtQueryObject                     查询对象的属性,如它的名字.
    NtSetInformationObject            树立了一个对象的属性.
    NtTranslateFilePath               转换的文件路径的格式.
    NtCreateKey                       创建或打开一个注册表项.
    NtOpenKey                         打开一个现有的注册表项.
    NtDeleteKey                       删除注册表项.
    NtDeleteValueKey                  删除价值.
    NtEnumerateKey                    枚举子项中的一个关键.
    NtEnumerateValueKey               列举了价值的一个关键.
    NtFlushKey                        刷新变化回到注册表在磁盘上.
    NtInitializeRegistry              获取注册滚动.单参数对这一规定是否安装启动或正常开机.
    NtNotifyChangeKey                 允许一个程序的通知改变某一关键或其子项.
    NtQueryKey                        查询信息的一个关键.
    NtQueryMultiplValueKey            检索信息多个指定值.
    NtQueryValueKey                   资讯检索指定的值.
    NtReplaceKey                      变化的支持文件的一个关键和其子项,用于备份/恢复.
    NtSaveKey                         保存的内容中的一个关键和子项文件.
    NtRestoreKey                      装载的内容主要从一个指定的文件.
    NtSetInformationKey               集属性中的一个关键.
    NtSetValueKey                     集相关的数据的价值.
    NtCreatePort                      创建一个港口对象.
    NtAcceptConnectPort               接受一个端口连接.
    NtCompleteConnectPort             完成了连接.
    NtConnectPort                     连接一个端口到另一个端口,接受连接.
    NtImpersonateClientOfPort         线程模拟确定的进程的另一端的一个港口.
    NtListenPort                      侦听端口的连接请求.
    NtQueryInformationPort            获取信息的一个港口.
    NtReadRequestData                 阅读相关资料港口信息.
    NtReplyPort                       发送一个回复邮件.
    NtReplyWaitReceivePort            发送一个回复邮件,然后等待传入请求消息.
    NtReplyWaitReplyPort              发送一个回复邮件,然后等待传入的回复邮件.
    NtRequestPort                     发送请求信息.
    NtRequestWaitReplyPort            发送请求信息,并等待传入的回复邮件.
    NtWriteRequestData                填写数据的请求消息.
    NtSecureConnectPort               创建一个安全的连接端口.
    NtQueryPortInformationProcess     用于确定某个进程有相关的例外或调试端口.
    NtAccessCheck                     检查当前线程是否已进入一个对象根据其安全描述符.
    NtAccessCheckAndAuditAlarm        生成相关的审计信息存取检查.
    NtAdjustGroupsToken               加注或删除群体与象征.
    NtAdjustPrivilegesToken           启用或禁用特权与象征.
    NtCloseObjectAuditAlarm           生成审计讯息,指出一个对象被关闭了.
    NtCreateToken                     创建令牌对象.
    NtDeleteObjectAuditAlarm          产生了审计事件表明,一个对象已删除.
    NtDuplicateToken                  重复象征对象.
    NtImpersonateThread               允许一个线程假冒身份的其他用户.
    NtOpenObjectAuditAlarm            产生了审计事件表明,一个物体开幕.
    NtOpenProcessToken                获得句柄令牌在指定的进程.
    NtOpenThreadToken                 打开的句柄令牌在指定线程.
    NtPrivilegeCheck                  检查,以查看是否有人员令牌已指定特权启用.
    NtPrivilegeObjectAuditAlarm       生成审核事件记录与特权检查.
    NtPrivilegedServiceAuditAlarm     生成审计信息表明尝试使用指定的特权.
    NtQueryInformationToken           获取信息的象征.
    NtQuerySecurityObject             检索信息的对象的安全设置.
    NtSetInformationToken             树立了一个象征性的属性.
    NtSetSecurityObject               设置安全信息的一个对象.
    NtAccessCheckByType               新的物件具体的安全支持.
    NtAccessCheckByTypeAndAuditAlarm  新的物件具体的安全支持.
    NtAccessCheckByTypeResultList     新的物件具体的安全支持.
    NtFilterToken                     新的物件具体的安全支持.
    NtCompareToken                    比较了两个令牌.
    NtOpenProcessTokenEx              打开一个进程令牌.
    NtOpenThreadTokenEx               打开一个线程令牌.
    NtAlertResumeThread               恢复线程.
    NtAlertThread                     发出警报,以一个线程.
    NtTestAlert                       检验是否有线程在等待警报.
    NtCreateProcess                   创建一个新的进程.
    NtCreateThread                    创建一个新线程.
    NtCurrentTeb                      返回一个指针,一个线程环境块.
    NtDelayExecution                  睡眠,暂停一个线程在指定的时间.
    NtGetContextThread                检索硬件方面的线程.
    NtSetContextThread                集硬件方面的线程.
    NtOpenProcess                     打开的句柄指定的进程.
    NtOpenThread                      打开的句柄指定的线程.
    NtQueryInformationProcess         获取一个线程的属性.
    NtQueueApcThread                  程序呼叫到一个线程.
    NtResumeThread                    唤醒暂停线程.
    NtSetInformationProcess           设置一个进程的属性.
    NtSetInformationThread            设置一个线程的属性.
    NtSuspendThread                   暂停一个线程的执行.
    NtTerminateProcess                删除进程.
    NtTerminateThread                 删除线程.
    NtYieldExecution                  原因线程放弃CPU.
    NtCreateProcessEx                 创建一个新的进程.
    NtResumeProcess                   恢复被暂停的进程.
    NtSuspendProcess                  暂停一个进程.
    NtCancelTimer                     取消计时器.
    NtCreateTimer                     创建一个计时器.
    NtOpenTimer                       打开一个计时器对象.
    NtQueryTimer                      查询计时器的属性.
    NtQueryTimerResolution            查询系统的计时器决议.
    NtSetTimer                        设置一个定时器到期活动.
    NtSetTimerResolution              设定系统计时器决议.
    NtQueryPerformanceCounter         查询系统的性能计数器.
    NtQuerySystemTime                 取得当前时间.
    NtSetSystemTime                   设置系统时间.
    NtGetTickCount                    获取系统开机以来时间.
    NtCreateEvent                     创建一个事件对象.
    NtOpenEvent                       打开事件对象.
    NtClearEvent                      清除标志着国家的事件.
    NtPulseEvent                      信号的事件,然后重置它.
    NtQueryEvent                      查询状况的一个事件.
    NtResetEvent                      重置事件向非标志着国家.
    NtSetEvent                        树立了一个活动,标志着国家.
    NtCreateEventPair                 创建一个事件一双.
    NtOpenEventPair                   打开一个事件对.
    NtSetHighEventPair                集高一半的活动,以表明对国家.
    NtSetHighWaitLowEventPair         集高一半的活动,以表明对国家和等待低一半,成为示意.
    NtSetLowEventPair                 集低一半的事件对.
    NtSetLowWaitHighEventPair         集低一半的事件,并等待对高一半将成为标志.
    NtWaitHighEventPair               等待高一半事件对成为暗示.
    NtWaitLowEventPair                等待低一半事件对成为暗示.
    NtCreateMutant                    创建一个突变的对象,称为互斥在用户模式.
    NtOpenMutant                      打开一个突变对象,称为互斥用户模式.
    NtCreateSemaphore                 创建一个信号灯对象.
    NtOpenSemaphore                   打开一个信号灯对象.
    NtQuerySemaphore                  查询状态的信号.
    NtReleaseSemaphore                标志着信号灯.
    NtSignalAndWaitForSingleObject    等待它标志着一次.
    NtWaitForMultipleObjects          等待多个对象,成为暗示.
    NtWaitForSingleObject             等待一个单一的对象,成为暗示.
    NtCreateKeyedEvent                创建一个输入事件对象.
    NtOpenKeyedEvent                  打开一个名为键控事件对象.
    NtReleaseKeyedEvent               标志着键控事件对象.
    NtWaitForKeyedEvent               等待事件成为键控信号.
    NtAllocateVirtualMemory           分配虚拟内存.
    NtFreeVirtualMemory               释放虚拟内存.
    NtQueryVirtualMemory              查询范围的虚拟内存的属性.
    NtProtectVirtualMemory            集保护的一系列虚拟内存.
    NtLockVirtualMemory               锁一系列的虚拟内存.
    NtUnlockVirtualMemory             解锁一系列的虚拟内存.
    NtReadVirtualMemory               读取范围内的虚拟内存从进程.
    NtWriteVirtualMemory              写了一系列的虚拟内存从进程.
    NtFlushVirtualMemory              刷新记忆体映射的记忆体范围的文件在磁盘上.
    NtCreateSection                   创建了一系列的内存支持文件.
    NtOpenSection                     打开一个名为内存映射节对象.
    NtExtendSection                   延长现有的各种虚拟内存支持文件.
    NtMapViewOfSection                地图一个文件中的虚拟内存.
    NtUnmapViewOfSection              一部分虚拟内存的支持文件.
    NtAreMappedFilesTheSame           装载机使用这一有效看看是否一个给定的文件已经被映射到内存中.
    NtCancelIoFile                    取消I/O请求.
    NtCreateFile                      创建或打开一个文件,目录或设备对象.
    NtCreateIoCompletion              告诉I/O管理器,一个线程希望时得到通知的I/O完成.
    NtOpenIoCompletion                打开一个名为I/O完成对象.
    NtSetIoCompletion                 树立了一个I/O完成对象的属性.
    NtQueryIoCompletion               具体信息检索的I/O完成对象.
    NtRemoveIoCompletion              消除了一个I/O完成回调.
    NtDeleteFile                      删除一个文件对象.
    NtDeviceIoControlFile             发送IOCTL装置的设备驱动,这是一个打开的文件对象.
    NtFlushBuffersFile                清除内存中的文件数据到磁盘.
    NtFsControlFile                   发送一个I/O控制IOCTL为代表的公开设备对象.通常用于文件系统有关的特别命令.
    NtLockFile                        锁了一系列文件的同步访问.
    NtUnlockFile                      解锁了一系列文件的同步访问.
    NtNotifyChangeDirectoryFile       寄存器一个线程希望得到通知时,一个目录的内容发生变化.
    NtOpenFile                        打开一个现有的文件.
    NtQueryAttributesFile             取得一个文件的属性.
    NtQueryDirectoryFile              检索目录的内容.
    NtQueryEaFile                     检索文件的扩展属性.
    NtSetEaFile                       集的扩展属性文件.
    NtQueryFullAttributesFile         获得文件的全部属性.
    NtQueryInformationFile            检索方面的具体资料的档案.
    NtSetInformationFile              确定具体的资料档案.
    NtQueryVolumeInformationFile      检索有关特定磁盘卷.
    NtSetVolumeInformationFile        集资讯量.
    NtReadFile                        读取数据文件.
    NtWriteFile                       写入数据文件.
    NtQueryQuotaInformationFile       查询NTFS磁盘配额信息.
    NtSetQuotaInformationFile         设置NTFS磁盘配额信息.
    NtQuerySystemInformation          性能计数器注册表中的出口的大量信息可通过这一呼吁.
    NtSetSystemInformation            各种行政程序使用此功能.
    NtShutdownSystem                  关闭与选择重新启动.
    NtCreateJobObject                 创建一个作业对象.
    NtOpenJobObject                   打开一个作业对象.
    NtQueryInformationJobObject       撷取资讯作业对象.
    NtAssignProcessToJobObject        指定一个进程作业对象.
    NtSetInformationJobObject         树立了一个作业对象的属性.
    NtTerminateJobObject              终止作业对象,终止其所有相关的进程.
    NtCreateJobSet                    创建了一个集多种就业工作的对象. 
    
    
    
    
    
    
    
    
    
    
    Windows内核回调函数
    CmRegisterCallback
    CmRegisterCallbackEx 注册表回调
    ExRegisterCallback
    ObRegisterCallbacks
    PsSetCreateProcessNotifyRoutine
    PsSetCreateProcessNotifyRoutineEx
    PsSetCreateProcessNotifyRoutineEx2
    PsSetCreateThreadNotifyRoutine
    PsSetCreateThreadNotifyRoutineEx
    PsSetLoadImageNotifyRoutine
    
    
    
    http://www.pnpon.com/article/detail-114.html
    WMI
    
    
    
    Native API
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240

    在这里插入图片描述

    你可以使用 ctypes 模块来加载 ntdll.dll 并调用其中的函数,例如:
    
    import ctypes
    ntdll = ctypes.windll.ntdll
    ntdll.NtOpenFile(...)
    复制
    你也可以使用 subprocess 模块来运行一个 exe 程序,然后接收它的输出2,例如:
    
    import subprocess
    result = subprocess.check_output(['cos_exe.exe', '45'])
    复制
    另外,你还可以使用 Cython 来生成并调用 pyd 文件,这是一个更高效和方便的方法2,例如:
    
    # hello.pyx
    def say_hello(name):
        print(f"Hello {name}!")
    
    # setup.py
    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules = cythonize("hello.pyx")
    )
    
    # build and import
    python setup.py build_ext --inplace
    import hello
    hello.say_hello("Bing")
    
    
    
    https://developer.aliyun.com/article/1160810
    
    
    
    shellcode加载分为3步:申请内存->shellcode写入内存(-> 修改内存属性)->执行该内存
    但是我们常用的函数,已经被一些杀软标记查杀
    ctypes.windll.kernel32.VirtualAlloc
    ctypes.windll.kernel32.RtlMoveMemory
    ctypes.windll.kernel32.CreateThread
    
    
    
    AllocADsMem:
    https://docs.microsoft.com/en-us/windows/win32/api/adshlp/nf-adshlp-allocadsmem
    ReallocADsMem
    https://docs.microsoft.com/en-us/windows/win32/api/adshlp/nf-adshlp-reallocadsmem
    
    bypassAV  2023 ctypes.windll.ntdll
    
    
    windows api 是用来分配和重新分配内存的。
    AllocADsMem 函数分配指定大小的内存块1,
    ReallocADsMem 函数重新分配并复制现有内存块23。
    这些函数是 Active Directory Service Interfaces (ADSI) 的一部分,用于与目录服务进行交互。
    
    VirtualAllocExNuma:用于在指定的 NUMA 节点上为指定进程的虚拟地址空间中的区域保留,提交或更改内存状态。
    VirtualProtect:用于更改当前进程的虚拟地址空间中的内存区域的保护属性。
    VirtualProtectEx:用于更改指定进程的虚拟地址空间中的内存区域的保护属性。
    ReadProcessMemory:用于从指定进程的虚拟地址空间中读取数据。
    WriteProcessMemory1:用于向指定进程的虚拟地址空间中写入数据。
    FlushInstructionCache:用于刷新指定进程的指令缓存。
    CreateRemoteThread:用于在另一个进程的虚拟地址空间中创建一个线程。
    CreateRemoteThreadEx:用于在另一个进程的虚拟地址空间中创建一个线程,并指定扩展属性。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    NtQueryInformationProcess函数

    通过ProcessInformationClass参数可以查找进程的不同信息,包括PEB信息、WOW64信息、子系统信息、imageFileName映像文件名信息等。
    
    NTSYSCALLAPI
    NTSTATUS
    NTAPI
    NtQueryInformationProcess(
        _In_ HANDLE ProcessHandle,
        _In_ PROCESSINFOCLASS ProcessInformationClass,
        _Out_writes_bytes_(ProcessInformationLength) PVOID ProcessInformation,
        _In_ ULONG ProcessInformationLength,
        _Out_opt_ PULONG ReturnLength
        ); 
    
    
    ProcessHandle:进程句柄
    ProcessInformationClass:需要检索的进程信息类型,具体参数类型,见本节结尾“进程信息类型表”。
        
    如果第二个参数是ProcessBasicInformation的话,则第三个参数必须为一个指针指向结构PROCESS_BASIC_INFORMATION:
    
    ProcessInformation: 缓冲指针,保存进程信息,大小取决于进程信息类型。
    ProcessInformationLength:以字节为单位的缓冲大小
    ReturnLength:实际写入到缓冲的字节数    
        
    返回值:
    返回一个NTSTATUS成功或错误代码
        
        
        
    附录
    
    进程信息类型表
    值	含义
    ProcessBasicInformation 0		返回PEB结构指针,检索判断特定进程是否正在被调试
    ProcessDebugPort 7				返回DWORD指针,检索获得当前进程的调试端口号
    ProcessWow64Information 26		判断进程是否运行在WOW64环境(WOW64指基于Win32的程序运行在x64系统上)
    ProcessImageFileName 27			返回Unicode字符串,包含进程的映像文件名
    ProcessBreakOnTermination 29	返回ULONG值, 判断是否这个进程被认为是重要进程的。(一般系统级别的exe都是重要进程)
    ProcessSubsystemInformation 75	返回SUBSYSTEM_INFORMATION_TYPE,指出进程的子系统类型。
        
    当ProcessInformationClass为ProcessBasicInformation时:
    缓冲区指针 应该指向 _PROCESS_BASIC_INFORMATION
        
        
    typedef struct
    {	  
    	  DWORD ExitStatus; // 接收进程终止状态
          DWORD PebBaseAddress; // 接收PEB进程环境块地址
          DWORD AffinityMask; // 接收进程关联掩码
          DWORD BasePriority; // 接收进程的优先级类
          ULONG UniqueProcessId; // 接收进程ID
          ULONG InheritedFromUniqueProcessId; //接收父进程ID
    } PROCESS_BASIC_INFORMATION;
    
    示例:从PEB32获得进程路径
        
    /**
    *
    * 获得PEB的进程路径
    *
    */
    
    #include 
    #include 
    #include 
    #include 
    #include 
    
    
    BOOL GetProcessFullPathByProcessID(ULONG32 ProcessID, WCHAR* BufferData, ULONG BufferLegnth) {
    	HANDLE	ProcessHandle = NULL; 
    	ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessID);
    
    	if (ProcessHandle == NULL) {
    		return FALSE;
    	}
    
    	
    	PROCESS_BASIC_INFORMATION	pbi = { 0 };
    	SIZE_T	ReturnLength = 0;
    	NTSTATUS status = NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &pbi, sizeof(PROCESS_BASIC_INFORMATION),
    		(PULONG)&ReturnLength);
    	
    	if (!NT_SUCCESS(status)) {
    		CloseHandle(ProcessHandle);
    		ProcessHandle = NULL;
    		return FALSE;
    	}
    
    	PEB	Peb = { 0 };
    	status = NtReadVirtualMemory(ProcessHandle, pbi.PebBaseAddress, &Peb, sizeof(PEB32), (SIZE_T*)&ReturnLength);
    
    	if (!NT_SUCCESS(status)) {
    		CloseHandle(ProcessHandle);
    		ProcessHandle = NULL;
    		return FALSE;
    	}
    
    	RTL_USER_PROCESS_PARAMETERS RtlUserProcessParameters = { 0 };
    	status = NtReadVirtualMemory(ProcessHandle, Peb.ProcessParameters, &RtlUserProcessParameters,
    		sizeof(RTL_USER_PROCESS_PARAMETERS), (SIZE_T*)&ReturnLength);
    
    	if (!NT_SUCCESS(status)) {
    		CloseHandle(ProcessHandle);
    		ProcessHandle = NULL;
    		return FALSE;
    	}
    
    	if (RtlUserProcessParameters.ImagePathName.Buffer != NULL)
    	{
    		ULONG v1 = 0;
    		if (RtlUserProcessParameters.ImagePathName.Length < BufferLegnth)
    		{
    			v1 = RtlUserProcessParameters.ImagePathName.Length;
    		}
    		else
    		{
    			v1 = BufferLegnth - 10;
    		}
    		status = ReadProcessMemory(ProcessHandle, RtlUserProcessParameters.ImagePathName.Buffer,
    			BufferData, v1, (SIZE_T*)&ReturnLength);
    		if (!NT_SUCCESS(status)) 
    		{
    			CloseHandle(ProcessHandle);
    			ProcessHandle = NULL;
    			return FALSE;
    		}
    	}
    
    	CloseHandle(ProcessHandle);
    	return TRUE;
    }
    
    int main() {
    	BOOL bOk = FALSE;
    	ULONG32 ProcessID = 0;
    	WCHAR   BufferData[MAX_PATH] = { 0 };
    	//定义完整路径数组ÿ
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
  • 相关阅读:
    【Linux】 ubuntu ffmpeg环境配置
    外加1:异常处理深度解析
    消息队列解决的问题
    领域驱动设计(DDD):三层架构到DDD架构演化
    计算机毕业设计(附源码)python-在线作业管理系统
    企业内业务系统与Activiti流程引擎的结合(十二)
    【Java基础面试三十五】、谈谈你对面向接口编程的理解
    Xilinx FPGA 程序固化重新上电程序不运行的问题
    Day17删除字符串中的所有相邻重复项
    计算机网络-----IP地址分配
  • 原文地址:https://blog.csdn.net/qq_33608000/article/details/133901524
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号