Windows的重要部分

Windows的主要部分
Windows的主要部分有三个主要子系统,分别是Kernel/User/GDI。
Kernel:操作系统核心功能服务,包括进程与线程控制、内存管理、文件访问等;Ring 0
User:负责处理用户接口,包括键盘和鼠标输入、窗口和菜单管理等;Ring 3
GDI:图形设备接口,允许程序在屏幕和打印机上显示文本和图形
壳的加载过程 
1)获取壳所需要使用的API地址  
如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API函数。壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数。
2)解密原程序的各个区块(Section)的数据  
壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。壳一般是按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。如果加壳时用到了压缩技术,那么在解密之前还有一道工序,就是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时1~2M大小,加壳后反而只有几百K。
4)HOOK-API  
程序文件中的输入表的作用是让Windows系统在程序运行时提供API的实际地址给程序使用,在程序的第一行代码执行之前,Windows系统就完成了这个工作。壳一般都修改了原程序文件的输入表,然后自己模仿Windows系统的工作来填充输入表中相关的数据,在填充过程中,外壳就可填充HOOK-API代码的地址,这样就可间接地获得程序的控制权。