飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3739|回复: 16

[原创] x64dbg使用记录:开始调试并修改一个程序

[复制链接]
  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2023-1-10 17:03:01 | 显示全部楼层 |阅读模式
    本帖最后由 梦幻的彼岸 于 2023-1-11 10:06 编辑

    环境信息
    Windows11、x64dbg、测试程序
    x64dbg设置
    备注:可在x64dbg GitHub项目的releases发布页面或sourceforge获取最新的发布文件
    当前使用的版本文件:snapshot_2022-12-12_15-45.zip
    解压后的文件目录信息
    52.jpg
    备注:x64dbg由snapshot_2022-12-12_15-45重命名而来
    安装
    进入release目录
    51.jpg
    运行x96dbg.exe 可执行文件,开始执行安装行为,以方便之后的调试
    备注:因安装会进行一些系统设置操作,故会触发用户账户控制提示
    在弹窗的Launcher点击Install进行安装
    50.jpg
    备注:x32dbg、x64dbg 按钮可运行相关平台的x64dbg,x64dbg与被调试程序需要统一位数才可进行调试并且x64dbg的附加调试功能只会显示相同平台的程序。
    相关安装设置选项:
    shell extension---选择yes会添加一个右键菜单,当用此方式右键打开被调试程序时,会识别程序的位数,并用同位数的x64dbg打开以进行调试。
    49.jpg
    备注:Windows 11系统需右键后在点击更多选项(Shift F10),才可看到相关方式
    Desktop ---选择yes,会在桌面创建两个快捷方式(不同平台的x64dbg)
    48.jpg
    database icon ---选择yes会对x64dbg的数据库文件(dd32、dd64)设置相关logo,以方便识别
    47.jpg
    完成安装点击OK即可
    46.jpg
    事件设置
    Options --- Preferences
    45.jpg
    此次调试勾选如下选项即可,可根据不同的需求进行不同的调整
    44.jpg
    语言设置
    Options --languages--目标语言----更改后需重启程序才可生效
    第一次运行会根据系统设置默认语言
    43.jpg
    示例:系统语言是中文,第一次运行后生成的配置文件,语言参数对应值为zh_CN
    42.jpg
    字体设置
    Options---Appearance
    41.jpg
    40.jpg
    测试程序
    [C] 纯文本查看 复制代码
    #include <stdio.h>
    int main()
    {
        int a;
        printf("Please input a number:\n");
        int x = scanf_s("%d", &a);
        printf("%d\n", x);
         if (a % 5 == 0 && a % 7 == 0 && a >1 && a <200)
                printf("yes\n");
        else
                printf("no\n");
        return 0;
    }

    39.jpg
    开始调试
    入口断点,
    备注:此时展示的是链接器的入口故与代码对应的汇编不同,现在还没运行到代表所对应的虚拟内存地址
    38.jpg
    可在Log查看软件所产生的一些调试信息
    37.jpg
    有程序数据库文件 (.pdb)的情况下情况可在Symblos区域快速定位到main函数区域
    36.jpg
    main函数对应的汇编代码区域
    35.jpg
    定位"相关"汇编代表区域
    有些调试可能会在没有相关的程序数据库文件 (.pdb)的情况下进行,此时可通过一些字符串或展现的功能猜测使用了某些函数来定位到相关的区域、也可通过反编译来进行辅助调试
    示例:程序运行后显示了如下字符串---Please input a number:
    34.jpg
    CPU反汇编代码区域右键---搜索---所有用户模块---字符串类型
    33.jpg
    可以看到相关字符串信息以及对应的虚拟内存地址
    32.jpg
    鼠标左键双击相关区域可快速转到相关的汇编代码区域
    31.jpg
    此时可通过进度条或鼠标滚轮向上查看相关汇编代码
    30.jpg
    根据汇编区域显示的信息,可得知Please input a number:字符串对应的虚拟地址为140002260
    可转到此地址修改对应的数据
    29.jpg
    数据修改
    区域框选右键
    28.jpg
    编辑界面内容,可以看到UTF-8区域对应解析的信息
    27.jpg
    修改
    26.jpg
    修改后的状态
    25.jpg
    备注:因反汇编区域默认是将在内存中内容读取并解析成相关的汇编代码,但实际情况这些是数据内容非相关的指令,故在编辑界面以字符串编码解析符和预期的效果
    或修改部分区域的分析方法,以符和预期情况
    24.jpg
    恢复修改
    此时可点击恢复按钮将已修改的数据恢复到修改前的数据
    23.jpg
    临时修改测试,点击重启按钮,重新载入程序
    22.jpg
    入口断点暂停后因我编译的时候关闭了地址随机保护,故输入之前的地址即可,下图是修改后的效果
    备注:若有相关保护功能,需重新搜索在转到编辑
    21.jpg
    导出修改
    导出修改后的二进制文件
    File按钮
    20.jpg
    若无修改直接点击Patch File按钮即可
    19.jpg
    之后命名保存即可
    备注:命名不要和原名一样,因此时正在使用
    18.jpg
    17.jpg
    16.jpg
    修改执行流程,通过观察汇编代码,看到有个jne判断,分析与一些输出相关,此时可在相关命令下断点
    15.jpg
    输入值确认后在jne判断指令暂停
    14.jpg
    执行后的结果
    13.jpg
    可双击相关call转到调用的函数入口地址,以查看相关分析后的汇编代码
    12.jpg
    简单分析
    当jne执行后会将"no\n"数据读取到rcx,之后调用140001020处理(看到符号解析调用的是printf函数实现的字符串打印输出功能)并实现将读取到的数据输出的功能
    修改汇编指令:
    根据之前的分析可知当此区域的两个jne处不跳转,jbe处跳转即可输出yes
    在需要修改指令的行右键选择汇编
    11.jpg
    修改汇编指令
    将jne修改判断相反的汇编指令je
    将jbe修改判断相反的汇编指令ja/jbne
    10.jpg
    9.jpg
    测试验证
    跳转不执行
    8.jpg
    跳转不执行
    7.jpg
    跳转执行
    6.jpg
    结果输出
    5.jpg
    更改标志寄存器
    当然也可以通过需改标志寄存器对应的值,影响指令判断的结果已达到测试的目的
    zf=0 jne跳转
    4.jpg
    zf=1 jne不跳转
    3.jpg
    注释信息
    为了方便调试,也会在相关指令行添加注释也记录测试/猜测出的相关功能,已方便后续的分析
    指令所在行右键
    2.jpg
    添加后的结果,与添加后在此选择相关功能可修改注释信息:
    1.jpg


    评分

    参与人数 8威望 +28 飘云币 +28 收起 理由
    kooker + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    dych321 + 1 + 1 PYG有你更精彩!
    smallhorse + 2 + 2 赞一个,这个帖子很给力!
    PYG官方论坛 + 20 + 20 感谢发布原创作品,PYG有你更精彩!
    wgz001 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    iNIC + 1 + 1 赞一个,这个帖子很给力!
    wjzzhtgp + 1 + 1 热心分享 共同提升!
    风轻云淡 + 1 + 1 赞一个,这个帖子很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 22:19
  • 签到天数: 2133 天

    [LV.Master]伴坛终老

    发表于 2023-1-10 20:58:47 | 显示全部楼层
    写得很详细,第一次接触,好好学习一下
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    8 分钟前
  • 签到天数: 456 天

    [LV.9]以坛为家II

    发表于 2023-1-10 21:09:55 | 显示全部楼层
    有脱VMp壳的吗
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2023-1-11 08:07:57 | 显示全部楼层
    666,期待下一篇精彩文章
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 231 天

    [LV.7]常住居民III

    发表于 2023-1-11 08:19:15 | 显示全部楼层

    666,期待下一篇精彩文章
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-1 10:03
  • 签到天数: 392 天

    [LV.9]以坛为家II

    发表于 2023-1-11 08:33:35 | 显示全部楼层
    666,期待下一篇精彩文章
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    半小时前
  • 签到天数: 965 天

    [LV.10]以坛为家III

    发表于 2023-1-11 08:33:55 | 显示全部楼层
    PYG有你更精彩!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 20:24
  • 签到天数: 1981 天

    [LV.Master]伴坛终老

    发表于 2023-1-11 09:29:56 | 显示全部楼层
    好详细的教程,对新手有帮助
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    1 小时前
  • 签到天数: 680 天

    [LV.9]以坛为家II

    发表于 2023-1-11 11:04:48 | 显示全部楼层
    好好学习,天天进步
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 00:30
  • 签到天数: 769 天

    [LV.10]以坛为家III

    发表于 2023-1-11 11:41:18 | 显示全部楼层

    666,期待下一篇精彩文章
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表