6、内存管理

2022年08月06日Win32编程

摘要1、课程目标 1. 理解Windows内存管理架构 2. 掌握虚拟内存API的使用 3. 学会堆内存管理 4. 掌握内存保护和操作技术 2、名词解释 3、代码实现 3.1、示例1:VirtualAlloc 3.2、示例2:堆内存管理 3.3、示例3:内存信息查询 3.4、示例4:跨进程内存操作 4、课后作业 1. 基础练习:实现自定义内存池 2. 内存保护:演示不同页面保护属性的效果 3. 跨进程操作:读取另一个进程的内存数据 4. 内存泄漏检测:使用HeapWalk遍历堆

4、线程同步机制

2022年07月19日Win32编程

摘要1、课程目标 1. 理解线程同步的必要性 2. 掌握各种同步对象的使用 3. 学会选择合适的同步机制 4. 理解死锁和避免方法 2、名词解释 3、使用工具 4、代码实现 4.1、示例1:临界区 4.2、示例2:互斥体 4.3、示例3:信号量 4.4、示例4:事件 5、课后作业 1. 基础练习:实现生产者-消费者模型 2. 互斥体应用:使用互斥体实现单实例程序 3. 信号量应用:实现连接池的并发控制 4. 死锁分析:创建并分析一个死锁场景

5、静态库与动态库

2022年07月16日Win32编程

摘要1、课程目标 1. 理解静态库和动态库的区别 2. 掌握DLL的创建和使用 3. 学会DLL的显式和隐式加载 4. 掌握DLL导出表和导入表 2、名词解释 3、使用工具 4、代码实现 4.1、示例1:创建DLL 4.2、示例2:隐式加载DLL 4.3、示例3:显式加载DLL 4.4、示例4:DEF文件导出 4.5、示例5:遍历模块导出表 5、课后作业 1. 基础练习:创建一个包含数学函数的DLL 2. 显式加载:动态加载DLL并调用函数 3. 导出分析:使用Dumpbin分析系统DLL的导出表 4. DLL劫持:理解DLL搜索顺序和劫持原理

3、进程与线程

2022年06月24日Win32编程

摘要1、课程目标 1. 理解进程和线程的基本概念 2. 掌握进程创建和管理API 3. 学会多线程编程 4. 掌握进程枚举和信息获取 2、名词解释 3、使用工具 4、技术原理 4.1、进程 vs 线程 5、代码实现 5.1、示例1:创建进程 5.2、示例2:创建线程 5.3、示例3:进程枚举 5.4、示例4:线程枚举 5.5、示例5:进程信息获取 6、课后作业 1. 基础练习:创建多线程程序计算数学运算 2. 进程枚举:实现类似任务管理器的进程列表 3. 进程控制:实现进程启动/终止/挂起功能 4. 线程池:使用Windows线程池API

2、文件与目录

2022年06月23日Win32编程

摘要1、课程目标 1. 掌握Windows文件操作API 2. 理解文件属性和安全描述符 3. 学会目录遍历和管理 4. 掌握文件映射技术 2、名词解释 3、使用工具 4、技术原理 4.1、文件操作流程 4.2、访问模式 5、代码实现 5.1、示例1:基本文件操作 5.2、示例2:目录遍历 5.3、示例3:文件映射 5.4、示例4:文件属性操作 6、课后作业 1. 基础练习:实现文件复制函数 2. 目录遍历:递归统计目录大小 3. 文件映射:实现大文件的快速搜索 4. 文件监控:使用ReadDirectoryChangesW监控目录变化

1、消息机制

2022年06月19日Win32编程

