第一章
常见DLL及其功能
- 主要的三大动态链接库
- Kernal 操作系统核心功能服务(进程与线程控制、内存管理、文件访问)
- User 负责处理用户接口(键盘和鼠标输入、窗口和菜单管理)
- GDI 图形设备接口
- Other:
- ADVAPI32.DLL 对象安全性、注册表操作
- COMCTL32.DLL 通用控件
- COMDLG32.DLL 公共对话框
- SHELL32.DLL 用户界面外壳
- DIBENG.DLL 图形引擎
- NETAPI32.DLL 网络
常见Win32API
- hmemcpy 数据拷贝 win9x系列使用,(已不常用)
- GetWindowsText 标题OR控件内容
- GetDlgItem 获取对话框句柄
- GetDlgItemText 获取对话框文本
- GetDlgItemInt 获取对话框并尝试转换为整数
- MessageBox 不多说了
1.2.6
- SendMessage
- WM_COMMAND
- WM_DESTROY
- WM_GETTEXT
- WM_QUIT
- WM_LBUTTONDOWN
认识PE结构
- .text 代码块
- .rdata 运行期只读数据
- .data 初始化的数据
- .idata 输入表,包含其他外来DLL的函数及数据信息
- .rsrc 包含模块的全部资源
第二章 动态分析技术
单步跟踪
- Ctrl+F9 走到RET指令
- Alt+F9 走到应用程序领空
消息断点
View/Windows
Q: 加密与解密上的一个同样的程序,Unicode版的程序用od消息断点断不下来,但是ASCII版的程序可以断 下来。这是为什么?
A:你可以在IsDialogMessage上面下[[ESP+8]]==(button按钮的句柄) && [[ESP+8]+4]==202
找button的句柄的方法就是刚才那个截图
条件断点
当需要CreateFile打开“ C:\1212.txt”时,断下来, 命令为
bp CreateFileA,[STRING [esp+4]]=="c:\1212.txt"]
Shift + F2 条件断点 Shift+F4 条件记录断点
第四章 逆向分析技术
启动函数
Visual C++配有C运行库的源代码,可以在crt\src\crt0.c 文件中找到启动函数的源代码。控制台程序的启动代码存放在crt\src\wincmdln.c
//开发人员可以修改启动源代码,尝试一下。
作用:检索指向新进程的命令行指针,检索指向新进程的环境变量指针,全局变量初始化,内存堆栈初始化
比如:GetCommandLineA、GetStartupInfoA、GetModuleHandleA.
函数
_cdecl 调用者平衡堆栈 //C/C++与MFC程序默认使用
stdcall 子程序平衡堆栈 //Win32 API大部分采用
c/c++名称修饰
T_T 没看懂 跳了
第五章 常见的演示版保护技术
序列号保护方式
- 以用户名等信息作为自变量,通过函数F变换之后得到注册码
- 通过注册码验证用户名的正确性
- 使用对等函数检查注册码
- 同时采用用户名和序列号作为自变量,即采用二元函数
第十章 PE文件格式
IMAGE_DOS_HEADER //MS_DOS头部
PE文件头
IMAGE_NT_SIGNATURE 0x00004550 //即PE00
IMAGE_FILE_HEADER(映像文件头)
- +04h Machine WORD ;运行平台
- +06h NumberOfSections WORD ; 文件的区块数目
- +08h TimeDateStamp DWORD ;文件创建日期与时间
- +0Ch PointerToSybolTable DWORD ; 指向符号表(用于调试)
- +10h NumberOfSymbols DWORD ; 符号表中符号个数(用于调试)
- +14h SizeOfOptionalHeader WORD ; IMAGE_OPTIONAL_HEADER32 结构大小
- +16h Charcteristics WORD ; 文件属性
IMAGE_OPTIONAL_HEADER
- +18h Magic WORD ;标志字
- +1Ah MajorLinkerVersion
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />