buuctf————[GUET-CTF2019]encrypt

1.查壳。

 2.IDA反编译。

加密函数在sub_400686 sub_4007db sub_4008fa 

跟进。

第一个和第二个函数为RC4加密。(reverse逆向算法之base64和RC4_yhfgs的博客-CSDN博客

 第三个函数: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}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值