前言
前几天Dec1CTF和网鼎杯让小白我毫无体验…干脆去学校的CTF平台刷刷入门题…
结果是入门题竟然都被卡住,哭了,下面就写一下这道入门题涉及的知识点。
(其实快要考数据库了,但现在还不想复习)
废话不多说,直接上题
暴躁下载
暴躁拖IDA
暴躁F5
冷静分析🚬

程序很简单
输出“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进入动态调试界面
可以在文本框搜索main函数,进入C语言代码界面,F2在第13行下断点
在程序界面输入32位字符
回车,随机数v2生成完毕,点击查看即可。
若找不到点击选择IDA View-RIP
。
∴flag = CUMTCTF{v2}
小结:
本题只是单纯体验一下强大的IDA的动态调试,但并不推荐使用。
今后做题还是推荐动态能力更强的OD或者x64dbg,配合IDA的静态分析,还有解不出来的逆向题? 一定会对解题更有帮助!