第一章:基础知识
文本字符
- 字节存储顺序与CPU有关。
- Big-Endian: 高位字节存入低地址,低位字节存入高地址,依次排列。
- Little-Endian: 低位字节存入高地址,高位字节存入高地址,反序排列。
- ASCII 与 Unicode字符集
- ASCII: 127以上的部分不统一。8位。
- Unicode: ASCII字符编码的扩展。在win中用两个字节进行编码,亦称宽字节编码(Widechars)。使用0~65535之间的双字节无符号整数对每个字节编码。所有字符均为16位。
Windows操作系统
WinAPI简介
- 略
常用Win32API函数
- API函数区分字符集: A表示ANSI,W表示Widechars即Unicode。
- 常用的API函数:
- hmemcpy() : win16 API函数。将内存某块数据拷贝到另一个地方。
- GetWindowText():USER32.DLL中。取得一个窗体的标题文字或一个文本控件的内容。
- GetWindowTextA
- GetWindowTextW
- GetDlgItem(): 获取指定对话框的句柄。
- GetDlgItemText(): 获取对话框文本。
- GetDlgItemTextA
- GetDlgItemTextW
- GetDlgItemInt() : 获取对话框整数值。
- MessageBox():USER32.DLL中,创建和显示信息框。
- MessageBoxA
- MessageBoxW
- 句柄:Windows标识,由应用程序简历或使用的对象所使用的一个唯一的整数值。
- Windows消息机制
- 消息(Message)驱动式系统。
- 消息队列:系统消息队列,应用程序消息队列。
- 常用的Windows消息函数:
- SendMessage()函数
- WM_COMMAND消息
- WM_DESTORY
- WM_GETTEXT
- WM_QUIT
保护模式简介
- 三种模式: 实模式,保护模式,虚拟86模式。当前系统主要运行在保护模式下。
- 虚拟内存
- 保护模式的权限级别
认识PE格式
- 文件分成不同的区块:
- .text : 代码段
- .rdata : 运行期只读数据
- .data : 初始化的数据块
- .idata : 包含其他外来DLL的函数及数据信息,即输入表。
- .rsrc : 包含模块的全部资源
- PE相关名词解释:
- 入口点(Entry Point) : 程序执行时的第一行代码
- 文件偏移地址(File Offset) : PE文件在磁盘上时各数据的地址。文件偏移地址从PE文件的第一个字节开始计数,起始值为0
- 虚拟地址(Virtual Address, VA): 程序访问存储器所使用的逻辑地址。又称内存偏移地址(Memory Offset)。可写成“段选择子:偏移量”的形式。
- 基地址(ImageBase):文件执行时被映射到指定内存地址中,这个初始内存地址即为基地址。由PE文件本身设定。
第二章 动态分析技术
OllDbg
- 界面
- 反汇编面板窗口
- 信息面板窗口
- 数据面板窗口
- 寄存器面板窗口
- 堆栈面板窗口
- 配置
- 界面设置
- 调试设置
- 加载符号文件
- 加载右键菜单
- 加载程序
- 创建进程
- attach进程
- 基本操作
- F7 : 单步步进,遇到CALL 跟进
- F8 : 单步步入,遇到CALL 路过,不跟进
- Ctrl+ F9 : 直到ret指令时中断
- Alt + F9 : 从系统领空回到应用程序领空
- F9 : 运行程序
- F2 : 设置断点
- 保存修改后的文件:
- 右键 Copy to executable/Selection
- Alt+M : 显示内存
断点
INT3断点
int3断点,机器码为CCh。当被调试进程执行INT3指令导致一个异常时,调试器捕捉异常并停下来。好处是可以下无数个,但缺点是改变了源程序指令,容易被检测到。检测方法为:取得检测函数的地址,读取第一个字节是否为cc。
硬件断点
与DRx调试器相关。DRx调试器一共有八个。
- DR0 ~ DR3 : 调试地址寄存器,保存需要监视的地址。
- DR4 ~ DR5 : 未知
- DR6 : 调试寄存器组状态寄存器
- DR7 : 调试寄存器组控制寄存器
DR0 ~ DR3来设定地址,DR7设置状态,最多只能设置4个断电。优点速度快,可用于替代CC断点。
内存断点
对所设的地址设置为不可访问/不可写属性。当访问/写入时产生异常,ollydbg捕获异常后比较是不是断点地址,若是则中断。缺点:慢。不修改源代码,在遇到代码校验时,并且硬件断点失灵的时候,可以用内存断点来代替。数量为1个。
内存访问一次性断点
按Alt+M显示内存后,有许多段。在相应的段上单击右键,选择Set break on access,会对整个内存块设置该类断点。这是一次性断点,当所在段被读取或被执行后中断,中断完成后断点将被删除。
消息断点
条件断点
条件记录断点
第三章 静态分析技术
文件类型分析
- PEID工具
- 用处:检测大多数编译语言、病毒和加密的壳
- 原理:被加壳的程序处理过的程序在壳里会留下相关加壳软件的信息。
- 参考
- Fileinfo