有没有办法在 GDB 中查看所有寄存器的特定值?
Is there a way to watch all registers for a specific value in GDB?
我正在对一个在 GDB 中没有调试符号的 c 程序进行逆向工程。它要求输入一个特定的 1-15 位数字密码并告诉您它是否正确。我的目标是找出这个密码是什么。
我很难找到我猜测的密码与正确密码的比较。我认为有帮助的一种方法是找到将我的猜测加载到寄存器中的任何位置。
关于我的问题,是否可以检查并查看是否将特定值加载到任何寄存器中?
例如,我可以使用 watch $rax == 1234
对单个寄存器执行此操作,但我想对每个寄存器都执行此操作。
GDB 没有这个功能。
这听起来像是一个糟糕的方法,因为如果数字是 0-9 之间的数字,您会得到很多误报,您甚至无法确定它们是如何表示的。
一种更简单的方法应该是寻找与 pin 进入或失败密切相关的变化,并从那里跟踪数据:
- 如果输入错误的 pin 时有控制台输出,请在二进制文件中查找此字符串并找到引用它的位置。
- 如果这是一个控制台应用程序,请查找对 scanf / printf 的引用。
- 如果它没有使用 scanf - 例如外部键盘,您可以使用 scanmem 等工具找到输入的位数。
我正在对一个在 GDB 中没有调试符号的 c 程序进行逆向工程。它要求输入一个特定的 1-15 位数字密码并告诉您它是否正确。我的目标是找出这个密码是什么。
我很难找到我猜测的密码与正确密码的比较。我认为有帮助的一种方法是找到将我的猜测加载到寄存器中的任何位置。
关于我的问题,是否可以检查并查看是否将特定值加载到任何寄存器中?
例如,我可以使用 watch $rax == 1234
对单个寄存器执行此操作,但我想对每个寄存器都执行此操作。
GDB 没有这个功能。
这听起来像是一个糟糕的方法,因为如果数字是 0-9 之间的数字,您会得到很多误报,您甚至无法确定它们是如何表示的。
一种更简单的方法应该是寻找与 pin 进入或失败密切相关的变化,并从那里跟踪数据:
- 如果输入错误的 pin 时有控制台输出,请在二进制文件中查找此字符串并找到引用它的位置。
- 如果这是一个控制台应用程序,请查找对 scanf / printf 的引用。
- 如果它没有使用 scanf - 例如外部键盘,您可以使用 scanmem 等工具找到输入的位数。