kaka09
[사진]1-1 이번 문제는 unpack을 먼저 시도하라고 문제에서 친절하게 알려준다. 특정 시리얼 번호와 OEP 코드를 찾으라는건데 리버싱을 처음 접해보았기 때문에 OEP 코드가 무엇인지 검색을 해봤다. 검색 결과 OEP(Original Entry Point) 코드는 패킹된 프로그램을 실행할때 원본 코드를 실행시키기 위하여 원본코드가 존재하는곳으로 분기하는 코드를 말하는 것 같다. 프로그램이 패킹이되면서 여러 정보들로 덮어쓰워지는?데 프로그램이 정상적으로 실행되기 위해서는 패킹된 정보들을 풀고 원래의 정보들(원본 소스코드 포함)을 가리켜서 실행시키는 구간이 있는데 이를 OEP라고 하는것 같다. 정확히 맞는 개념이 아닐 수도 있지만 일단은 흐름상 이렇다라는걸 알아두고 추후 다시 공부해보도록 해야겠다.. O..
[사진] 1-1 해당 문제는 주어진 프로그램에서 등록키를 찾아보라는 문제 같으니 한번 프로그램을 실행시켜 보자 [사진] 1-2 프로그램을 실행시켜 보니 어떠한 키값을 입력해서 인증을 해야하는 프로그램처럼 보였다. 키값을 통해 인증을 한다는 것은 바이너리 내부에 인증과 관련된 키값이 존재할테고 그 키값을 입력하면 문제를 풀 수 있을것 같았다. 그러므로 디버거를 이용해 까보자 [사진] 1-3 디버거를 이용해 바이너리를 열어보면 경고창이 하나 뜬 다음 조금 이상한? 바이너리들이 보여진다.. 인터넷으로 검색해본 결과 패킹 되어 있는 바이너리이다. 따라서 언패킹을 시켜줘야 한다. 사용된 툴은 peid와 upx.exe 파일을 사용하였다. [사진] 1-4 먼저 PEID를 이용하여 바이너리가 어떤걸로 패킹이 되었는지 ..
[사진] 4-1 디버거를 탐지하는 함수의 이름을 찾아야 한다. 우선 프로그램을 실행시켜 보자 [사진] 4-2 프로그램의 실행결과 [사진]4-2 에서 보여지는 바와 같이 정상이라는 문구가 계속 출력되는것을 확인할 수 있다. 이제부터 ollydbg를 이용하여 프로그램을 분석해 보자 [사진] 4-3 프로그램을 쭈욱 실행하다보면 특정 함수를 call 하면서 "디버깅 당함" 이라는 메세지를 계속 출력한다. 해당 메세지를 출력하는 부분을 ollydbg로 찾아 보면 다음과 같다. [사진] 4-400401048 MOV ESI, ESP 에서부터 반복루틴이 실행되면서 디버깅을 당하는지 아닌지의 여부를 판단한다. 디버깅 탐지의 여부는 KERNEL32.IsDebuggerPresent 함수를 호출하면서 리턴 값이 1이면 디버깅..