攻防世界 REVERSE 新手区/Hello, CTF
看题目描述,应该又是一道字符串比较的题
下载附件,打开
用diewin打开,查一下没有加壳,而且是32位程序
之后拿IDA32位打开,F5查看伪代码,一来就看到一串字符拷贝给了v13
跟进sub_401348
接下来从键盘输入v9,且v9的长度不能超过17
之后将v9的每个字符赋值给v4,然后通过sprintf() 函数进行标准输出,函数原型为
int sprintf(char *buffer, const char *format, [argument]…) ,功能是将v4转为16进制再赋值给V8,之后再将v8拼接到v10之后
sprintf()函数参数
(1)buffer:是char类型的指针,指向写入的字符串指针;
(2)format:格式化字符串,即在程序中想要的格式;
(3)argument:可选参数,可以为任意类型的数据;
函数返回值:buffer指向的字符串的长度;
最后是将v13与v10比较
将v13 = 437261636b4d654a757374466f7246756e 转为文本得到flag