Python Hacking 基础知识
1.1、调试器[0]模式:用户模式,内核模式
[0] WinDbg OllyDbg PyDbg Immunity
1.2、通用cpu寄存器 :EAX, EDX, ECX, ESI, EDI, EBP, ESP,EIP和EBX
EAX 寄存器也叫做累加寄存器
EDX 寄存器也叫做数据寄存器
ECX 寄存器,也叫做计数寄存器
ESI 寄存器是源操作数指针,存储着输入的数据流的位置
EDI 寄存器是目的操作数指针
ESP 和EBP 分别是栈指针和基指针
EBX 是唯一一个没有特殊用途的寄存器
EIP 指向即将执行的指令
1.3、栈
ESP 负责跟踪栈顶; EBP 负责跟踪栈底
栈从内存的高地址像低地址增长
1.4、断点
1.4.1 软件断点: 在CPU 执行到特定指针位置的代码的时候使其暂停。操作码:0xCC
1.4.2 硬件断点: 断点设置在CPU级别,并用特定的寄存器:调试寄存器。一个CPU 一般会有
8 个调试寄存器(DR0 寄存器到DR7 寄存器)调试寄存器DR0 到调试寄存器DR3 存储硬件断点地址。
这意味着你同一时间内最多只能有4 个硬件断点。
DR4 和DR5 保留。DR6 是状态寄存器,
DR7 本质上是一个硬件断点的开关寄存器,同时也存储了断点的不同类型。
1.4.3 内存断点: 当一个调试器设置了一个内存断点的时候,它其实是改变了内存中某个块或者页的权限
1.4.3.1 内存页:一个内存页是操作系统处理的最小的内存单位。一个内存页被申请成功以后,就拥有了一个权限集,
它决定了内存该如何被访问。下面是一些内存页的访问权限的例子:
(0)可执行页允许执行但不允许读或写,否则抛出访问异常
(1)可读页只允许从页面中读取数据,其余的则抛出访问异常
(2)可写页允许将数据写入页面
保护页(Guard Page) : 这种类型的页面常被用于:分离堆和栈或者
确保一部分内存数据不会增长出边界。另一种情况,就是当一个特定的内存块被进程命中(访
问)了,就暂停进程
2.1 调试器和进程连接的方法:
(0)调试器装载一个程序
(1)调试器动态附加到一个程序
2.1.1 使用动态连接库:
(0) cdll()
(1) windll()
(2) oledll()