kaka09
[사진]3-1 파일을 실행하였더니 흰 바탕만 있는 창이 나타난다. 패킹이 되어서 제대로 실행이 안된건지 아님 원래 이렇게 의도한건지는 디버깅을 통해 분석 해봐야 알 것같다. Readme.txt를 읽어보면 OEP를 찾으라고 되어있다. OEP의 주소가 이번 문제의 정답이라 할 수 있겠다. 일단 해당 파일이 어떠판 패킹이 적용되었는지 파악하기 위해 PEID 라는 프로그램을 이용해 확인하였다. [사진]3-2 PEID로 확인해본 결과 무엇으로 패킹되었는지 찾을 수 없다고 한다. 일단 OEP를 찾는 문제이니 디버깅을 해보도록 하자 [사진]3-3 패킹이 되어있기 때문에 일반적인 어셈블리어와 좀 다르다. 예전 CodeEngn 문제를 풀때 OEP는 하단에 POP AD 밑에 JMP 문을 통해 OEP로 이동하는것을 배웠다...
[사진]2-1 Keygen 이라는 이름의 프로그램을 봐서 이름에 따라 특정한 시리얼 값이 생성되는 프로그램으로 보인다. ReadMe.txt를 읽어보면 시리얼 값이 5B134977135E7D13 일경우 대응되는 Name 을 찾으라는 문제인것 같다. 일단 시리얼 값이 어떻게 생성되는지 디버깅을 통하여 알고리즘을 분석해보자 [사진]2-2 일단 이름에 "1111"을 입력한후 키를 생성하는 코드를 찾아보았다. 키를 생성하는 코드는 사진에서 보이다 싶이 004010C6에 존재한다. REP 반복 명령을 통해 입력한 Name의 한 글자씩 특정한 아스키 코드 값으로 치환한다. 즉, "1111"->"21110121" 이라는 시리얼값이 도출된다.좀더 상세한 분석을 위해 여러가지 값을 넣어보고 일정한 규칙을 발견하였다. [사..
[사진]1-1 정확한 키(시리얼)을 찾아야 하는 문제임을 알 수있다. Ollydbg를 이용하여 해당 파일을 디스어셈블 후 문자열을 찾아보자 [사진]1-2 문자열을 살펴본 결과 Congratulation 과 Incorrect Password가 존재하는것을 알 수 있는데 이는 분기문을 통해 출력될 메세지를 지정하는 구조라고 할 수있다. 일단 Congaratulation이라는 문자열이 PUSH되는 지점으로 가서 코드를 살펴보자 [사진]1-3 사진을 보면 조건문을 통해 00401135로 분기를 할지 말지를 정하는것을 알 수 있다. 정확한 키값을 역추적하기 위해 코드를 살펴본 결과 다음 4개의 조건문과 반복문, 서브루틴에서 키값을 검증하는것을 알아내었다. 1. 004010B0 |. 807C24 05 61 CMP ..