[ACTF新生赛2020]usualCrypt
总体分析
点进byte_40E0E4
函数界面,大概就能猜到解密与base64解密有关了
点进sub_401080()
函数
确实是常见的base64加密
但这里有两个自定义函数 sub_401000()
和sub_401030(a)
sub_401000()
int sub_401000()
{
int i; // eax
char v1; // cl
for ( 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; // rax
char v2; // al
v1 = 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}