码迷,mamicode.com
首页 > 编程语言 > 详细

读《GRAY HAT PYTHON》笔记

时间:2017-04-17 00:23:10      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:读取   大内存   用法   bre   bsp   技术   寻址   存储函数   局部变量   

在这本书里作者主要讲了调试程序的工具以及一些思想. hook,fuzzy 和 script debugging 等等.

第一章是环境准备,

     The Hacker’s Best Friend: ctypes 并列出 python 和 c type 的一些 mapping

     介绍了函数调用惯例:

  • In the cdecl convention, parameters are pushed from right to left, and the caller of the func- tion is responsible for clearing the arguments from the stack. 
  • stdcall convention stack clearing is not done by the caller; rather the my_socks function is responsible for cleaning up before it returns. 
技术分享

第二章是基本的调试原理

  调试工具是动态分析的基本工具, 分为白盒调试和黑盒调试,黑盒调试又分为2种,一种用户态调试,一种是内核调试

  • 有些用户态调试的工具,比如 winDbg, olldbg 和 linux 下的 gdb

  智能调试 pydbg 和 immunity debug 等等----提供了脚本调试的功能

  X86系统下有些普遍目的的寄存器比如 EAX, EDX, ECX, ESI, EDI, EBP, ESP, and EBX 调制器必须能够自由的访问他们:

  EAX 叫做 收集寄存器 用来存储函数返回值,一些优化指令也用 EAX 来存取数据,比如加减,比较,乘除等.

  EDX 叫做 数据寄存器 是 EAX 的延伸,辅助存取乘除更加复杂计算的数据

  ECX 叫做 计数寄存器 ECX 用作循环,是倒数的方式计数

  ESI EDI 用作更有效率的循环存取 ESI 存取源数据地址, EDI 存取目的地址, 一个读,一个写

  ESP EBP 是栈TOP指针和栈基Bottom指针,用来管理函数调用和栈 ,在一些优化的编译器中,EBP 会被移除出栈帧寄存器

  EBX 是没有任何特殊目的的寄存器,它可以用来存放额外数据

  EIP 是当前指令寄存器

  • The stack grows from high memory addresses to low memory addresses.  栈帧压栈顺序为函数参数,返回地址,局部变量
  • 调试事件包括 断点,内存越界访问,抛出异常
  • 断点包括硬断点,软断点和内存断点
  • 软断点的含义就是 当用户设置某地址断点的时候,会将该地址指令 8B 替换为 CC 中断指令,CPU在捕捉到 CC  中断后,调试器捕捉到了它,处理完后,再改回 8B 程序继续正常执行.因此会有两种软断点,一种是临时的,一种是永久的.软断点有一个缺点,就是会改变软件在内存中的 CRC 哈希值,很多恶意软件在内存中侦测到自己被改变后,会自杀来躲避侦查.
  • 硬断点是在 CPU 级别设置的断点,一个典型的 CPU 有8个调试寄存器 DR0-DR7 ,但是数量有限, DR0-DR3 四个寄存器可以用来保存断点地址. DR4-DR5是保留的, DR6 是状态寄存器, DR7是硬断点开关寄存器,并保留不同条件断点(比如某地址执行,某地址写,某地址读写但非执行)
  • DR7 中bit0-1是表示 DR0开关的,bit0表示 Local, bit1表示 Global, 依次类推, DR1,占2位, DR2占2位, DR3占2位共8位, bit8-15没用, bit16-31决定类型2bit和长度2bit.
  • type:  00 – Break on execution, 01 – Break on data writes, 11 – Break on reads or writes but not execution
  • len:  00 – 1 byte, 01 – 2 bytes (WORD), 11 – 4 bytes (DWORD)
  • 硬断点只能寻址4字节的数据,因此对于较大内存空间似乎无能为力,这时候内存断点出现了。内存页是操作系统最小单位的处理片段
  • 页的权限包括 页执行,页读,页写,页保护(读取该页会造成一次异常)。同时页保护也是分割堆和栈的有效分离手段
  • 页保护的机制也适合于比如调试服务器端程序,将一块儿网络收包存储地址设置为页保护权限,则在收到包之后会进入断点处理程序

 

第三章开始举例各种工具的用法

读《GRAY HAT PYTHON》笔记

标签:读取   大内存   用法   bre   bsp   技术   寻址   存储函数   局部变量   

原文地址:http://www.cnblogs.com/zzuse/p/6714373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!