• 读《GRAY HAT PYTHON》笔记


    在这本书里作者主要讲了调试程序的工具以及一些思想. 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. 
    page30image22336

    第二章是基本的调试原理

      调试工具是动态分析的基本工具, 分为白盒调试和黑盒调试,黑盒调试又分为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字节的数据,因此对于较大内存空间似乎无能为力,这时候内存断点出现了。内存页是操作系统最小单位的处理片段
    • 页的权限包括 页执行,页读,页写,页保护(读取该页会造成一次异常)。同时页保护也是分割堆和栈的有效分离手段
    • 页保护的机制也适合于比如调试服务器端程序,将一块儿网络收包存储地址设置为页保护权限,则在收到包之后会进入断点处理程序

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

  • 相关阅读:
    彻底屏蔽淘宝网、易趣
    日期处理string 与 DateTime相互转化
    手机进水!!!!!!!!!
    解决VS.net "Automation 服务器不能创建对象"
    综艺大哥大
    计算当前日期是任意时间段内第几周的函数
    吉祥三宝>馒头无极版
    如何在ASP.NET中使用JavaScript脚本
    IDEA工具开发一些辅助功能设置
    Linux命令行模式下挂载U盘与光驱
  • 原文地址:https://www.cnblogs.com/zzuse/p/6714373.html
Copyright © 2020-2023  润新知