这儿有一个小程序,运行的时候需要输入密码,如果密码输入错误,不能运行,如图所示:
如果密码输入成功,则会显示一个红色的桃心,如图所示。
假设我们不知道这个软件的密码,那我们就可以通过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
备注
完整的程序的示例代码在