title: 攻防世界 re-for-50-plz-50
date: 2021年8月9日 12点01分
tags: 攻防世界
categories: 攻防世界
1、PE分析
一开始以为是普通的ELF文件,没太注意。正常32位IDApro打开。
2、IDApro分析
(1)shift + F12
发现可疑之处,好像跟congratulations有点像。跟进去。
这里下面还有一大串没有用的字符串,如果找不到这个,也可以直接从main函数进。
跟进之后:
(2)ctrl + X 交叉引用
(3)F5反汇编
可以看到,代码不是很复杂,跟进查看meow数组。
这里有点想不明白的是(char)(argv【1】【i】这个东西什么,一开始自己想的思路是,argv【1】【i】这个与 7 异或,然后跟meow数组进行对比,不等于就输出N00000000,等于就是congratulations,也就是说如果meow数组的字符跟argv【1】【i】^ 7对比,相等就输出,就是flag了。
于是脚本如下:
(4)出现错误
但是运行之后,却是什么都没有。
而且从返回值来看,这并不是正常退出的程序。
(5)百度资料 argv【1】【i】
argc在C语言中表示运行程序时传递给main()函数的命令行参数个数。
argv在C语言中表示运行程序时用来存放命令行字符串参数的指针数组。
argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数。
其中argv[0] 指向程序运行的全路径名,argv[1] 指向在DOS命令行中执行程序名后的第一个字符串,
argv[2] 指向执行程序名后的第二个字符串,argv[argc]为NULL。
也就是说argv【1】【i】也就是meow数组里面的字符串?那就是将这字符串跟7 异或,然后得到的值就是flag。
(6)重写脚本
(7)得到结果
TUCTF{but_really_whoisjohngalt}
3、总结
后面查看wp的时候,才发现这是MIPS程序。
MIPS百度了一下,发现还是没搞懂是什么,但是反编译的时候,需要下一个插件叫retdec?
汇编程序是指用汇编语言写出的程序,在此重点讨论MIPS架构处理器下的汇编程序。MIPS汇编程序一行只能放一个指令,每个指令翻译成机器语言均为32位二进制数,由此与指令格式相关知识对应。
下面是MIPS指令集的博客
[https://www.cnblogs.com/thoupin/p/4018455.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fthoupin%2Fp%2F4018455.html