精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
以前用IDA破解过时间类问题,最近有可能有需要再做做破解。类似的软件ollydbg经常打不开exe,就转x64dbg试下,觉得相对好用。
x64dbg的网站比较正规,内容丰富,x64dbg支持插件,源代码开源,技术架构也公开,相当于一个平台性质的软件,只要是类似平台的,里面的源代码都会非常精密,就像锐英源软件以前研究Apache一样,对x64dbg就比较有兴趣。
下面的内容是来自于英语网站,自己亲自翻译,边翻译边自学,介绍x64dbg的入门和破解常用操作用的界面UI和基础知识,希望大家喜欢。
x64dbg 是适用于 Windows 的开源调试器,是一种流行的恶意软件分析工具。调试器用于在代码执行时单步调试代码,因此您可以准确地看到它正在做什么。调试器对于排查错误至关重要,但它们也用于对恶意软件进行逆向工程。
本文是一个由四部分组成的系列文章,涵盖该工具和以下内容:
第 1 部分:什么是 x64dbg 如何使用它
第 2 部分:如何使用 x64dbg 破解恶意软件
第 3 部分:堆栈内存:概述
第 4 部分:x64dbg 教程
与在调试时可以访问自己的源代码的程序员不同,恶意软件分析师通常使用编译的汇编代码(例如 Windows .exe 或 .dll 文件)。
汇编代码是一种为特定计算机架构(如 64 位架构)设计的低级编程语言,因此得名 x64dbg。还有一个 32 位架构版本,称为 x32dbg。
恶意软件分析师很少从调试器开始。首先,他们将执行一些静态分析,甚至可能使用一些行为分析工具在虚拟机中运行恶意软件,以尝试了解恶意软件正在做什么。在此原始阶段之后,可以使用调试器来解压缩恶意软件,然后分析恶意软件的特定功能,称为逆向工程。
主界面:
注意中间主窗口有一列是API调用,我以前用APIMonitor分析调用API,没想到x64dbg能够从汇编代码分析出来调用。
界面由5个窗口和一个工具栏组成。
窗口的顶部最外层显示正在分析的文件的名称 '267.exe' 、操作系统为其分配的进程 ID 以及当前正在分析的模块(我们将在以后的文章中介绍该模块的相关性)。
工具栏上的图标是探索恶意软件的汇编代码的关键。初学者需要理解的关键可以在下图中看到。
以下图标非常简单:
文件夹图标用于打开文件进行分析
圆形箭头用于返回到程序的开头
如果程序在 x64dbg 中运行,则停止图标将停止程序
箭头图标将运行程序
暂停图标将暂停程序
恶意软件分析师经常使用的是最后两个。
第一个是指向下方的箭头,下方有一个小圆圈。这是 'Step Into' 按钮,下一个图标是 'Step Over' 按钮。恶意软件由恶意软件作者编写或导入的大量函数组成,为了分析特定函数,分析师需要“步入”该函数才能查看该函数的汇编代码。或者,可以将不感兴趣的函数 'Stepped over' 。如果这还没有意义,请不要担心,这将在以后的文章中深入介绍。
图像底部的选项卡行包含各种视图和数据,可用于简化分析。
需要了解的一些关键选项卡包括:
CPU:从上到下显示汇编代码
视图->流程图:显示关系图视图,以便用户可以直观地看到哪个函数被另一个函数调用。这类似于 IDAPro 和 Ghidra 等其他工具。
断点:可以搜索可能感兴趣的指令或字符串,并针对这些指令设置断点。然后,x64dbg 允许用户运行程序,直到它遇到此断点,以便对其进行分析。下图显示了在 Windows 函数“CreateDirectoryW”和“WriteFile”上设置的一些断点
内存映射:这显示了内存中存储的数据以及该数据所在的地址。在下面的示例中,正在分析的恶意软件的“.text”部分位于地址“00F21000”。“Protection”列还会显示内存中的该区域是可执行、可读还是可写。这些可以通过标志 E、R 和 W 来识别。当我解释如何使用内存映射解压缩恶意软件时,这将派上用场。
调用堆栈:当在特定 Windows 函数上设置了断点时,这非常方便。在前面的图像中,我在“CreateDirectoryW”上设置了一个断点,因此每次恶意软件开始在受感染的设备上创建目录时,都会命中此断点,并且 x64dbg 将在此功能上停止。使用调用堆栈,我可以看到恶意软件作者编写的名为“CreateDirectoryW”的代码,并确定该目录的创建位置和调用位置。
x64dbg 中的主窗口包含已选择的选项卡的内容,默认情况下,这是包含汇编说明的 CPU 选项卡。
第一列包含 EIP,即指令指针。这只是指向将要运行的下一段代码。
第二列包含指令所在的二进制文件中的地址,因此在上面的示例中,EIP 指向地址“0138CD97”。
第三列是第 4 列中指令的十六进制表示形式。
第 4 列是汇编指令所在的位置,上面的示例再次显示指向要运行的下一条指令的 EIP 是 'push ebp'。
第五列将包含由 x64dbg 填充的数据或分析师添加的注释。上面的示例显示“0138CD97”是恶意软件的“EntryPoint”,这意味着它是恶意软件作者代码的开始,也是 main 函数的开始位置。
第三列包含汇编说明,可能是最重要的,因为这些数据是恶意软件分析师用来了解恶意软件正在做什么的数据。
一些常见的说明:
PUSH:将值推送到堆栈上
POP:从堆栈中弹出一个值
CALL:执行函数
RET:返回已完成函数的值
JMP:跳转到地址位置
CMP:比较两个值
MOV的:将数据从一个位置移动到另一个位置
ADD:添加值
SUB:减去一个值
下一个窗口包含与 registers 相关的信息。
寄存器被程序用来存储数据,然后可以很容易地引用这些数据以供以后使用,其中一些具有特定的用途。
EAX:用于加法、乘法和返回值
EBX:通用寄存器,用于各种操作
ECX:用作计数器
EDX:通用寄存器,用于各种操作
EBP:用于引用参数和局部变量
ESP:指向堆栈上的最后一个参数
ESI/EDI:用于内存传输指令
EIP 不是寄存器,这是指向 x64dbg 中的当前指令的指令指针。此字段包含指令所在的地址。
第三个窗口包含已推送到堆栈上的参数。这将在后面的关于 stack memory 如何工作的文章中详细介绍。
第四个窗口包含已推送到堆栈上的堆栈和数据,以及它们映射到的内存中的地址。同样,这也将在后面的文章中详细介绍。
就是下面内存字样的窗口。 第六个也是最后一个窗口包含转储数据。“转储”窗口允许用户查看寄存器中存储了哪些数据或哪些数据驻留在某个地址。 乍一看,这似乎很多东西要理解,但希望本文能让您对 x64dbg 是什么以及如何导航该工具有一个深入的了解。