• 基础复习(IDA调试器)


    1.选择IDA调试后端

    在顶部有一个下拉菜单,选择调试器后端位置
    在这里插入图片描述
    很多用户实际上使用的是Windows版本的IDA,该IDA可以直接调试Windows下32bit和64bit的程序

    2.本地调试启动方法

    载入IDA后,程序实际上在对程序内置的一个字符串进行base64解码

    考虑到运行过程中会直接生成所需的明文,所以调试直接抓取最终的嗯嗯解码结果会更加便捷

    1. 选择后端,选择调试器后端为Local Windows debugger“ ,即可使用IDA内置的调试器
    2. 开始调试,IDA调试OD和x64DBG的快捷键基本一致,要启动程序只需要按F9即可,单击相应工具栏的绿色的三角形可以。在启动调试前,IDA会弹出一个确认对话框,单击”Yes“按钮,即可调试
    3. 被调试文件默认的额路径为输入文件的路径,若目标文件不存在,或其他原因加载失败,IDA均会弹出警告对话框,确认后会进入Debug application setup设置的对话框
      在这里插入图片描述
      设置后单击”OK“按钮,IDA重新尝试启动程序

    3.断点设置

    IDA中按F2设置,也可以单击左侧小蓝点设置

    在切换为断点后,对应的底色将会变成红色

    IDA使用反汇编的伪代码进行调试,同样支持反汇编的后伪代码下断点

    伪代码窗口中行号左侧有蓝色的圆点,这些圆点与反汇编窗口左侧蓝色的小点功能一样,都是用来切换断点的状态的

    单击这蓝色圆点,伪代码的对应类似反汇编窗口中的断点,变为红色底

    通过debugme,在main函数上设置断点,然后运行
    在这里插入图片描述

    4.查看变量

    在中断后,选择”Debugger->Debugger windows->Locals“菜单命令,打开查看局部变量的窗口
    在这里插入图片描述
    在这里插入图片描述
    默认情况下,locals窗口与伪代码窗口一起显示
    在这里插入图片描述
    单步执行至scanf,会发现程序进入运行状态,此时等待用户输入,随意输入一些内容后回车,程序再次中断

    此时Loacal窗口中的v13变量显示刚才输入的值

    在这里插入图片描述
    红色代表这些变量的值被修改过

    继续执行程序至base64_decode后,可以看见v5已经被修改成另有一个值
    在这里插入图片描述
    但实际上v5为一个字符串,存放着正确的输入

    如何获取v5的内容

    1. 在Locals窗口的Location栏中可以看到v5的位置为RDI,在寄存器窗口可以看到RDI的值,单击其值右侧的按钮,可以可看见flag
    2. 修改v5的了类型,从_BYTE修改为char,此时HexRays会认为v5是一个字符串,从而将其在Locals中显示出来,具体操作:在伪代码窗口中按Y键,修改v5类型为char*并确认,然后在Loacls窗口中右键单击Refresh刷新

    在这里插入图片描述
    在这里插入图片描述
    至此,我们成功的利用调试找到了内存中的flag

    注意 IDA中的变与C语言中变量的行为并不完全一致,IDA中的变量有特殊的生命周期,尤其是寄存器中的变量,在超出一定范后,其值会被覆盖成其他变量的值,这是无法避免的

    所以Locals中变量的值在远离被引用位置时并不可靠

    请仅在该变量被引用时或明确知道该变量生存周期时再相信Locals显示的值

  • 相关阅读:
    vue实现input输入模糊查询(三种方式)
    SSE实现服务端给客户端长时间推送消息
    Windbg 命令 (一)
    DusQ1 dT phosphoramidite,DusQ1-dT磷酰胺
    《天天数学》连载65:三月五日
    嵌入式Linux—FreeType矢量字体
    01【SpringBoot快速入门、yml语法、自动配置、整合框架】
    IPC机制
    lc[数组]---706.二分查找
    如何使用 PostgreSQL 进行数据迁移和整合?
  • 原文地址:https://blog.csdn.net/m0_72827793/article/details/136284063