본문 바로가기

CodeEngn

(16)
[CodeEngn] Basic RCE L16 우선 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다. 16.exe를 실행해본다. 이름을 입력하는 프롬프트가 뜬다. 문제를 따라 이름은 CodeEngn으로 입력한다. 다음에 뜨는 Password 입력란에는 임의의 숫자 1234를 입력했다. Wrong password! 라는 에러 메시지가 뜬다. 엔터를 누르면 프로그램이 종료된다. 파일을 디버거로 열어보기 전에 패킹 여부를 확인하기 위해 PEiD로 파일을 열어본다. EP Section에 UPX 등의 패킹방식이 아닌 그냥 .text 떠있고, 아래에도 .NET 같은 내용이 없는 것으로 보아 따로 언패킹이 필요하진 않는 것으로 판단할 수 있다. 디버거를 이용해 파일을 열어본다. 올리디버거로 16.exe 를 열었다. 가장 먼저 오류메시지..
[CodeEngn] Basic RCE L15 우선 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다. 15.exe를 실행해본다. Name과 Serial을 입력하는 메시지박스가 뜬다. 문제에 따라 Name에 CodeEngn을 입력하고 Serial은 임의의 값으로 채운다. Check it! 버튼을 클릭한다 Try Again! 이라는 에러메시지가 뜬다. 본격적으로 리버싱을 하기 위해 디버거로 15.exe열어본다. 성공/오류메시지의 위치를 찾기 위해 CPU 창에서 우클릭, Search for > All referenced text strings 를 클릭한다. 성공/오류메시지의 위치를 찾는 이유는 그 부분에 breakpoint를 걸기 위함이다. 성공/오류메시지 근처에 분기하는 CMP문이 있을 확률이 높은데, 해당 CMP 문에서 se..
[CodeEngn] Basic RCE L14 우선 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다. 14.exe를 실행해본다. 입력창이 있는 메시지박스가 뜬다. 문제에서 Name이 CodeEngn이라고 했으니 위쪽 입력란에 CodeEngn을 입력하고 Serial을 입력하는 것으로 보이는 아래 입력란에는 아무 값이나 입력해보았다. 오류 메시지가 출력된다. 본격적으로 리버싱을 시작하기 위해 디버거로 파일을 열어보기 전에 PE 파일을 정적 분석할 때 사용하는 툴인 PEiD를 이용해 14.exe를 열어본다. UPX 패킹이 되어있는 것을 확인할 수 있다. UPX로 패킹되어있는 파일을 언패킹하는 툴 중 하나인 upx303w을 이용해 언패킹한다. 위의 폴더를 다운로드한 후 압축을 푼다. 압축을 푼 폴더 안에 언패킹할 파일 08.exe..
[CodeEngn] Basic RCE L13 우선 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다. 13.exe를 실행해본다. 패스워드를 입력하라는 콘솔창이 뜬다. 임의의 비밀번호를 입력해보니 틀렸다는 메시지가 뜨고, 다시 패스워드를 입력 프롬프트가 뜬다. 프로그램에 대한 정보를 알아보기 위해 PE 파일을 정적 분석할 때 사용하는 툴인 PEiD를 이용해 13.exe를 열어보았다. 닷넷(.NET) 프로그램인 것을 확인할 수 있다. 닷넷 프로그램은 닷넷 프레임워크를 기반으로 작성된 프로그램이다. 닷넷 프로그램을 확인하려면 닷넷 디컴파일러가 필요하다. 무료 닷넷 디컴파일러인 dotPeek 이라는 프로그램을 설치했다. https://www.jetbrains.com/decompiler/ dotPeek: Free .NET Decom..
[CodeEngn] Basic RCE L12 우선 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다. 12.exe를 실행해본다. Key를 입력받는 메시지 창이 뜬다. 아무 값이나 Key로 입력하고 Check 버튼을 클릭해본다. 아무 결과도 뜨지 않는다. About 버튼을 클릭하면 안내 메시지 같은 것이 뜨고 Cancel 버튼을 클릭하면 프로그램이 종료된다. Key를 찾기 위해 12.exe를 디버거로 열어본다. 스크롤을 내리면서 코드를 살펴보다가 0040108B에서 성공메시지를 발견했다. 근처에 해당 성공메시지로 분기될지 말지를 결정하는 CMP 명령어를 찾아본다. 0040107D에 EAX값과 어떤 수(7A2896BF)를 CMP하는 명령어가 있다. 이 부분에 breakpoint(F2)를 걸고 프로그램을 실행해본다. 프로그램을 ..
[CodeEngn] Basic RCE L11 Basic RCE L09번 문제와 매우 유사한 문제이다.(그래서 09번 문제 라이트업의 내용을 일부 인용한다.) 먼저 문제에서 말하는 StolenByte에 대해 알아본다. StolenByte에 대한 여러 설명을 읽어보니 공통적으로 언패킹, OEP, PUSH, JMP 등의 키워드를 사용하여 설명하고 있다. 같은 키워드를 이용해 StolenByte를 간단하게 설명하면 StolenByte란, 패킹된 파일을 디버깅 등을 목적으로 언패킹했을 때 파일이 정상적으로 실행되지 못하게 하기 위해 OEP로 JMP한 뒤에 넘겨줘야할 인자값 등을 JMP 전에 PUSH 명령어를 이용해 넘겨줌으로써 언패킹하여 OEP부터 코드가 실행되면 PUSH 해준 인자값을 찾을 수 없는 상태가 되어 실행 파일이 깨지도록 만드는 것이다. OEP..
[CodeEngn] Basic RCE L10 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다. 10.exe를 실행해본다. 값을 입력받는 메시지박스가 뜨는데 값을 입력할 수는 없다. Exit을 클릭하니 프로그램이 종료되었다. 문제에서 OEP를 찾으라고 요구하는 것으로 보아 파일이 패킹되어 있을 수도 있을 것 같다. PE 파일을 정적 분석할 때 사용하는 툴인 PEiD를 이용해 10.exe를 열어본다. ASPack으로 패킹되어있는 것을 확인할 수 있다. 다양한 패킹을 언패킹할 수 있는 툴인 VMUnpacker를 이용해 언패킹한다. 위의 압축폴더를 다운로드하고 압축을 푼 뒤, VMUnpacker.exe를 실행한다. ... 을 클릭하여 언패킹할 파일을 찾는다. Unpack을 클릭하면 Unpacked successfully! 가 뜨..
[CodeEngn] Basic RCE L09 먼저 문제에서 말하는 StolenByte에 대해 알아본다. StolenByte에 대한 여러 설명을 읽어보니 공통적으로 언패킹, OEP, PUSH, JMP 등의 키워드를 사용하여 설명하고 있다. 같은 키워드를 이용해 StolenByte를 간단하게 설명하면 StolenByte란, 패킹된 파일을 디버깅 등을 목적으로 언패킹했을 때 파일이 정상적으로 실행되지 못하게 하기 위해 OEP로 JMP한 뒤에 넘겨줘야할 인자값 등을 JMP 전에 PUSH 명령어를 이용해 넘겨줌으로써 언패킹하여 OEP부터 코드가 실행되면 PUSH 해준 인자값을 찾을 수 없는 상태가 되어 실행 파일이 깨지도록 만드는 것이다. OEP 이전에 PUSH로 입력해준 명령어가 언패킹 이후에는 도둑맞은 꼴이 되므로 StolenByte라는 용어를 쓰는 것..