Linux gdb调试获取软件密码


这儿有一个小程序,运行的时候需要输入密码,如果密码输入错误,不能运行,如图所示:

如果密码输入成功,则会显示一个红色的桃心,如图所示。

假设我们不知道这个软件的密码,那我们就可以通过gdb调试的方式来获取这个软件的密码是什么

下面是详细步骤:

启动调试

执行命令 gdb ./crack-section

输入r命令,直接运行,如图所示:

中断,查看调用栈

在输入密码的地方,然后按住ctrl+c,中断下来。

执行命令:bt,查看调用栈情况

切换帧

执行命令 f 6切换到6号帧

打开反汇编窗口

输入layout asm命令,打开反汇编窗口

设置断点

在0x5555555554be地址处,设置断点

命中断点

输入c继续运行,然后随便输入一个密码,比如asd

然后在断点处中断下来。

查看密码信息

在命令窗口中输入命令:

x /s $rdi

x /s $rsi

其中寄存器$rdi中存储的就是我们输入的asd经过加密后字符串

$rsi中存储的就是内置的密码,也是经过简单加密后的结果

求解密码

只要我们推出asd到WiZ的关系,我们就知道了”I_cfb[Ie\\j”对应的原始字符串是什么

asd到WiZ,就是每个字符-10,所以”I_cfb[Ie\\j”对应的原始字符串就是每个字符+10

所以就得到了密码字符串为SimpleSoft

备注

完整的程序的示例代码在

https://github.com/SimpleSoft-2020/gdbdebug/


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注