1.查壳。
2.IDA反编译。
加密函数在sub_400686 sub_4007db sub_4008fa
跟进。
第一个和第二个函数为RC4加密。(reverse逆向算法之base64和RC4_yhfgs的博客-优快云博客)
第三个函数:base64算法的一部分(只是把四个字符一组变成三个字符,没有查表)
3.exp解密
#base64部分解密
x="Z`TzzTrD|fQP[_VVL|yneURyUmFklVJgLasJroZpHRxIUlH\\vZE=" #注:'\'在字符串中要用'\\'表示
flag=""
for i in range(0,len(x),4):
flag+=hex(((ord(x[i])-61)&0x3f)<<2|((ord(x[i+1])-61)&0x30)>>4)+' '
flag+=hex(((ord(x[i+1])-61)&0xf)<<4|((ord(x[i+2])-61)&0x3c)>>2)+' '
flag+=hex(((ord(x[i+2])-61)&0x3)<<6|(ord(x[i+3])-61)&0x3f)+' '
#RC4解密
c=flag.split(' ')
y=[0]*39
for i in range(len(c)-1):
y[i]=c[i]
print(y) #得出密文
t=[]
key=[0x10,0x20,0x30,0x30,0x20,0x20,0x10,0x40] #密钥
ch=''
j=0
s=list(range(256))
for i in range(256):
j=(j+s[i]+(key[i%len(key)]))%256
s[i],s[j]=s[j],s[i]
i=0
j=0
for r in y:
i=(1+i)%256
j=(j+s[i])%256
s[i],s[j]=s[j],s[i]
x=(s[i]+(s[j]%256))%256
ch+=chr(eval(r)^s[x])
print(ch)
4。get flag
flag{e10adc3949ba59abbe56e057f20f883e}