实验吧CTF bin100(ebCTF 2013)

bin100

运行程序

open.png

程序的意思应该是按下回车掷骰子,需要roll到要求的点数才能继续下一步,每一次roll都是随机,并且每多一步概率就需要乘以1/6,概率越来越低,因此需要去除随机性。

OD

==在OD中可以通过使用搜索ASCLL的方法找到程序的输出==

搜索 ASCLL.png

搜索结果

结果.png

可以双击跳转到对应语句,去看输出 “You rolled a three! Good!” 的条件

双击.png

语句.png

可以看到在这条语句前有一组cmp和jnz。

jnz.png

可以得知若不等则转移到不输出”You rolled a three! Good!”的语句,但是我是想消除随机性(提高概率)让他在没有roll到3的情况下也能成功到下一步。

可以将jnz取反将条件变成jz(等则转移),从而提高概率。

je.png

在这里发现改了jz之后OD里自动变成了je。两者都是看ZF为1则转移。百度上也说两者没有区别。。。

搜索.png

(居然是要求roll到7的)

根据上面的方法把这五个语句上面的jnz改成je/jz,概率就从

1
(\frac{1}{6})^5

变为

1
(\frac{5}{6})^5

复制到可执行文件.png

全部复制.png

保存文件.png

Ctrl+s 貌似不可以保存(在我的机子上不会出现另存为的框)

另存为.png

这就将patch过的程序保存了

再运行patch过的文件

cmd运行.png

在第五次roll时,程序依旧会快速结束。

解决:在powershell下运行

power.png

拖入运行.png

真开心.png

脸黑的还是会失败

再次尝试下 得到了flag

flag.png

复制.png

[*] Nice job, here is the flag: ebCTF{64ec47ece868ba34a425d90044cd2dec}

从这道题中学会了OD下patch的方法。得知了power shell。