bin100
运行程序
程序的意思应该是按下回车掷骰子,需要roll到要求的点数才能继续下一步,每一次roll都是随机,并且每多一步概率就需要乘以1/6,概率越来越低,因此需要去除随机性。
OD
==在OD中可以通过使用搜索ASCLL的方法找到程序的输出==
搜索结果
可以双击跳转到对应语句,去看输出 “You rolled a three! Good!” 的条件
可以看到在这条语句前有一组cmp和jnz。
可以得知若不等则转移到不输出”You rolled a three! Good!”的语句,但是我是想消除随机性(提高概率)让他在没有roll到3的情况下也能成功到下一步。
可以将jnz取反将条件变成jz(等则转移),从而提高概率。
在这里发现改了jz之后OD里自动变成了je。两者都是看ZF为1则转移。百度上也说两者没有区别。。。
(居然是要求roll到7的)
根据上面的方法把这五个语句上面的jnz改成je/jz,概率就从
1 | (\frac{1}{6})^5 |
变为1
(\frac{5}{6})^5
Ctrl+s 貌似不可以保存(在我的机子上不会出现另存为的框)
这就将patch过的程序保存了
再运行patch过的文件
在第五次roll时,程序依旧会快速结束。
解决:在powershell下运行
脸黑的还是会失败
再次尝试下 得到了flag
[*] Nice job, here is the flag: ebCTF{64ec47ece868ba34a425d90044cd2dec}
从这道题中学会了OD下patch的方法。得知了power shell。