[ACTF新生赛2020]usualCrypt
总体分析
点进byte_40E0E4
函数界面,大概就能猜到解密与base64解密有关了
点进sub_401080()
函数
确实是常见的base64加密
但这里有两个自定义函数 sub_401000()
和sub_401030(a)
sub_401000()
int sub_401000()
{int i; // eaxchar v1; // clfor ( i = 6; i < 15; ++i ){v1 = key[i + 10];key[i + 10] = key[i];key[i] = v1;}return i;
}
我修改了一下变量名
这里主要是对加密表进行了简单的移位变换
key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
key_list = list(key)
for i in range(6, 15):v1 = key_list[i + 10]key_list[i + 10] = key_list[i]key_list[i] = v1
key = ''.join(key_list)
得到key
= ABCDEFQRSTUVWXYPGHIJKLMNOZabcdefghijklmnopqrstuvwxyz0123456789+/
sub_401030(a)
int __cdecl sub_401030(const char *a1)
{__int64 v1; // raxchar v2; // alv1 = 0i64;if ( strlen(a1) ){do{v2 = a1[HIDWORD(v1)];if ( v2 < 'a' || v2 > 'z' ){if ( v2 < 'A' || v2 > 'Z' )goto LABEL_9;LOBYTE(v1) = v2 + 32;}else{LOBYTE(v1) = v2 - 32;}a1[HIDWORD(v1)] = v1;
LABEL_9:LODWORD(v1) = 0;++HIDWORD(v1);}while ( HIDWORD(v1) < strlen(a1) );}return v1;
}
这是对解密结果进行大小写替换
脚本实现
enc = 'zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'
enc2 = enc.swapcase()
得到enc2
= ZmxhZ3tiGNXlXjHfaDTzN2FfK3LycRTpc2L9
丢到base64解码软件就行
flag{bAse64_h2s_a_Surprise}