查壳
无壳
IDA
逻辑简单,Str1和Str2(已知)相等则正确。而Str1是输入,在函数sub_401260处进行了变换。
sub_401260:
看到连续的位移和&运算是头疼且熟悉的。最近自己写了下base64,在学的过程中看到别人的base64代码和这几分神似。所以猜测这里是base相关加密。
进入反复出现的byte_413000:
YXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/
太熟悉了,就是base64表换了顺序。直接用前几天写好的base64解密脚本,用这个table换掉标准table应该就可以了。
EXP
table='ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/'
arr=input('Base64 to Text,Base64:')
byte_code=''
origin_code=''
origin_str=''
for s in arr:
if(s=='='):
byte_code=list(byte_code)
byte_code.pop(-1)
byte_code.pop(-1)
byte_code=(''.join(byte_code))
else:
byte_code+="{0:0>6}".format(format(table.find(s),'b'))
count=0
for s in byte_code:
origin_code+=s
count+=1
if(count%8==0):
origin_str+=chr(int(origin_code,2))
origin_code=''
print(origin_str)
flag
flag{sh00ting_phish_in_a_barrel@flare-on.com}