여느 때와 마찬가지로, 암호를 1234로 했는데 역시나 틀렸다고 나온다.
문자열 찾기 결과, Good Job이 보인다 저기로 가야 한다.
참조하는 주소로 이동하면 이러한 화면이 뜬다. CMP 문에는 breakpoint를 걸어주고, 그 위를 살펴본다. strlen 아래로 반복문이 있는데, 딱 봐도 암호화하는 곳이다. 뭘 암호화하는지 모르니 반복문 앞에 breakpoint 하나 걸어준다.
아까처럼 CodeEngn / 1234를 입력하고 첫 breakpoint에 걸린 결과이다. 401309에서 403038 주소의 값을 사용하고 있다. 이곳이 ID를 암호화하는 곳이다.
CMP문에서 바로 값을 확인할 수도 있지만, 이 반복문을 토대로 Python 코드를 만들어보았다. 이는 401309 ~ 40132C를 아우르는 코드이다. 간추리고 또 간추린 결과이다.
1
2
3
4
5
6
7 |
def id_encryption(id):
esi = 0
for i in range(len(id)):
esi += ord(id[i]) ** 2 + (ord(id[i]) >> 1) - ord(id[i])
return esi |
cs |
마지막 breakpoint에서 비교하는 값을 확인해보자. EAX는 암호로 입력했던 1234, ESI는 5번의 반복문에서 암호화한 값이다
'[Wargame Write-up] > CodeEngn Challenges' 카테고리의 다른 글
[CodeEngn Challenges] Basic RCE 16 (0) | 2016.08.30 |
---|---|
[CodeEngn Challenges] Basic RCE 15 (0) | 2016.08.30 |
[CodeEngn Challenges] Basic RCE 13 (0) | 2016.08.30 |
[CodeEngn Challenges] Basic RCE 12 (0) | 2016.08.29 |
[CodeEngn Challenges] Basic RCE 11 (0) | 2016.08.29 |