u - author: overllama - rev

WriteUp: ap10

Here is the provided code:

ù,ú,û,ü,ũ,ū,ŭ,ů,ű,ų,,,=chr,ord,abs,input,all,print,len,input,pow,range,list,dict,set;ù=[12838,1089,16029,13761,1276,14790,2091,17199,2223,2925,17901,3159,18135,18837,3135,19071,4095,19773,4797,4085,20007,5733,20709,17005,2601,9620,3192,9724,3127,8125];u,U=3,256;=ü();ʉ=(([ű(u,û,U) for û in(ų(U))]))[u:ŭ(ù)+u];=zip;=[ú(û) for û in()];assert(ŭ(ù)==ŭ());assert(ũ([û*ü==ū for û,ü,ū in((ʉ,,ù))]));

The first step to deobfuscate is to replace the different names with their assigned values:

chr,ord,abs,input,all,print,len,input,pow,range,list,dict,set = chr,ord,abs,input,all,print,len,input,pow,range,list,dict,set
chr = [12838,1089,16029,13761,1276,14790,2091,17199,2223,2925,17901,3159,18135,18837,3135,19071,4095,19773,4797,4085,20007,5733,20709,17005,2601,9620,3192,9724,3127,8125]
u, U = 3, 256
dict = input()
ʉ = list(set([pow(u, abs, U) for abs in range(U)]))[u:len(chr)+u]
list = zip
dict = [ord(abs) for abs in dict]
assert(len(chr) == len(dict))
assert(all([abs*input == print for abs, input, print in list(ʉ, dict, chr)]))

We see that the program reads a string and checks if it matches the one already stored in memory. Our goal is to display the original string.

To do this, we simply add a print of the expected value:

chr,ord,abs,input,all,print,len,input,pow,range,list,dict,set = chr,ord,abs,input,all,print,len,input,pow,range,list,dict,set
chr = [12838,1089,16029,13761,1276,14790,2091,17199,2223,2925,17901,3159,18135,18837,3135,19071,4095,19773,4797,4085,20007,5733,20709,17005,2601,9620,3192,9724,3127,8125]
u, U = 3, 256
dict = input()
ʉ = list(set([pow(u, abs, U) for abs in range(U)]))[u:len(chr)+u]
list = zip
dict = [ord(abs) for abs in dict]
import builtins
expected = ''.join(
    builtins.chr(c // m)
    for c, m in zip(chr, ʉ)
)
print(expected)
assert(len(chr) == len(dict))
assert(all([abs*input == print for abs, input, print in list(ʉ, dict, chr)]))

This produces:

$ python3 u.py
slkmdfjmlqskflqmdsfj
byuctf{uuuuuuu_uuuu_uuu_34845}
Traceback (most recent call last):
  File "u.py", line 13, in <module>
    assert(len(chr) == len(dict))
AssertionError