CodeEngn Basic 17

Kail-KM
|2015. 6. 2. 19:17

문제 확인




풀이


우선 한글자를 입력해야 하므로 CMP EAX, 3을 1로 바꾸어 주어 한 글자를 입력해도 입력이 받아지도록 프로그램을 패치 하여야 한다. 이렇게 패치를 한 후 저장을 하여 그 프록램을 통하여 분석을 시작한다.


아래와 같이 Key값이 EBP-14에 저장이 되고 이러한 키 값과 내가 입력한 값을 비교하여 성공 여부를 결정을 한다.


아래 사진과 같이 저 부분에서 구체적으로 키 값이 뜨는 것을 알 수가 있다. 따라서 우리는 공격방법 몇 가지를 생각 할 수가 있다. 첫번쨰는 하나하나 값을 대입하여 우리가 찾는 키값이 생성 될떄까지 대입을 해보는 것이다. 두번째 방법으로는 알고리즘을 분석하여 그 알고리즘에 맞게 우리가 프로그래밍을 하여 값을 도출해내는 것이다.

여기서 나는 깊이가 있는 두번쨰 방법을 사용 할 것이다. 참고로 나는 Python을 통하여 프로그래밍을 할 것이다.




알고리즘 분석


우선 나는 알고리즘 분석에 실패를 하였음을 미리 알린다. 내가 찾은 알고리즘은 4번의 알고리즘이 형성이 되지만 키 값 형성에 있어서 총 5번의 과정이 필요한 것 같다. 여기서 내가 찾은 알고리즘을 1,2,3,4로 나누어 볼 수가 있다.

하지만 실제로 키 값에 올라오는 것은 1- 2 - x - y - 4 인 것으로 분석을 하면서 알게 되었다. 끝까지 x, y에 쓰이는 키 값 생성 과정은 찾지 못하였다. 하지만 그렇다고 문제를 풀지 못하는 것은 아니다. 분석한 내용은 주석에 달아 놓았다.


여기서 확인 할 수 있는 것은 내가 분석한 3번 알고리즘의 값이 쓰이지 않는 다는 것이다. 그 대신 x 와 y의 값이 올라가고 이를 통해 키 값을 형성 한다. 그렇다면 어떻게 문제를 풀 것이냐면 바로 몇개의 알고리즘만으로도 키 값이 주어졌기에 우리는 찾기만 하면 된다. 

따라서 우선 1번 알고리즘을 통하여 프로그래밍을 해보고 만약 이것만으로는 부족할 경우에는 2번 알고리즘까지 프로그래밍을 통하여 코딩을 해볼려한다.



Programming


아래와 같이 프로그래밍을 한 후에 프로그램을 실행 시켜보자.


첫 번째 알고리즘을 통하여 8바이트 까지만 인식을 하므로 앞의 4자리는 무시해도 된다. 그리고 이렇게 얻은 8자리 중에서 앞의 4자리만을 키 값 생성에 사용 하므로 우리는 아래와 같이 키 값의 첫번쨰 부분에 해당하는 70을 찾을 수가 있다. 이는 ASCII("F")의 값이다.


위에서 찾은 값을 가지고 프로그램을 실행 할 경우 문제에서 주어진 키 값과 동일한 키 값이 레지스터에 올라오는 것을 확인 할 수가 있다.


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

CodeEngn Basci 19  (0) 2015.06.03
CodeEngn Basic 18  (0) 2015.06.03
CodeEngn Basic 16  (1) 2015.06.02
CodeEngn Basic 15  (0) 2015.06.02
CodeEngn Basic 14  (0) 2015.06.02