从对XX加固免费版的逆向分析学习Android so的动态调试
2019-08-29 15:43:48 Author: bbs.pediy.com(查看原文) 阅读量:268 收藏

[翻译]巧用 x64dbg (Make better use of x64dbg)

6天前 445

[翻译]巧用 x64dbg (Make better use of x64dbg)

原作者: torusrxxx
原文: https://x64dbg.com/blog/2017/04/20/use-x64dbg-better.html

作为 x64dbg 的主要开发者,我向 x64dbg 添加了许多功能。其中一些功能是显而易见的,但是有一些功能不那么明显,却值得一提。x64dbg 提供许多功能,有些功能您可能以前不知道,或者没有很好地利用到这些功能。这篇博文将介绍一些这些"隐藏"的功能和它们的使用方法。

Code cave

Code cave 使您能够改变代码的行为。传统的 Code cave 由 inline hooking 或者改变 CALL 或者 JMP 指令的目标来实现。然而,在 x64dbg 中您能更容易实现 Code cave。x64dbg 提供了bpgoto命令,它的第一个参数是设置软件断点的地址,第二个参数是您自定义代码的地址。这个命令将设置一个条件表达式,当表达式被触发时,它将重定向指令指针(instruction pointer)到您自定义的代码。您还可以在硬件断点上手动设置条件表达式以实现 Code cave。这个功能使得您能在与校验和保护相关的关键函数处添加 Code cave。实际上,您也可以编写插件以实现在断点执行时进行进一步处理。

使用监视窗口 (Use watch window)

在调试循环时,您可能一边重复执行代码,一边仔细观察寄存器的值,然后关注某一小片代码的执行过程中寄存器中出现了有趣的值。但是当变量存储在内存中时,有趣的值就不容易被注意到了。比之前更好的调试方法是使用监视窗口(watch window)。您可以在监视视图中添加变量,通过这种方式,您可以了解到变量发生的所有变化。使用监视窗口的另一个好处是,当变量指向代码段时,侧边栏将显示所指向代码段的指针。您可以通过监视窗口轻松的了解到指针解析的过程。

与 Snowman 反编译工具一起工作 (Work with sonwman)

Snowman 反编译器是一个 x64dbg 自带的工具。它不仅在您执行调试进程中的算法时有用,而且在您尝试逆向特定函数时也很有用。在某种程度上,它甚至比流程图(flow graph)更有用。尝试将 Snowman 反编译器中的变量名字从地址重命名为有意义的名称,并猜测其他变量的含义,这将使得阅读一个较长的函数实现不再困难和无聊。

使用命令和函数 (Use commands and functions)

有许多命令和函数未出现在 GUI 中,因此很少有人知道这些功能的存在。但是这些命令非常有用。例如,您可以将printstack命令放在断点上,每当调试器遇到断点时,都会记录下调用堆栈。使用mod.party表达式函数快速筛选出来自系统模块的调用。学习新命令的最佳方法是阅读文档并查找您以前不知道的任何命令。

在适合追踪的地方使用追踪 (Use tracing where it works best)

追踪是一种昂贵的操作。和断点相比,它的速度非常慢。因此,当可以使用断点时,都不应执行追踪。如果您不知道将要执行哪些代码,那么追踪更具有优势。例如,您可以执行追踪以查看变量何时重置。如果代码每次迭代都到达一个地方,则可以在那里设置条件断点,否则可以选择开始追踪。不要按住单步键超过一分钟,让电脑为你追踪更加明智。

使用追踪记录 (Use trace record)

追踪记录(trace record)/命中追踪(hit trace)是 x64dbg 和 Ollydbg 提供的最佳功能之一。正确使用这个功能将为您节省大量时间。执行指令时,它可以将其标记为绿色。追踪记录的常见用法如下:启用追踪记录并逐步迭代。当你回到你以前去过的地方时,用tibt去下一个有趣的地方。如果该函数看起来不让人感兴趣,请使用tiit返回。通过交替使用tibttiit,您可以逐渐增加代码覆盖率,无需执行冗余工作即可分析每个部分的代码,并轻松找到关键函数。

[活动]走进企业看安全第22站--蚂蚁金服!


文章来源: https://bbs.pediy.com/thread-254068.htm
如有侵权请联系:admin#unsafe.sh