ida使用+动调
zach0ry

ida动态调试

断点

一般打的都是软件断点

硬件断点的设法:打好断点后

image-20250714152911250

打开找到刚才打下的断点后右键Edit编辑勾选Hardware

差别:

  • 1. 实现原理:

    • 软件断点:
      • 软件断点是通过修改程序指令来实现的。在代码中插入一个特定的中断指令(例如,在x86架构中是INT 3指令)。
      • 调试器会记录被替换的原始指令,并在程序继续执行时恢复它。
    • 硬件断点:
      • 硬件断点不需要修改程序代码。

    2. 资源限制:

    • 软件断点:
      • 软件断点在数量上没有严格的限制,可以在程序中的任意位置设置。
    • 硬件断点:
      • CPU提供的硬件断点寄存器数量有限,因此可以同时设置的硬件断点数量也有限。(最多四个)

    3. 使用场景:

    • 软件断点:
      • 软件断点适用于大多数调试场景,特别是在需要设置大量断点时。
    • 硬件断点:
      • 硬件断点适用于以下场景:
        • 调试无法修改代码的程序,例如只读内存中的代码。
        • 调试需要精确控制执行流程的程序,例如内核代码或驱动程序。
        • 调试数据断点,就是当某个内存地址被读取或者写入的时候出发断点,这是硬件断点特有的功能。

    4. 隐蔽性:

    • 软件断点:
      • 软件断点会修改程序代码,因此可能会被一些反调试技术检测到。
    • 硬件断点:
      • 硬件断点不会修改程序代码,因此具有更高的隐蔽性。

    总结:

    • 软件断点灵活方便,适用于大多数调试场景,但可能会被反调试技术检测到。
    • 硬件断点隐蔽性高,适用于特殊调试场景,但数量有限

条件断点

  • 条件断点是一种在调试器中设置的断点,它仅在满足特定条件时才会触发。在框位置输入条件

    image-20250714152925276

更改字节

选中要更改的那个字节

右键

image-20250714152934057

更改之后Apply patch to 应用这个补丁

[FlareOn6]Overlong

elf文件动态调试

1.找到ida的根目录,找到dbgsrv文件,在该文件中找到

image-20250714152946006

根据elf文件的进制选择(以64进制和snake.elf为例)

将linux server64和snake拖入文件夹中

之后在虚拟机终端内输出chmod +x linux_server64赋予文件执行权利

之后输入./linux_server64运行文件(之后等待主机连接)

再打开一个终端输入ip addr获取虚拟机ip地址

检测是否可以成功:

打开主机终端输入 ping +虚拟机ip(下图即为来连接成功)

image-20250714152958488

之后打开Debugger>Process options>

image-20250714153020955

1:填snake在虚拟机中的位置

2:填snake在虚拟机所在文件的文件位置

3:填虚拟机ip

4:运行./linux_server64后,输出Listening on 0.0.0.0:23946(一般默认)

之后就可以正常运行(下次运行时在此运行./linux_server64,并把文件拖入想相同目录即可)

显示所有机器码:

​ Options>general>改为10

image-20250714153009850

x64dbg

F2:设置断点。)
F4:运行到光标处
F7:单步步入。(遇到call指令,进入call函数的实现处继续执行汇编指令)
F8:单步步过。(遇到call指令,执行call函数,之后接着执行call指令的下一条指令)
F9:运行程序(如果没有碰到断点,程序会一直执行到结束。)

Ctrl+F9: 执行到函数返回处,用于跳出函数实现

Alt+F9:执行到用户代码,用于快速跳出系统函数

Ctrl+G:输入十六进制地址,快速定位到该地址处