加密与解密 —— 基础知识
加密与解密
1. 软件的加密与解密
一款优秀的软件,技术秘密往往成为被盗取的重点。
软件的加密与解密是矛与盾的关系。
加密:维护商业利益,不断寻求各种有效的技术来保护软件版权,推迟软件被解密的时间;
解密:受盗版所带来的高利润趋势、个人兴趣,不断开发新的解密工具。
理论上,没有无法解密的保护。
2. 软件逆向工程
逆向工程:根据已有的产物和结果,通过分析来推导出具体的实现方法。
软件的逆向工程:可执行程序 -> 反编译 -> 源代码。
逆向工程的内容:
- 软件使用限制的去除或功能的添加
- 软件源代码的再获得
- 硬件的复制和模拟
现在的逆向工程,真实目的就是再利用。个人可以学习别人的编程技术及技巧,公司窥探别人的商业软件密码或开发与之兼容的软件。
逆向工程是一门优雅的技术。
3. 逆向分析技术
在软件汉化或解密的过程中,首要问题对软件进行分析。
分析的途径和策略:
- 通过软件使用说明和操作格式分析
- 静态分析技术
- 对反编译得到的程序清单进行分析。
- IDA。
- 动态分析技术
- 对各模块的技术细节分析。
- OllyDbg、WinDbg。
- 注意:1. 对软件进行粗跟踪;2. 对关键部分进行细跟踪。
文本字符
计算机中存储的信息都是二进制数表示的,屏幕上显示的字符都是二进制转换之后的结果。
字符集:一个系统支持的所有抽象字符的集合,包括文字、标点符号、图形符号和数字等。
1. ASCII(美国信息交换标准码)
7位的编码标准,取值范围:00h~7Fh。
包括26个小写字母、26个大写字母、10个数字、32个符号、33个控制代码及空格,共128个代码。取值范围:00h~0FFh。
由于计算机通常用字节(byte,8位)的存储单元进行信息交换,不同的计算机厂商对ASCII进行了扩充,增加了128个字符,增加字符的值是不统一的。比如:ANSI(系统预设的标准文字存储样式)。
2. Unicode
Unicode是ASCII字符编码的一个扩展,在Windows中用2个字节对ASCII编码,因此也被成为宽字符集。
Unicode是一种双字节编码机制的字符集,使用0~65535的双字节无符号整数对每个字符进行编码。
在Unicode中,所有的字符都是16位,所有7位的ASCII被扩充(高位扩充为零)为16位。
Intel处理器在内存中一个字在存储器中占用相继的2字节,按照Little-endian方式(低字节存低地址,高字节存高地址)存入。
3. 字节存储顺序
- Little-endian:低字节存低地址,高字节存高地址
- Big-endian:高字节存低地址,低字节存高地址
一般来说:x86系列的CPU都是Little-endian字节序;PowerPC通常是Big-endian字节序。网络协议也都采用Big-endian传输数据,所有Big-endian有时也叫网络字节序。
Windows操作系统
1. Win32 API函数
API(Application Programming Interface/应用程序编程接口)。
Win API(Windows应用程序编程接口):提供应用程序运行所需要的窗口管理、图形设备接口、内存管理等服务功能的函数库。
Win API子系统:负责将API调用转换成Windows操作系统的系统服务调用。
API 函数是Windows框架的基石,下面是Windows操作系统核心,上面是Windows应用程序。
- Win16:16位Windows(Windows 1.0~3.1)的API
- Win32:32位Windows(Windows 9x/NT/2000/XP/7/10)的API、64位Windows的API
Windows运转的核心是动态链接。Windows提供了大量的应用程序可利用的函数调用,这些函数采用动态链接库(DLL)实现。
-
DLL通常位于\Windows\System32子目录中(早期存在与System)。
![]()
-
在早期,Widnwos主要部分只需要在3个动态链接库中实现。
-
Kernel(KERNEL32.DLL实现):操作系统核心功能服务,包括:线程与线程控制、内存管理、文件访问等。
![]()
-
User(USER32.DLL):负责处理用户接口,包括:键盘和鼠标输入、窗口和菜单管理等。
![]()
-
GDI(GDI32.DLL):图形设备接口,允许程序在屏幕和打印机上显示文本和图形。
![]()
Win API 是一个基于C语言的接口,但是可以由不同语言编写的程序调用,只需符合调用规范即可。
在Win32 API函数字符集中,”A“:ANSI,单字节方式;”W“:Unicode,宽字节方式。但是内核使用Unicode字符集。ANSI需要更多的内存和CPU资源转换成Unicode。
2. WOW64
WOW64是64位Windows操作系统的子系统,可以是大多数32位应用程序在不进行修改的情况下运行在64位操作系统上。
Windows的64位系统文件都放在”Windows\System32“中,为了兼容32位操作系统,增加了”Windows\SysWOW64“。

3. Windows消息机制
Windows是一个消息(Message)驱动式系统。
Windows消息提供在应用程序与应用程序之间、应用程序与Windows系统之间进行通信的手段。
应用程序实现功能由消息触发、对消息响应、处理完成。
Windows系统中有两种消息队列:
- 系统消息队列
- 应用程序消息队列
事件发生过程:
- Windows将输入消息放入系统消息队列;
- 再将输入消息复制到相应的应用程序消息队列;
- 在应用程序中循环检索每个消息并发送给对应窗口函数。
4. 虚拟内存
Windows系统中,系统内存本身的空间可有限,可以通过虚拟内存,让程序拥有超过系统物理内存大小的可用内存空间。
虚拟内存是逻辑层面的划分。操作系统通过内存管理器将虚拟内存地址与物理地址进行对应。
- 应用程序不会直接访问物理地址;
- 虚拟内存管理器通过虚拟地址的访问请求来控制所有的物理地址访问;
- 每个应用程序都有独立的寻址空间;
- DLL没有”私有“空间,DLL总是被映射到其他应用程序的地址空间。





浙公网安备 33010602011771号