본문 바로가기

[Wargame Write-up]/CodeEngn Challenges

[CodeEngn Challenges] Basic RCE 14



여느 때와 마찬가지로, 암호를 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번의 반복문에서 암호화한 값이다