我有一个二进制文件,我应该破解它的密码(作业)。还有一个给定的函数(一个函数是二进制文件的一部分)。该函数显示输入字符串与正确的密码逐字符进行比较,并在字符错误时立即返回 false(我猜这不是安全的方法,因为它正在泄漏时间,我们知道正确的密码长度为例子)。但是我们的老师添加了一个随机计时器来返回结果(正确/错误),这对我们来说有点困难......
无论如何,我已经通过逆向工程成功完成并获得了正确的密码。现在我在命令行中使用它:
/usr/bin/time -v ./program_name enter_password
Run Code Online (Sandbox Code Playgroud)
使用这个命令,我得到了很多信息,比如系统时间、交换、执行时间……但对我来说最有趣的是“自愿上下文切换”,因为我输入的密码字符越正确,“自愿上下文切换”就越少“我明白了!
我输入的错误字符越多,我得到的“自愿上下文切换”就越多。
仅通过输入该命令,输入字符并观察“自愿上下文切换”,我就花了将近两个小时来破解密码。只要 ONE 字符正确,“自愿上下文切换”就会减少 1。
我的问题,究竟什么是“自愿上下文切换”,为什么他们帮助我破解密码?