Windows逆向基础知识
Windows逆向基础知识
字节存储顺序:
小端序和大端序,windows平台均为小端序(低字节数据放在低地址处)
ASCII与UNICODE:
ASCII(美国信息交换标准码):是一个7位编码,共128个代码,是现今最通用的单字节编码系统
UNiCODE:包括字符集,编码方案等,为了解决传统的字符数据局限而产生的,为每种语言的每一个字符设置了统一的二进制编码,以满足跨语言,跨平台的要求,宽字符集,是ASCII字符编码的一扩展,在Windows中,用2个字节对其进行编码。所有的字符都是16位,包括7位的ASCII,在高位填充0
windows API:apple:
API:全称叫应用程序编程接口,在windows程序设计领域发展初期,程序员所能使用的编程工具只有API函数,这些函数提供程序运行所需要的窗口管理,图形设备接口,内存管理等各项服务功能,这些功能以函数库的形式储备在一起,形成了windows应用程序编程接口,简称WIN API
WIN API子系统负责将API调用转换成windows操作系统的系统服务调用
windows提供了应用程序可利用的丰富的函数调用,这些函数调用采用动态链接库即DLL的形式实现
三个主要的动态链接库:
kernel32.dll,user32.dll,gdi32.dll,分别提供操作系统核心功能服务(包括进程与线程控制,内存管理,文件访问等),用户接口(处理用户接口,包括键盘和鼠标的输入,窗口和菜单的管理等),图形设备接口(允许程序在屏幕和打印机上显示文本和图形)
windows常见的两个API函数:
MessageBox函数:
在user32.dll中,作用是创建和显示信息框
int MessageBox{
HWND hWnd , //父窗口句柄
LPCTSTR IpText , //消息框文本地址(内容)
LPCTSTR IpCation , //消息框标题样式
UNIT uType , //消息框样式
}
ANSI版是MessageBoxA,Unicode版是MessageBoxW
父窗口句柄,是HWND格式的
句柄handle,32位的一个数值,windows需要使用很多句柄来标识例如应用程序的实例,窗口,图标,菜单,输出设备,文件等对象,程序通过调用windows函数获取句柄,然后在其他windows函数中使用句柄以引用它代表的对象,句柄的实际值对于程序来说无关紧要,这个值是在windows程序内部用来应用相应的对象的
GetDIgltem Text 函数:
在user32.dll用户模块中,获取对话框文本
Unit GetDIgltem Text{
HWND hDlg , //对话框句柄
Int nlDDlgltem , //控件标识(ID号)
LPCTSRT IpString , //文本缓冲区指针
int nMaxCount //字符缓冲区的长度
}
ANSI版是GetDIgltem TextA,Unicode版是GetDIgltem TextW
如果函数执行成功,返回值是文本长度,失败则返回0
MB_OK 只有一个对话框按钮
Windows消息机制:
Windows是一个消息驱动的系统
Windows消息提供应用程序与应用程序之间,应用程序与Windows操作系统之间进行通信的手段,应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成功能
在windows系统中,有2种消息队列,一种是系统消息队列,一种是应用程序消息队列,计算机的所有输入设备由windows监控,当应用事件发生时,windows先将输入的消息放在系统消息队列里面,再把消息拷贝到相应的应用程序消息队列里面,,然后发送到相应的窗口处理函数中