攻防世界Re新手解新手题详
Hello,CTF
下载附件,用exeinfope查壳
得到为32bit,VC++6的程序。于是可用IDA32打开。并且切换到伪代码,查看main函数:
审查程序,先运行程序,并随便输入字符串
得到wrong!结果,从上向下观察代码,第22行有scanf(as,v9)根据scanf的参数形式原函数为:scanf("%s",v9)即输入的字符串被保存在v8中。据此猜测
sub_40134B((int)aPleaseInputYou, v6);为输出please input your serial:的函数。
继续向下看,若还在while循环中,查看内嵌的do while循环。
sprintf为是把格式化的数据写入某个字符串中的函数,将v4以asc_408044的形式写入v8,双击asc_408044,在视图中看出含义为"%x"即Hexadecimal转换。然后将v10与v8连接,后v9数组下标右移,17次,相当于将v9(用户输入)全部转化为16进制保存在v10中,然后跳出循环。
后用strcmp比较v10(用户输入)与v13"437261636b4d654a757374466f7246756e"的区别,返回Success与Wrong,由v10为Hexadecimal可知v13也应是16进制。转换得到:CrackMeJustForFun输入后的到成功结果剩下为返回result不重要,猜测flag{CrackMeJustForFun}
insanity
下载附件后查壳,发现是32bit程序,用32IDA打开后查看伪代码。
查看main函数,puts输出字符串忽略,sleep系统休眠........puts输出结果,发现&strs于是双击查看,得到flag:9447{This_is_a_flag}
python-trade
下载附件后得到.pyc文件,搜索后得到为.py的中间二进制文件,于是用在线工具反编译出代码得到:
审查代码,从main处看起,为比较correct与用户输入是否一致。于是观察correct,发现经过encode()函数加密,通过字母位移与base64编码加密,于是反顺序自己写py脚本解密
得到:nctf{d3c0mpil1n9_PyC}
re1
用IDA打开附件:
审阅代码,看v3若为True则打印aFlag_0(查看其发现为失败),则当v3为flase时成功。而v3的值是比较v5与v9(用户输入),则追查v5。
可知xmmword的值存储在v5中,于是追查xmmword得到:(h是指Hex)
在相应部分选中按R即可自动转码
得到flag
game
IDA打开附件,跳转至main函数:
查看代码后发现在最后面调用函数输出结果,该函数多次调用用户函数,多次跳转后审阅代码最后发现输出flag的地方
为两长度为57的字符串进行位运算
,用其计算出结果得到flag
open-scoure
附件为c源码,用txt打开并审查代码
为了不让函数exit()执行,故
argc = 4 frist = 0xcafe second % 17 = 8 strlen(argv[3]) = 7
故改写程序为
#include <stdio.h>
#include <string.h>
int main() {
int first = 0xcafe;
unsigned int hash = first * 31337 + 8 * 11 + 7- 1615810207;
printf("%x\n", hash);
return 0;
} //得到结果为c0ffee
你好啊,旅行者(〃'▽'〃)这篇有趣的文字是来自一个剑与魔法的世界(o゚▽゚)o :博客园
作者:{奇迹和魔法都是存在的},我的家是在这块呦:{https://www.cnblogs.com/connerlink/}
如果有空的话就来坐一坐吧
这块有日记,书籍推荐,茶水,还有一个孤单的小博主QAQ