解密系列-基础篇学习笔记
解密必备常识
多字节存储顺序
- 多字节存储顺序与CPU有关,微处理器中的存放顺序有正序和逆序,即大端存储和小端存储;Intel系列为小端存储、RISC系列为大端存储。小端序为高位高地址低位低地址、大端序为高位低地址低位高地址。
ASCII和Unicode
- ASCII以7位存储,ASCII是Unicode的一部分。Unicode编码范围为0~65535,以16位存储。
Windows_OS
- Windows API:Windows应用程序接口,是针对windowsOS家族的系统编程接口
- windows体系结构需要仔细了解
- 动态链接:把一些经常会共用的代码制作为DLL文件,DLL文件本身的结构就是PE,如kernel32.dll、user32.dll、gdi32.dll
句柄
- windows编程基础,一个句柄是指使用的唯一的整数值,用于标志应用程序中的不同对象和同一对象中的不同实例。windows使用大量句柄来标志很多对象。
Windows NT/2000/XP与Unicode
- 可参考《windows程序设计》
- NT架构从内核到kernel32、user32、GDI32都是纯32位实现
- NT架构标准字符集从头开发,统一使用Unicode字符集,兼容ASCII字符集
Windows API函数与stdcall约定
- windows API编程采用面向对象思想和消息机制
- API查询可参考《Windows程序设计》
- C语言标准使用cdecl、windows标准使用_stdcall,二者参数入栈顺序均为自右向左,不同的是调用函数完成后由谁来清空栈
匈牙利命名法
- Windows函数名以匈牙利命名法来命令
回调函数
- Don’t call me, I’ll call you!
- CALLBACK:定时器+设定好的clock程序来实现回调
Windows消息机制
- 图形化界面、多任务管理等都是建立在消息处理机制之上的。
- 应用之间、应用与系统之间的通讯通过消息来触发,并通过对消息的相应和处理来完成。
- 消息队列分为系统消息队列和应用程序消息队列
- Windows本身是消息驱动,所以我们调试程序时跟踪一个消息会得到相当底层的答案。
- Windows为当前执行的每个程序维护一个消息队列,事件发生后会转换为消息并投放入消息队列。程序通过执行一块叫消息循环的程序代码来从消息队列中取出消息并处理。
- MSG结构如下
1
2
3
4
5
6
7
8typedef struct tagMSG{
HWND hwnd; //消息对应的句柄
UINT message; //消息的类型
WPARAM wParam; //消息的第一个参数
LPARAM lParam; //消息的第二个参数
DWORD time; //发送消息的时间
POINT pt; //发送消息时鼠标所在的位置
}MSG;
Windows保护机制
实模式
- 程序运行的实质是指令的执行
- CPU通过CS:IP寻址找到指令所在地方
- x86通过(段地址+偏移地址=物理地址)来寻址
- x86通过CS、DS、ES、FS、SS等存储数据
- x86系列使用中断机制来实现系统服务
- 寄存器的扩展之路:AL(8bit)->AX(16bit)->EAX(32bit)->RAX(64bit)
保护模式
程序运行的实质仍然是CPU执行指令操作数据,主要改变的是寻址的方式,以起到保护作用,主要体现在以下两点。
- 不同任务之间的虚拟地址隔离保护
- 同一任务之内的不同保护级别(0>1>2>3,一般系统只使用环0和环3)
虚拟内存
- 通过MAP映射,使可用虚拟内存达到4G(32位EIP索引范围最大范围为4GB)
- CPU通过时间切片分时机制来达到虚拟效果
- 应用程序不会直接访问物理地址
- 虚拟内存管理器通过虚拟地址访问请求,控制所有的物理地址访问
- 每个程序都有自己独立的4GB寻址空间,不同程序相互隔离
- DLL和EXE在虚拟模式下的机制是不同的,DLL程序没有自己的”私有空间”
初步识别PE格式
基本概念
- PE,portable executable(可移动的执行体),是windows环境自身所带的执行体文件格式,其部分特性继承自Unix的coff文件格式,支持跨win32平台。
- 除了VxD和16位dll,其他大部分win32执行体都使用PE文件格式,包括NT的内核模式驱动程序
- PE文件使用的是一个平面地址k空间,所有代码和数据都合并在一起,组成一个很大的结构
- 文件内容被分割为不同的区块(section,又称为区段、节等),块中包含代码或数据,每个区块都有不同名字以用来表示区块的内容。
- PE文件在磁盘上的数据结构与在内存中的结构一致,系统装载PE到内存中,,即PE文件某一部分映射到地址空间
相关名词
- 入口点(Entry Point):OEP,PE文件执行的入口点
- 文件偏移地址(File Offset):PE文件存储在磁盘上的时候,各数据的地址称作文件的偏移地址,文件偏移地址从PE文件的第一个字节开始计数,起始值为0
- 虚拟地址(Virtual Address):windows保护模式下,应用程序访问存储器所使用的逻辑地址称为虚拟地址,又称为内存偏移地址
- 基地址:文件执行时将被映射到指定内存地址中,这个初始内存地址称为基地址,这个值由PE文件本身来进行设定
本文作者:
yd0ng
本文链接: https://yd0ng.github.io/2020/11/20/%E8%A7%A3%E5%AF%86%E7%B3%BB%E5%88%97-%E5%9F%BA%E7%A1%80%E7%AF%87/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://yd0ng.github.io/2020/11/20/%E8%A7%A3%E5%AF%86%E7%B3%BB%E5%88%97-%E5%9F%BA%E7%A1%80%E7%AF%87/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!