CodeEngn Basic 18

Kail-KM
|2015. 6. 3. 16:54

문제 확인






풀이


우선 Name : AAAAA로 입력을 하고 디버거를 통해 분석해보았다. 대체적인 설명은 주석을 통해서 달아 놓았다. 여기서 두번의 값이 생성이 되는 것을 확인 할 수가 있다. 첫번쨰로는 4010EC에 써있는 것처럼 원래 0~FF~0이 D41D8~과 같이 변화하는데, 이는 입력 값과는 상관 없이 동일하게 진행되는 과정이였다.

그리고 두번쨰는 401146에 있는 것처럼 저 부분이 NAME 값에 따라 다르게 생성 되는 값이 있는데, 저 부분은 포스팅의 맨 밑에 분석을 시도(결국 실패)했었다.


그리고 위의 두 단계에서 만들어진 값들을 가지고 추가적으로 명령어가 진행되어 값이 더 변경 된후에 401185~7부분에서 최종 키값이 생성이 된다. 이를 통해 만들어진 키 값을 가지고 lstrcpmiA 함수를 통하여 문자열을 비교하고 같다면 EAX에 0이 반환이 되어 성공구문으로 점프를 한다.


문제는 이와 같이 String이 출력 되므로 인하여 쉽게 풀 수가 있다.



알고리즘 분석


알고리즘을 분석하기 위해 Step Into를 통하여 확인 해볼 경우 아래와 같이 알고리즘이 생성이 되어 있다. 하지만 다른 알고리즘에서 쓸 때 없이 헤매서 그런지 이것까지 구체적으로 분석하기에는 힘이 부족하였다. 그러므로 자세한 분석은 무기한연기를 해야할 것 같다.

이 알고리즘을 통해 생성된 값을 가지고 Return 후에 추가적인 연산을 한 후 최종 키 값이 생성이 된다.


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

CodeEngn Basic 20  (0) 2015.06.04
CodeEngn Basci 19  (0) 2015.06.03
CodeEngn Basic 17  (0) 2015.06.02
CodeEngn Basic 16  (1) 2015.06.02
CodeEngn Basic 15  (0) 2015.06.02