BUUCTF——[De1CTF2019]Re_Sign
这道题很早之前和朋友一起做的,我只是脱了壳,但后面没有做出来,这一次自己试着做,这次自己做了出来。
脱壳了的程序不能运行,就用源程序直接动调,静态看脱壳后的ida,关键函数是sub_401f0a,这道题是魔改的base64,所以动调找到改后的表
进入函数动调,发现sub_402160是一个判断的关键点
进入发现了一个正常base64的表,动调发现出来和要对比的byte_41E377相比,发现出来的结果我们输入后第一次魔改base64加密的字符串在正常base64_table里面的位置,所以按照这种方法逆推回去就行(这里用的自己之前写的一个base64加密的脚本,自己写点工具脚本还是挺好的)
def mo64_decode(a):
tb = "0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm+/" #魔改的表
c=''
for i in range(len(a)):
b=str(bin(tb.index(a[i]))).replace("0b","").zfill(6) #6 base64 5 base32 4 base16
c+=str(b)
m=""
i=0
for i in range(0,len(c),8):
m+=chr(int(c[i:i+8],2))
return m
def mo64_encode(a):
tb='0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm+/'
c=''
for i in range(len(a)):
b=str(bin(ord(a[i]))