pyc파일을 리버싱 하는 문제인데 pyc는 uncompyle6를 이용해 .py파일로 복구할 수 있다.
pip install uncompyle6후에
uncompyle6 [pyc 파일]로 py파일을 디컴파일 할 수 있다.
처음에는 역연산 하려다가 그냥 브포 돌리는게 머리 덜아프고 빠를것 같아서 브포 돌렸다.
근데 일어난지 얼마 안되서 그런지 아니면 수업시간에 해서 그런지 이거 브포짜는데만 거의 1시간쯤 걸린것 같다.
심지어 코드도 더럽다ㅎ;
l = [i for i in range(5,20)]
sl = 'w, you love dec'
print(l)
print(sl)
cmpl = [57, 73, 79, 16, 18, 26, 74, 50, 13, 38, 13, 79, 86, 86, 87]
flag = ''
for i in range(15):
for j in range(255):
r = j + l[i] ^ ord(sl[i])
if r==cmpl[i]:
print(r,cmpl[i], j, chr(j))
flag+=chr(j)
break
print(flag)
이렇게 브포 돌리면
I_hate_RUBY_!!!라는 flag가 나오게 된다.
FLAG = I_hate_RUBY_!!!
풀고나서 생각난건데 z3를 쓰면 엄청 쉽게 풀릴것 같아서 풀고 3분도 안되서 z3로 짰는데 flag가 나와버렸다..
진작 생각해볼껄,,
from z3 import *
z = Solver()
inp = [BitVec(f'a{i}', 8) for i in range(15)]
l = [i for i in range(5,20)]
sl = 'w, you love dec'
cmpl = [57, 73, 79, 16, 18, 26, 74, 50, 13, 38, 13, 79, 86, 86, 87]
for i in range(15):
# flag = ''
z.add(inp[i]+l[i]^ord(sl[i])==cmpl[i])
print(z.check())
m=z.model()
flag=''
# print(m)
for i in range(len(inp)):
# print(m.evaluate(arr[i]))
flag+=chr(int(str(m.evaluate(inp[i]))))
print(flag)
허허,,,