완료됨
파이썬으로 역연산 코드를 짰는데 잘못 짠 것 같습니다.
def q(x,a):
for i in range(32):
x[i] = ((a[i%len(a)]) ^ x[i])
def w(x,l):
for i in range(32):
x[i] = (x[i]+l)
def e(x,l):
for i in range(32):
x[i] = (x[i]-l)
a = [0xde,0xad,0xbe,0xef]
b = [0xde,0xad,0xbe,0xef]
c = [0x11,0x33,0x55,0x77,0x99,0xBB,0xDD]
result = [0xF8,0xE0,0xE6,0x9E,0x7F,0x32,0x68,0x31,0x05,0xDC,0xA1,0xAA,
0xAA,0x09,0xB3,0xD8,0x41,0xF0,0x36,0x8C,0xCE,0xC7,0xAC,0x66,
0x91,0x4C,0x32,0xFF,0x05,0xE0,0xD9,0x91]
input 길이가 32가 되어야 함
answer = ''
q(result,a)
e(result,0x1f)
w(result,0x5a)
q(result,b)
w(result,0x4d)
e(result,0xf3)
q(result,c)
for i in result:
answer += chr(i)
print(answer)
이런 식으로 짰는데 문자로 바꾸는 과정에서 오류가 발생하네요.. 역연산 코드에 어떤 문제가 있는 지 궁금합니다!
#reversing
작성자 정보
답변
1
mini_chip
대표 업적 없음
안녕하세요. 해당 역연산 코드에는 3가지 문제점이 관찰됩니다.
- 문제 바이너리에서는 1 byte 자료형에서 계산하던 것을 Python 역산 코드에서는 int type에서 계산하고 있습니다. 이 부분을 고치면 본래 뜨던 오류는 사라지지만 올바르지 않은 답이 출력됩니다.
b
배열이 이상합니다.a
배열과 같지만,b
배열은a
배열을 뒤집어야 합니다.q()
,w()
,e()
의 인자가 이상합니다. 이에 대한 단서로 "역연산"이라는 키워드를 드리면 적절할 것 같습니다.
위 3가지 문제점을 고친 결과 올바른 답이 출력되는 것을 확인하였습니다.