攻防世界Re新手解新手题详

Hello,CTF

​ 下载附件,用exeinfope查壳image

得到为32bit,VC++6的程序。于是可用IDA32打开。并且切换到伪代码,查看main函数:image

审查程序,先运行程序,并随便输入字符串image

得到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打开后查看伪代码。

image

查看main函数,puts输出字符串忽略,sleep系统休眠........puts输出结果,发现&strs于是双击查看,得到flag:9447{This_is_a_flag}


python-trade

下载附件后得到.pyc文件,搜索后得到为.py的中间二进制文件,于是用在线工具反编译出代码得到:image

审查代码,从main处看起,为比较correct与用户输入是否一致。于是观察correct,发现经过encode()函数加密,通过字母位移与base64编码加密,于是反顺序自己写py脚本解密image

得到:nctf{d3c0mpil1n9_PyC}


re1

用IDA打开附件:

image

审阅代码,看v3若为True则打印aFlag_0(查看其发现为失败),则当v3为flase时成功。而v3的值是比较v5与v9(用户输入),则追查v5。img

可知xmmword的值存储在v5中,于是追查xmmword得到:(h是指Hex)image

在相应部分选中按R即可自动转码

image

得到flag


game

IDA打开附件,跳转至main函数:

查看代码后发现在最后面调用函数输出结果,该函数多次调用用户函数,多次跳转后审阅代码最后发现输出flag的地方image

为两长度为57的字符串进行位运算

,用其计算出结果得到flag


open-scoure

附件为c源码,用txt打开并审查代码

image

为了不让函数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

posted @ 2021-12-03 19:27  奇迹和魔法都是存在的  阅读(195)  评论(1编辑  收藏  举报