CUMT CTF Mind reading

前言

前几天Dec1CTF和网鼎杯让小白我毫无体验…干脆去学校的CTF平台刷刷入门题…

结果是入门题竟然都被卡住,哭了,下面就写一下这道入门题涉及的知识点。

(其实快要考数据库了,但现在还不想复习)


废话不多说,直接上题1

暴躁下载

暴躁拖IDA

暴躁F5

冷静分析🚬

批注 2020-05-11 102016

程序很简单

输出“Heard you can read my mine? Please input your answer:”

输入长度为32的v1,生成随机数v2(跟进mymine函数查看)

如果输入的v1与v2相同,成功,否则错误。


知识点一:了解srand(seed)函数和rand()函数,srand(seed)函数初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。在这里随机数种子是一个常值0xABCDu,所以随机数序列是固定的。

可以参考百度


所以我们只需要知道v2的值即可。

这里无法直接查看,需要动态调试(因为输入之后才会生成v2)

第一次使用IDA动态调试有些紧张 (搓手手)

需要注意的点是:程序需要存放在不含有中文的路径下,否则会报错。

按下F9进入动态调试界面

批注 2020-05-11 104811

可以在文本框搜索main函数,进入C语言代码界面,F2在第13行下断点

批注 2020-05-11 104944

在程序界面输入32位字符

批注 2020-05-11 105144

回车,随机数v2生成完毕,点击查看即可。

若找不到点击选择IDA View-RIP

批注 2020-05-11 105347

∴flag = CUMTCTF{v2}

小结:

本题只是单纯体验一下强大的IDA的动态调试,但并不推荐使用。

今后做题还是推荐动态能力更强的OD或者x64dbg,配合IDA的静态分析,还有解不出来的逆向题? 一定会对解题更有帮助!