보안/리버스엔지니어링

# 코드 엔진 문제 : Basic 15

노마드 2021. 1. 29. 07:10

 

 

먼저 디버거를 이용해 열어보니 패킹은 되어있지 않은 것을 확인할 수 있다.

 

 

 

문자열 검색을 통해 목적 구문을 확인할 수 있으며, 더블 클릭하여 해당 경로로 이동한다.

 

 

 

주변에 다수의 브레이크 포인트를 설정한 후 실행(F9)시키고, 문제에 맞게 CodeEngn의 키 값을 찾기위해 

 

name에 CodeEngn을 입력하고, Serial에는 임의의 값을 입력 후 Check it!을 눌러본다.

 

 

 

 

 

문자열의 입력을 받아야하는 곳에 지정된 브레이크 포인트에서 동작이 멈추었다.

 

이제 조금씩 따라가본다.

 

 

 

따라가다보니 CMP 두 조건을 비교하는 비교문을 확인할 수 있으며, 

그 비교 결과에 따라 제로플래그를 생성하여 CRACKED를 출력하거나 Try Again을 출력하는 것으로 판단된다.

 

그런데 자세히보니 EAX 레지스터에 3039라는 값이 들어있다. 

3039를 Dec (10진수)로 바꿔보니 12345라는 값이 나왔다.

비교문에서는 0045B844의 주소가 가르키는 값을 EAX와 비교하고 있다, 그러면 따라가보자

 

 

 

 

따라가보면 little endian으로 61 60이라는 값을 확인할 수 있다.

 

10진수로 바꿔보면 24928

 

전 스텝에서 45B844에 언제 값을 넣는지를 확인해보면

 

name이 특정 단어일때 어떤 값이 생성되는지 매커니즘을 확인할 수 있을 것이다.

 

 

 

 

아래 그림에서 위에 부분은 Name의 문자열을 하나씩 더해가며 10진수로 바꿔주며

 

아래부분에서 그 10진수를 16진수로 바꾸게 된다.