首页
社区
课程
招聘
[原创]x64dbg使用详解
2022-4-28 10:22 44002

[原创]x64dbg使用详解

2022-4-28 10:22
44002

一、 函数调用堆栈

下图是x86架构函数调用堆栈布局
图片描述

二、 常用窗口

1、 CPU 汇编代码窗口
2、 Symbols 模块列表窗口
3、 Dump1-dump5 数据查看窗口
4、 寄存器窗口
5、 堆栈窗口
6、 breakPoints 断点列表窗口

三、 常用功能键

1、 Ctrl + G 转到地址,计算表达式的值
2、 H 高亮显示(使用方法:按下H后,会出现一个红框,双击要高亮的显示的文字,就可以高亮显示)
3、 F4 运行到当前选中的行
4、 F2 下断点
5、 F7 单步步入
6、 F8 单步步过
7、 F9 运行
8、 CTRL + F9 执行到本函数的返回处,也就是遇到本函数RET指令停下
9、 * 转到RIP指向地址,也就是但钱汇编指令所在地址
10、 ; 给当前选中的行添加注释
11、 查找常量或字符串
汇编窗口右击->选择“当前区域”或“当前模块”或“所有模块”-> “常数”或者字符串

三、下断点并执行到断点处

1、pdb符号设置
图片描述
图片描述
2、入口断点设置
菜单栏–选项–设置–事件选项卡下,可以设置什么时候暂停,入口断点,就是进入代码段的第一个地址,就暂停下来。这个是可选头部AddressOfEntryPoint的内存位置。
图片描述
3、下载符号并下断点
右击要调试的程序,选择“用x64dbg调试”
或者先打开x64dbg,选择文件->打开要调试的程序
图片描述
图片描述
很多情况下,x64dbg不会自动加载符号文件,这时候就需要我们手动加载了,右击要下载pdb的模块,例如鼠标右击kernelbase.dll,再右键菜单中选中“下载此模块的符号信息”。
图片描述
对搜索到的函数GetModuleFileNameA的入口处下断点。按下F9,将运行到GetModuleFileNameA的入口处,此时GetModuleFileNameA函数的任何一条指令都没有执行,因为64位程序的前四个参数用RCX,RDX,R8,R9传递,所以RCX,RDX ,R8分别对应GetModuleFileNameA的第一个、第二个、第三个参数,我们之关心第二个参数路径信息lpFilename,它对应RDX, 此时查看RDX的值。
图片描述
图片描述
双击右下角调用堆栈的红色文本。即可返回到函数GetModuleFileNameA的调用处。只是返回到调用处,便于用户查看何处调用,并不是程序执行到调用处。
图片描述
返回到GetModuleFileNameA的调用出后,选中GetModuleFileNameA的下一行,
按下F2,下断点。
图片描述
图片描述
图片描述
因为RDX是易变寄存器,但仅仅用来传递参数,函数执行完后,它的值可能就发生了变化,
所以GetModuleFileNameA的第二个参数,是个指针,必须是刚中断到GetModuleFileNameA到时,GetModuleFileNameA的任何汇编指令尚未执行时,RDX寄存器的值,参看图8
程序运行到GetModuleFileNameA的下一行处时,GetModuleFileNameA的汇编指令执行完毕了,第二个参数(对应图8的RDX值)
鼠标选中任何一个内存窗口(鼠标焦点必须在内存窗口中),按下快捷键CTRL + G,输入
图8的RDX值,如果鼠标焦点在反汇编窗口中,按下CTRL + G,跳转到代码段指令地址处。
焦点在内存窗口处,跳转的是内存地址处。
图片描述
也可以通过以下插件查看内存,选择 插件/Scylla 打开插件窗口,选择 File/ Dump memory
图片描述

四、 如何修改汇编代码方法1

1)测试源代码为下面的代码,用vs2017编译为x64 release版本。
图片描述

 

2)用x64dbg调试生成exe程序,修改某一行的汇编代码(按下快捷键“空格键”)
图片描述
3)修改后保存exe文件,右击汇编窗口,选择 “补丁”
图片描述
图片描述

五、 如何修改汇编代码方法2

1、鼠标选中需要修改的汇编代码(可选中多行),选择“二进制” -> “编辑”(或者使用快捷键Ctrl + E)
图片描述
2、修改十六进制代码后,点击确定。
图片描述
3、修改十六进制代码后,按下快捷键CTRL+ P,或者右击,选择“补丁”,弹出“补丁对话框”
图片描述
4、选择“修改补丁”按钮,另存为
图片描述

六、 在某一行汇编代码前插入新的汇编代码

