• 逆向学习之路 -- 《加密与解密》读书笔记 -- 调试篇


    动态分析技术

    用户模式: 调试用户模式应用程序的调试器,工作在Ring 3级,eg. OllyDbg、x64dbg、Visual C++  etc.

    内核模式: 能调试操作系统内核的调试器,eg. WinDbg

    OllDbg 调试器(简称“OD”) 是由 Yuschuk(www.ollydbg.de)编写

     按F3 打开一个EXE文件

    C 默认当前窗口是CPU窗口; 

    包含5个面板窗口,分别是:

    1. 反汇编面板(Disassembler window)显示被调试程序的代码,有4列,分别是(Address)、十六进制的机器码(Hex dump)、反汇编代码(Disassembly)和注释(Comment).在最后一列注释中显示了相关API参数或运行简表。

    2. 信息面板(Information window) 将显示与指令相关的各寄存器的值、API函数调用提示和跳转提示等信息。

    3. 数据面板(Dump window) 以十六进制和字符方式显示文件在内中的数据。要显示指定内存地址的数据,可单击右键快捷菜单中"Go to expression"命令或按“Ctrl+G”快捷键,打开地址窗口,输入地址。

      

    4. 寄存器面板(Registers window) 显示CPU各寄存器的值,支持浮点、MMX和3DNow!寄存器。可以单击右键或窗口标题来切换显示寄存器的方式。

      

    5. 栈面板(Stack window) 显示栈的内容,既ESP执行地址的内容。讲数据放入栈的操作称为入栈(push),从栈中取出数据的操作称为出栈(pop)。栈窗口非常重要,各API函数和子程序都利用它传递信息和变量等。

    加载目标文件进行调试

    选项-调试选项-事件修改为“WinMain"

    “F3” 载入文件

    寄存器面板显示的值

    EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI和EIP,他们统称为32位寄存器

    ESP为栈指针,指向栈顶,右下角的栈面板上显示了栈的值

    EIP 指向当前将要执行的指令,按一下“F7”讲执行下一条命令

    PS: “F7” 建 和“F8”键的主要区别在于,遇到callloop等指令,按“F8”键会路过,按“F7”键会跟进。这里我理解的是F7是仔细读取,看到Call指令深入细读取。F8是粗略读取,不会对Call指令进行深挖。

     ctrl + * 可以设定 EIP指针点(此处为新EIP)按F7后将从新的指针EIP位置继续往下执行

    - (减号键) 或者 esc  回看之前但不跟踪代码

    需要连续按“F7”和“F8” 可以使用 Ctrl + "F7" , Ctrl + "F8"  (需要按ESC或者 F12才能中止或者遇到其他断点时停止)

    ctrl + “F9”  会在遇到的第一个返回命令处(ret、retf或iret),如果此时按"F7"将会跳过整段代码回到Call之前的下一行

    e.g  比如从 004013FA  语句按“F7”,因为有call就会进入子程序

    # 先按ctrl + * 指定EIP 为004013FA ,然后接着按“F7”,就会进入子程序

     

    # 按 Ctrl + F9

     

     如果,在按F7将脱离 这部分的读取,并跳出刚进入的call里面。注意这里的Ctrl + F9 遇到ret指令是暂停还是路过,可以设置,如下:

    ctrl + F2 重新载入程序

    F2,设置断点后用Alt+B 查看设置的断点明细

     

    P23

  • 相关阅读:
    js命名空间笔记
    css3兼容性问题归纳
    flexbox-CSS3弹性盒模型flexbox完整版教程
    JavaScript 预解析
    消除页面上的链接虚线框
    图片压缩之 PNG
    常见的前端优化技巧有哪些
    for-of循环和for-in循环的区别
    函数式编程初探
    js中同步与异步处理方法
  • 原文地址:https://www.cnblogs.com/Cong0ks/p/13606286.html
Copyright © 2020-2023  润新知