bash -lc python3 - <<'PY'
import base64
base='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
b64key='testkey-04'
shift=sum(map(ord,b64key)) & 0x3f
alphabet=base[shift:]+base[:shift]
print('shift', shift, 'alphabet', alphabet)
target='qPr7iwu44b6728c5b945128270539'
seg1,seg2,seg3=target[:7],target[7:19],target[19:]
print(seg1,seg2,seg3)
custom b64 encode no padding with alphabet
def custom_b64_encode(data, alphabet):
val=0; valb=-6; out=[]
for c in data:
val=(val<<8)|c
valb += 8
while valb >=0:
out.append(alphabet[(val>>valb)&0x3f])
valb -= 6
if valb > -6:
out.append(alphabet[((val<<8)>>(valb+8))&0x3f])
return ''.join(out)
decode no padding
rev={c:i for i,c in enumerate(alphabet)}
def custom_b64_decode(s):
val=0; valb=-8; out=[]
for ch in s:
val=(val<<6)|rev[ch]
valb += 6
if valb >=0:
out.append((val>>valb)&0xff)
valb -= 8
return bytes(out)
first=custom_b64_decode(seg1)
print('first', first, custom_b64_encode(first,alphabet))
def rc4(data,key):
S=list(range(256)); j=0; key=list(key)
for i in range(256):
j=(j+S[i]+key[i%len(key)])&0xff
S[i],S[j]=S[j],S[i]
out=[]; i=j=0
for byte in data:
i=(i+1)&0xff
j=(j+S[i])&0xff
S[i],S[j]=S[j],S[i]
K=S[(S[i]+S[j])&0xff]
out.append(byte^K)
return bytes(out)
rc4key=b'tsrqponml'
second=rc4(bytes.fromhex(seg2), rc4key)
print('second', second)
xorkey=b'ubby`fwaa'
third=bytes([b ^ xorkey[i%len(xorkey)] for i,b in enumerate(bytes.fromhex(seg3))])
print('third', third)
inner=(first+second+third).decode()
flag='ISCC{'+inner+'}'
print('inner', inner)
print('flag', flag)
verify encryption
def to_hex(b): return b.hex()
def enc_inner(s):
b=s.encode()
part1=custom_b64_encode(b[:5],alphabet)
part2=to_hex(rc4(b[5:11],rc4key))
part3=to_hex(bytes([x^xorkey[i%len(xorkey)] for i,x in enumerate(b[11:])]))
return part1+part2+part3
print(enc_inner(inner), enc_inner(inner)==target)
print('len', len(flag))
PY
Thought for 5m 1s