加密与解密(第四版)基础知识
前言
一位逆向工程大师,可能具备以下特征
- 永远保持好奇心,崇尚自由——既能促使探索,也能抵抗商业利益和欲望的侵袭。有了它,枯燥的代码世界才有了生气。
- 勤奋与毅力。在一篇关于逆向的文章中这员工的语句:"让我们搞清楚"作为一名逆向工作者需要具备的基本条件,其实那并不是扎实的汇编功底和编程基础——可以完全不懂这些,秘诀就是勤奋加上执着!记住并做到这两点,你一样可以变得优秀。
- 精通至少一门编程语言——不仅是代码,更重要的是编程思想。
- 扎实的汇编功底和系统编程对的知识。
总之,逆向工程应该是一门优雅的艺术,而不是一些低层次者手中粗陋的工具;逆向工程的目的是学习与在利用;逆向工程的精神是"自由"
逆向分析技术
在软件汉化和软件解密的过程中,首要问题要对被汉化和解密的软件进行分析。对它们的分析可以使用动态调试工具进行,也可以通过静态分析进行,两者各有利弊。为了更有效地调试软件,我们有必要对软件分析地一般方法进行研究,以总结对软件进行分析的一般途径和策略。
通过软件使用说明和操作格式分析软件
静态分析IDA等
动态分析OllyDbg
常见的ASCII值
- Unicode是ASCII字符编码的一个扩展,只不过在Windows中用2字节对其进行编码,被称为宽字符集(Widechars)
- ASCII码为7位编码
字节存储顺序
-
大端程序(Big-endian):高位字节存入低地址,低位字节存入高地址。
-
小端程序(Little-endian):低位字节存入地址,高位字节存入高地址
Windows操作系统
Win32API函数
API的英文全称为:Application Programming Interface(应用程序编程接口) 如:窗口管理、图形设备接口、内存管理等服务功能。WinAPI子系统负责将API调用转换成Windows操作系统的系统服务调用。API函数是整个Windows框架的基石。
所有的32位Windows都支持win16API(以确保旧的应用程序兼容)
Windows运转的核心是动态链接:DLL文件(通常位于系统安装目录的\SYSTEM和\SYSTEM32子目录中)
Windows的主要部分只需要3个动态链接库
-
Kernel(由KERNELL32.DLL)实现:操作系统核心功能服务,包括进程和线程控制、内存管理、文件访问等
-
User(由USER32.DLL)实现:负责处理用户接口,包括键盘和鼠标输入、窗口和菜单管理等。
-
GDI(由GDI32.DLL):图形设备接口,允许程序在屏幕和打印机上显示文本和图形。
还有其他一些对象安全性、注册表操作(ADVAPI32.DLL)、通用控件(COMCTL32.DLL)、公共对话框(COMDLG32.DLL)、用户界面外壳(SHELL32.DLL)和网络(NETAPI32.DLL)
在NT架构下,Win32API能接受Unicode和ASCII两种字符集,而其内核只能使用Unicode字符集。尽管这些操作对用户来说都是透明的,但字符串的转换需要占用系统资源
Win32API函数字符集 "A"表示ANSI "W"表示Widechars(即Unicode)。前者是单字节方式;后者是宽字节式,以便处理双字节字符
MessageBox函数有两种 MessageBoxA(ANSI)和MessageBoxW(宽字符版) 此函数用于USER32.DLL用户模块中创建和显示信息框,函数原型如下:
int MessageBox(
HWND hWnd, //父窗口句柄
LPCTSTR lpText,//消息框文本地址
LPCTSTR lpCaption//消息框标题地址
UINT uType //消息框样式
);
MessageBoxA函数的内部结构
int MessageBoxA(
MessageBoxEXA{ //调用MeaaageBoxExA函数
MBToWCSEx() // 将MessageBoxA消息框的主体文字转换成Unicode字符串
MBToWCSEX() // 将MessageBoxA消息框的标题栏上的文字转换成Unicode字符串
MessageBoxExW() //调用MessageBoxExW函数
HeapFree() //释放内存
}
)
MessageBoxExA函数其实是一个替换翻译层,用于分配内存,并将ANSI字符串转换为Unicode字符串,系统最终调用Unicode版的MessageBoxExW函数执行。
需要掌握Win32编程知识
WOW64
WOW64(Windows-on-Windows64-bit)是64位Windows操作系统的子系统,可以使大多数32位应用程序在不进行修改的情况下运行在64位操作系统上。
64位的Windows,除了带有64位操作系统应有的系统文件,还带有32位操作系统应有的系统文件。在\windows\System32文件夹中包含原生的64位映像文件。位了兼容32位操作系统,还增加了\windows\SysWow64文件夹
执行过程
64位应用程序会加载System32目录下64位的kernel32.dll user32.dll和ntdll.dll
当32位应哟个程序加载时,WOW64建立32位ntdll.dll所要求的启动环境,将cpu模式切换至32位,并开始执行32位加载器,就如同该进程运行在原生的32位系统上一样。WOW64会对32位ntdll.dll的调用重定向ntdll.dll(64位)而不是发出原生的32位系统通用指令。WOW64会切换到原生的64位模式,捕获与系统调用有关的参数,发出对应的原生64位系统调用。当原生的系统调用返回时,WOW64在返回32位模式之前将所有输出参数从64位转换为32位。
- 不同点:WOW64既不支持16位应用程序的执行(32位Windows支持16位应用程序的执行),也不支持加载32位内核模式的设备驱动程序。WOW64进程只能加载32位的DLL,不能加载原生的64位DLL.类似的,原生的64位进程不能加载32位的DLL.