解题
还是先查壳,是32位的,无壳的软件,那么就进入下一步拖入ida中,发现竟然无法反编译,但是有main函数。
文件格式是MIPS,这道题用的是MISP的指令集,所以我们需要大概看一眼指令集转自csdn努力的浩浩的https://blog.csdn.net/qq_37036915/article/details/97566263,我们继续往下看,主要的位置,实在这个地方。
最主要的两条
addiu $v1, $v0, (meow - 0x4A0000) # "cbtcqLUBChERV[[Nh@_X^D]X_YPV[CJ"
xori $v0, 0x37
那么按照这个规律写脚本,最后可以得到脚本是。
脚本
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdint.h>
char v0[36]="cbtcqLUBChERV [[Nh@_X ^ D]X_YPV[CJ";
int xor_a = 0x37;
char flag[36] = { 0 };
int main() {
for (int i = 0; i < 36; i++) {
flag[i] = v0[i] ^ xor_a;
printf("%c", flag[i]);
}
return 0;
}
最后获得flag是TUCTF{but_really_whoisjohngalt},但是我这个代码写完之后有乱码的地方,不知道怎么修正,大佬可以帮忙看看。