本教程基于windows,思路为干扰程序正常运行
源文件
下载地址:https://assets.leetcode.cn/NewYear2020/bomb.exe
x64dbg
下载地址:https://sourceforge.net/projects/x64dbg/files/latest/download
打开cmd,运行bomb.exe
打开x64dbg.exe,在文件选项卡中选择附加(alt+a),找到名称为bomb的条目,选择附加(alt+a)
在cmd里输入12345678,回车
在x64dbg里,点击运行(F9),发现cmd里显示了"Wrong password!"
重复0x01,再次在cmd里运行,在x64dbg里附加
完成后,在x64dbg里,"cpu"选项卡中,右键-搜索-所有模块-字符串
待搜索完成后,在下面的搜索框中,输入"Wrong password!",筛选出一条内容,双击内容
可以看到,右边显示"1eetC0de","Congratulations! You've passed the first stage.\n\n"等等
8位密码,"1eetC0de"好像很合适
输入密码,到第二问
让我们求"202020202020",但只让我们测试1-5,先输个6,非法输入,程序跳出了
那我们先正常输入,然后看看能不能搞点破坏,让程序输出更大的
重复0x01,在cmd里输入1,继续0x02,发现cmd里显示了"Try hard calculating..."
在x64dbg里,"cpu"选项卡中,右键-搜索-所有模块-字符串
待搜索完成后,在下面的搜索框中,输入"Try hard calculating...",筛选出一条内容,双击内容
上一条是一个ja命令,意思是比较后更大的会跳转,猜测这条指令判断数字大小
双击ja那条命令,输入nop,选中"剩余字节以NOP填充",确定
再在cmd里输入6,发现能跑了
试试输入"202020202020",程序不动了,盲猜数字超长了,任务管理器,结束任务
既然没法输入"202020202020",那我们就一个一个来,多举几个数算,看看能不能看出规律,不行就用多项式拟合
重复0x04,修改ja为nop
在cmd里输入1,返回0,继续尝试,结果如下
2,0;3,2;4,0;5,2;6,4;7,6;8,0;9,2;10,4;11,6;12,8;13,10;14,12;15,14;16,0...
2的幂都是0,其余的后项比前项多2
找到这个规律,把202020202020开log,为37.多
减去2的37次方,再乘2,得129162497096
在cmd里运行bomb.exe,输入第一问密码"1eetC0de",输入第二问参数"-1",输入第二问密码"129162497096",得到最终答案"gcCjMlq9j5KD"