1、[WUSTCTF 2020]level2
通过die查壳发现UPX壳
upx -d attachment-15
得到脱壳后的程序通过ida 32打开发现flag字符串
wctf2020{Just_upx-d}
2、[NISACTF 2022]string
前面一大堆代码没啥用,生成flag的程序就是这个,seed=10086,然后通过srand设置随机种子,然后计算出随机数,但是这个地方有坑点,就是windows和linux的程序随机数不一样
#include "stdlib.h"
#include "stdio.h"
int main() {
int seed = 10086;
srand(seed);
printf("NSSCTF{");
for (int m = 0; m < 13; ++m )
{
int v4 = rand();
printf("%d", (unsigned int)(v4 % 8 + 1));
}
putchar('}');
return 0;
}
//NSSCTF{8384533872844} windows
//NSSCTF{5353316611126} linux
得到flag如下:
NSSCTF{5353316611126}
3、[NISACTF 2022]sign-ezc++
通过关键字搜素Human发现give_flag这个函数,然后发现队flag进行异或,然后通过lazy_ida将flag字符串提取出来
得到flag字符串,然后直接异或就能得到真实的flag
flag = [0x44, 0x59, 0x59, 0x49, 0x5E, 0x4C, 0x71, 0x7E, 0x62, 0x63, 0x79, 0x55, 0x63, 0x79, 0x55, 0x44, 0x43, 0x59, 0x4B, 0x55, 0x78, 0x6F, 0x55, 0x79, 0x63, 0x6D, 0x64, 0x77]
for f in flag:
print(chr(f^0xa),end='')
得到flag如下:
NSSCTF{this_is_NISA_re_sign}
4、[HUBUCTF 2022 新生赛]simple_RE
通过ida打开之后发现先将输入内容通过sub_401570进行加密,然后和目标字符串a5mc58bphliax7j进行比较,如果相等就是正确的,那么需要了解sub_401570是如何加密的
通过求余3和最后补齐=,中间使用的字符串,我们可以判断是base64编码,但是码表不是一般的码表,
qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD
然后通过工具直接替换码表进行解码得到flag
得到flag如下:
NSSCTF{a8d4347722800e72e34e1aba3fe914ae}