作为最流行的操作系统之一,对于Windows逆向的学习是很有必要的
而且官方的一些资料没有讲述很多Windows的细节,Windows是不开源的,但是你可以用逆向分析的手段来自己探索这些细节,懂很多别人无法懂的知识
在CTF中Windows逆向也是很重要的知识
第一部分说的是Windows有关的系统知识,按照要求查阅相关资料学习
不要刻意记忆,操作系统这种抽象结构层次的概念是不要记的,尽量多理解和思考,在实际操作中熟练
字节存储顺序
大端法
小端法
Windows API
- Windows程序员能使用的编程工具只有API函数
- 应用程序开发人员能看到的就是Win API,Windows操作系统的其他部分是完全透明的
- Win API是基于C语言的接口,Win API中的函数可以由不同的语言编写
Windows的消息机制
- Windows是一个消息系统
- 消息提供在应用程序之间
PE文件格式
PE文件的使用就一个平面地址空间,所有代码和数据都合并在一起,组成了一个很大的结构
- MS—DOS头部
- 区块
- 输入表
PE文件就是对有些什么区块,这些区块是干什么的了解一下,逆向中边操作边查阅
PE分析工具
- LordPE
- Stud_PE
Windows内核基础
- 权限级别
- 内存空间布局
- Windows的R3和R0之间的通信
- 内核函数
- TEB,PEB
内核对象
在Windows内核中有一种很重要的数据结构管理机制,就是内核对象,应用层的进程,线程,文件,驱动模块,时间,信号量
- Dispatcher对象
- I/O对象
- 其他对象
Windbg
Windbg在本地调试无法通过下断点来跟踪内核的执行,一般用联机调试,一台机器运行内核,一台机器运行Windbg
SSDT
SSDT全称为System Services Descriptor Table,中文为系统服务描述符表,SSDT表就是把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。
Win32 调试API
- Win32自带了一些API函数,提供了相当于一般调试器的大部分功能,这些就是Win32API
- 可以使用这些API编写一个进程调试器
- 还可以做一些别的工作
DLL注入技术
- 在Windows中,各个进程的内存空间是相互独立的,我们可以用DLL注入来实现跨进程的一些操作
- 在输入表被处理之前进行替换,在输入表中增加一个项目,指向要加载的目标DLL,新进程在初始化的时候就会主动加载目标DLL
- IAT Import Address Table
Hook技术
- 指令流就像水流一样,在适当的地方“下网”,就可 以对程序的运行流程进行拦截,监控
- Hook就是钩子,在逆向工程中将某些函数“钩住”,替换为自己编写的函数
使用Hook解题的一个例子(CTF)
感觉Hook的这种用法和二进制插桩是异曲同工的