CodeEngn Basic 15

Kail-KM
|2015. 6. 2. 02:21

문제 확인




이번문제에서는 아무런 패킹이 되지 않은 것을 확인 할 수가 있다. 밑에는 실행 화면으로 실행시 아래와 같이 틀린 값이 입력되어 다시 도전하라는 메세지가 출력된다.



풀이


성공구문으로 가는 분기점을 찾는 것을 Serch for을 통하여 쉽게 찾을 수가 있다. 이렇게 찾은 후에 CMP EAX, PTR[45B844]의 값을 비교하는데 EAX에는 내가 입력한 Serial의 값이 들어 있고 PTR에는 암호화알고리즘을 거친 올바른 시리얼의 값이 들어 있다. 여기서 NAME이 123일 경우에는 시리얼 값이 0X1320DMFH 4896이라는 것을 확인 할 수가 있다.


그렇다면 문제인 Name : CodeEngn 을 통하여 입력을 해보면 아래와 같이 PTR의 값이 0x6160을 가리키고 이는 10진수로 24928을 나타낸다.


추가 분석


추가적으로 암호화 알고리즘을 분석하여 보자. 암호화가 진행되는 위치는 45B844의 값이 변하는 곳으로 바로 아래에 커서가 나타내고 있는 곳이 암호화 알고리즘이 진행 되는 곳이다. 이제 Step Into를 통하여 내부로 진입하여 보자.


내부로 진입을 하면 주석과 같이 한 단어를 읽어 들여 Shift Left(3)을 하고 이를 한글자씩 모든 과정을 거친후에 더한다. 그 후엔 "=======" 주석 밑에 위치한 부분으로 Name의 길이 만큼의 값을 Shift Left 3 이동 한후에 그 값을 Sum에 더한후 그 Sum을 SHL_2 이동 시키고 나서야 비로소 암호화 알고리즘이 끝난다.

이처럼 암호화 알고리즘을 분석하는 것을 피하지 말고 연습하자. 프로그램에 대한 이해도가 높아질 것이다.

'Reversing > CodeEngn' 카테고리의 다른 글

CodeEngn Basic 17  (0) 2015.06.02
CodeEngn Basic 16  (1) 2015.06.02
CodeEngn Basic 14  (0) 2015.06.02
CodeEngn Basic 13  (0) 2015.06.02
CodeEngn Basic 12  (0) 2015.06.01