Chybeta

逆向学习笔记(一)

跟着《加密与解密》学习。

第一章:基础知识

文本字符

  1. 字节存储顺序与CPU有关。
    • Big-Endian: 高位字节存入低地址,低位字节存入高地址,依次排列。
    • Little-Endian: 低位字节存入高地址,高位字节存入高地址,反序排列。
  2. ASCII 与 Unicode字符集
    • ASCII: 127以上的部分不统一。8位。
    • Unicode: ASCII字符编码的扩展。在win中用两个字节进行编码,亦称宽字节编码(Widechars)。使用0~65535之间的双字节无符号整数对每个字节编码。所有字符均为16位。

Windows操作系统

WinAPI简介

常用Win32API函数

  1. API函数区分字符集: A表示ANSI,W表示Widechars即Unicode。
  2. 常用的API函数:
    • hmemcpy() : win16 API函数。将内存某块数据拷贝到另一个地方。
    • GetWindowText():USER32.DLL中。取得一个窗体的标题文字或一个文本控件的内容。
      • GetWindowTextA
      • GetWindowTextW
    • GetDlgItem(): 获取指定对话框的句柄。
    • GetDlgItemText(): 获取对话框文本。
      • GetDlgItemTextA
      • GetDlgItemTextW
    • GetDlgItemInt() : 获取对话框整数值。
    • MessageBox():USER32.DLL中,创建和显示信息框。
      • MessageBoxA
      • MessageBoxW
  3. 句柄:Windows标识,由应用程序简历或使用的对象所使用的一个唯一的整数值。
  4. Windows消息机制
    • 消息(Message)驱动式系统。
    • 消息队列:系统消息队列,应用程序消息队列。
    • 常用的Windows消息函数:
      • SendMessage()函数
      • WM_COMMAND消息
      • WM_DESTORY
      • WM_GETTEXT
      • WM_QUIT

保护模式简介

  1. 三种模式: 实模式,保护模式,虚拟86模式。当前系统主要运行在保护模式下。
  2. 虚拟内存
  3. 保护模式的权限级别

认识PE格式

  1. 文件分成不同的区块:
    • .text : 代码段
    • .rdata : 运行期只读数据
    • .data : 初始化的数据块
    • .idata : 包含其他外来DLL的函数及数据信息,即输入表。
    • .rsrc : 包含模块的全部资源
  2. 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
点击赞赏二维码,您的支持将鼓励我继续创作!
chybeta WeChat Pay

微信打赏

chybeta Alipay

支付宝打赏

本文标题:逆向学习笔记(一)

文章作者:chybeta

发布时间:2017年08月14日 - 23:08

最后更新:2017年08月18日 - 19:08

原始链接:http://chybeta.github.io/2017/08/14/逆向学习笔记(一)/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。