切换到"CPU"标签页,右击选择“二进制”=》“填充”(或者直接按下快捷键F)
图片描述
如果想把某几行用用nop空指令填充,选中要填充的行(可多行)可以选择“二进制”=》“用NOP填充”(或者快捷键Ctrl + 9)
图片描述

七、 查找程序中的字符串(在栈空间中或者堆字符串)

图片描述
图片描述

八、 消息断点

1、观察程序
程序有两个文本框、按钮。为了学习消息断点,这次将会从使用消息断点的角度来分析程序。
图片描述

 

2、分析程序
将程序拖入到调试器中直接运行程序,接着在句柄标签栏——>右键刷新,就可以在窗口这个界面看到按钮窗口
图片描述
选中我们需要下的按钮断点,右键——>消息断点,就会出现下图选择消息的界面
按钮有几种状态?
两种:按下、弹起
这两个状态对应到消息断点就是按下“WM_LBUTTONDOWN”,弹起“WM_LBUTTONUP”
图片描述
图片描述
接着我们在文本框中输入测试数据。
图片描述
当按下“Check”按钮后调试器会在下图的位置断下,这个时候如果一直单步调试是走不出user32.dll的,这是因为IsDialogMessage会把句柄传递位ring0。
图片描述
这个时候我们只需要在内存布局——>代码段右键——>内存执行断点——>运行
图片描述
这个时候程序会在下图的位置断下。
图片描述
继续往后分析发现GetDlgItemTextA函数,接着对这段代码进行详细分析,分析结果如下。
图片描述
图片描述

九、跳转到指定内存地址和代码地址

1、跳转到指定代码地址

 

选择cpu标签,点击任意汇编代码处,按下ctrl + G,输入要跳转到的代码地址,
图片描述

 

2、跳转到指定内存地址
鼠标点击下内存1窗口,按下ctrl + G
图片描述
图片描述
图片描述

十、注入dll到进程

切换到“符号”标签页面,右键菜单选择“注入模块”
图片描述
选择要注入的dll
图片描述
注入成功
图片描述


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2022-8-19 21:36 被sanganlei编辑 ,原因:
收藏
点赞26
打赏
分享
最新回复 (23)
雪    币: 4919
活跃值: (4213)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
gamehack 2022-4-28 12:57
2
0
感谢分享!
雪    币: 985
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
暴躁老头 2022-4-28 13:45
3
0
很有用
雪    币: 7217
活跃值: (2967)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风_158566 2022-4-28 20:27
4
0
谢谢!
雪    币: 8195
活跃值: (4911)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
大道在我 2022-4-28 21:37
5
0
谢谢            
雪    币: 177
活跃值: (1826)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xingbing 2022-4-29 08:45
6
0
感谢分享! 整理出来个文档多好。
雪    币: 1662
活跃值: (1655)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pukrquq 1 2022-5-3 21:30
7
0
感谢分享
雪    币: 539
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_rjcycwvm 2022-5-12 14:47
8
0
感谢分享
雪    币: 79
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
悟皈 2022-5-13 11:41
9
0
感谢,很详细!
雪    币: 3212
活跃值: (4880)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yp太阳神 2022-5-14 18:36
10
0
学习了
雪    币: 39
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
qq无言 2022-5-18 08:25
11
0
不错,大佬可以请教一个问题吗
雪    币: 1773
活跃值: (1717)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
曹操abc 2022-5-18 08:49
12
0
有用
雪    币: 1918
活跃值: (313)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangez8 2022-5-20 10:24
13
0
感谢分享
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
digital 2022-5-20 11:38
14
0
学习了
雪    币: 256
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
1cy 2022-6-24 02:45
15
0
感谢分享
雪    币: 200
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shs 2022-6-30 15:14
16
0
感谢分享!!
雪    币: 403
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鬼来啦 2022-7-12 14:22
17
0
大佬,能说一下“导入表还原”的相关内容吗,我最近操作这个的时候,总是会遇到一些奇奇怪怪的问题。
雪    币: 206
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
baiyunbian 2022-8-18 11:00
18
0
谢谢分享,初学初用福音!
雪    币: 3349
活跃值: (3372)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengyunabc 1 2022-8-18 11:12
19
0
感谢分享!
雪    币: 197
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lifeiyu 2022-12-31 20:43
20
0
多谢分享!收藏学习。
雪    币: 11099
活跃值: (3853)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie风腾 2022-12-31 21:33
21
0

多谢楼主分享哟
最好有个PDF档或都WORD档
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shangrila 2023-2-25 21:30
22
0
多谢楼主分享
雪    币: 201
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xieyuchuan 2023-2-26 12:54
23
0
 是当前不是但钱
雪    币: 28
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_fbiyyjrd 2023-2-26 18:15
24
0
感谢分享!
游客
登录 | 注册 方可回帖
返回