目录
x64dbg简介
术语
打开程序
x64dbg打开界面介绍
汇编窗口
内存窗口
寄存器窗口
堆栈窗口
基本调试方法
搜索字符串
退出程序
x64dbg简介
x64dbg是软件逆向里必不可少的动态调试工具,本来考虑学习一下OD,但是考虑到OD很久之前就已经停止维护,而x64dbg则是一个开源项目,有大量的人员进行维护,很多功能都比OD更加优秀。所以建议使用x64dbg进行学习。
x64dbg官网地址:https://x64dbg.com/#start
x64dbg本身也是一个很优秀的开源项目,后期值得细细阅读其源码
本文只介绍学习初始阶段高频使用的快捷键以及功能,话不多说,正文开始!!!
术语
程序领空:程序自己代码的位置
系统领空:系统代码所处的位置
程序入口点EOP:程序在开始运行时执行的第一条指令的地址
在分析对饿时候一定要注意自己是否还在用户代码的位置
打开程序
下载过来x64dbg后,会又两个,一个是x32dbg,只能打开32位程序,一个是x64dbg,只能打开64位程序。
通过x64dbg打开程序,之后调试器就接管了进程。
方式一:附加的方式
菜单栏---文件---附加
不推荐这种方式,因为他不会从程序的最开始的位置进行执行
方式二:菜单栏---文件---打开
打开之后,就会进入程序的入口
程序的执行入口并不是对应C代码的main()函数。这里指向的是mainCRTStarup,这个的作用是为main()的执行做铺垫,比如初始化线程等等。
x64dbg打开界面介绍
汇编窗口
这里是C代码对应的反汇编代码,一般显示代码段
简单介绍:
- 第一列表示的是当前这条汇编指令所在的地址。每一列的地址都是依次排序的,第二行的地址是第一行 的地址再加上指令长度。两个十六进制数,代表一个字节。在第一列双击,可以看到一个箭头,你可以 以这个位置为起始地址,看到相对于这个地址的偏移。
- 第二列是机器码,也就Opcode,这个是给计算机看的。在这个位置双击,可以下一个F2断点。
- 第三列是汇编指令。其中。x64dbg的原理就是读取代码段的Opcode指令,将他翻译成汇编语言。在这 个位置双击可以修改汇编代码,或者按空格。
- 第四列是注释,窗口。双击可以在当前列添加注释。
其它细节:
- 那个蓝色标签显示的是EIP寄存器的指向,即是下一条执行指令的位置
- 黑色表示程序的入口所在,一般指向mainSRTStartup
- jmp指令的机器码表示通常是E9加上一个32位的相对偏移量。E9翻译为汇编表示是jmp
- 在这个界面的最右边是可以写注释的
内存窗口
数据窗口,这里一般查看的是内存地址的内容。
这个里面存放的是数据段的数据 第一列是地址,第二列是地址里面存放的值,第三列是x64dbg的注释。存放的值默认是显示地址。 切换到十六进制的视图: 切换到字符串视图: 切换到Unicode的字符串视图: 切换到浮点窗口 数据和代码没有本质的区别,只不过一个能被执行,一个不能被执行
寄存器窗口
显示8大寄存器,指令指针寄存器,以及标志寄存器
堆栈窗口
显示一些堆栈的信息。
基本调试方法
首先我们了解一下一些基本的操作指令。
F2:设置断点。选中你想要下断点的那一行,摁下F2即可
F4:运行到光标处,点击你想要执行的那一行,摁下F4就会跳转到这里,EIP指向你想要执行的那一行,下一条的汇编的执行就是你所选中的
F9:运行程序(如果没有碰到断点,程序会一直执行到结束。
F7:单步步入。(遇到call指令,进入call函数的实现处继续执行汇编指令)
F8:单步步过。(遇到call指令,执行call函数,之后接着执行call指令的下一条指令)
这里在程序入口摁下F7单步执行,鼠标放在上面会显示jmp命令的跳转位置 0x002C2520
摁下F7或者F8就会进入jmp调转之后的界面
在call命令处摁下F7会跳转进函数的具体实现
Ctrl+F9: 执行到函数返回处,用于跳出函数实现,函数已经执行完毕、
Alt+F9:执行到用户代码,用于快速跳出系统函数
Ctrl+G:输入十六进制地址,快速定位到该地址处
在内存页面或者反汇编页面摁下 CTRL + G就会弹出一个窗口,输入内存地址,就可以跳转到那里
搜索字符串
要注意模块问题
或者菜单栏 -- 引用
摁下Enter键
会在反汇编页面跳转到
退出程序
菜单栏文件脱离即可