摘要1、课程目标 1. 理解Windows消息驱动的编程模型 2. 掌握消息循环的工作原理 3. 学会窗口过程的编写 4. 掌握常用消息的处理方法 2、名词解释 3、使用工具 4、技术原理 4.1、消息结构 4.2、常用消息 5、代码实现 5.1、示例1:基本Win32程序框架 5.2、示例2:消息处理 5.3、示例3:发送消息 5.4、示例4:子类化窗口 6、课后作业 1. 基础练习:创建一个简单的Win32窗口程序 2. 消息处理:处理键盘和鼠标消息 3. 消息发送:实现跨进程发送消息 4. 窗口子类化:拦截并修改已有窗口的行为

9、阶段合集

2022年06月18日C&C++软件逆向技术

摘要1、课程目标 1. 回顾整个逆向分析章节的核心知识 2. 通过综合实战巩固学习内容 3. 掌握完整的逆向分析流程 4. 为后续安全研究打下基础 2、知识回顾 3、综合实战项目 3.1、项目1:密码验证程序分析 3.2、项目2:类结构还原 3.3、项目3:循环算法还原 3.4、项目4:完整程序分析 3.5、项目5:Patch技术 4、逆向分析速查表 4.1、常见代码模式 4.2、IDA快捷键 4.3、调试技巧 5、课后作业 1. CrackMe练习:找一个简单的CrackMe程序进行分析 2. 类还原:从真实程序中还原一个类结构 3. 算法分析:分析并还原一个加密算法 4. 完整分析:对一个小程序进行完整的逆向分析

8、构造函数与析构函数识别分析

2022年06月16日C&C++软件逆向技术

摘要1、课程目标 1. 掌握构造函数的汇编特征 2. 理解析构函数的调用时机 3. 学会识别各种构造方式 4. 掌握RAII模式的识别 2、名词解释 3、使用工具 4、技术原理 4.1、构造函数特征 4.2、析构函数特征 5、代码实现 5.1、示例1:基本构造函数 5.2、示例2:有虚函数的构造 5.3、示例3:继承的构造顺序 5.4、示例4:析构函数 5.5、示例5:堆对象创建 5.6、示例6:识别构造函数的技巧 5.7、示例7:栈对象的生命周期 6、课后作业 1. 基础练习:编写有构造/析构的类,观察汇编 2. 继承分析:分析继承关系中构造/析构顺序 3. 资源管理:识别RAII模式的析构调用 4. 实战还原:从反汇编识别构造/析构函数

7、类与对象识别分析

2022年06月15日C&C++软件逆向技术

摘要1、课程目标 1. 掌握C++对象的内存布局 2. 理解虚函数表的实现机制 3. 学会识别成员函数调用 4. 掌握对象布局的还原方法 2、名词解释 3、使用工具 4、技术原理 4.1、对象内存布局 4.2、虚函数表结构 5、代码实现 5.1、示例1:简单类的汇编特征 5.2、示例2:虚函数调用 5.3、示例3:识别虚函数表 5.4、示例4:thiscall识别 5.5、示例5:类继承的布局 5.6、示例6:还原类结构 6、课后作业 1. 基础练习:编写一个简单类,观察编译结果 2. 虚函数分析:分析有虚函数的类的vtable 3. 继承分析:分析继承关系的对象布局 4. 实战还原:从反汇编还原一个完整的类定义

6、数组与指针识别分析

2022年06月14日C&C++软件逆向技术

摘要1、课程目标 1. 掌握数组访问的汇编特征 2. 理解指针操作的反汇编模式 3. 学会识别多维数组 4. 掌握指针算术的分析方法 2、名词解释 3、使用工具 4、技术原理 4.1、数组访问公式 4.2、多维数组 5、代码实现 5.1、示例1:一维数组访问 5.2、示例2:二维数组 5.3、示例3:指针算术 5.4、示例4:指针和数组的等价 5.5、示例5:字符串处理(char数组) 5.6、示例6:识别数组类型 5.7、示例7:复杂寻址还原 6、课后作业 1. 基础练习:编写不同类型数组的操作,观察汇编 2. 多维数组:分析二维数组访问的反汇编 3. 指针算术:识别反汇编中的指针操作 4. 实战还原:从复杂寻址模式还原数据结构