Wargame/CodeEngn Basic RCE
-
lvl 16Wargame/CodeEngn Basic RCE 2019. 1. 4. 15:34
문제 Name이 CodeEngn일때 Serial을 구하시오 풀이 → 프로그램을 실행한다. Name 값을 "CodeEngn" 값을 입력한 후 비밀번호는 임의의 값 "1234"를 입력한 후 확인한다. → PEiD 도구를 이용하여 프로그램을 확인한 결과, "Dev-C++4.9.9.2" 인 것을 확인할 수 있다. → IDA 도구를 이용하여 디스어셈블한다. 메인함수를 쉽게 찾을 수 있으며 분석을 진행한다. → 문제를 풀기 위해선 비밀번호를 입력받은 후 성공/실패 메시지를 출력하는 분기부터 집중적으로 봐야하는 것을 추측할 수 있다. 따라서, 해당 부분의 코드를 찾은 후 bp를 설정한다. → 디버깅을 시작한 후, Name에 "CodeEngn" 값을 입력하고 비밀번호는 임의의 값 "1234"를 입력하여 진행한다. cm..
-
lvl 15Wargame/CodeEngn Basic RCE 2019. 1. 3. 17:33
문제 Name이 CodeEngn일때 Serial을 구하시오 풀이 → 프로그램을 실행한다. → PEiD 도구로 프로그램을 살펴본 결과, Delphi 프로그램으로 확인된다. → IDA 도구를 이용하여 디컴파일한 결과, Check it 버튼 시 실행되는 것으로 추측되는 함수를 찾을 수 있다. 따라서, 적절한 명령어에 bp를 설정한다. (함수명:_TForm1_Button1Click) → 디버깅을 진행하면, cmp eax, ds:dword_45B844 명령어에서 break되며, 이 때의 레지스터 값을 살펴본다. 여기서 사용자 입력 값과, 명령어 그리고 레지스터 값들의 관계를 분석하면서 진행한다. → 디버깅 시, 사용자 입력 값은 문제에서 주어진 값인 "CodeEngn" 값을 입력하고, 시리얼 값은 임의의 값인 "..
-
lvl 14Wargame/CodeEngn Basic RCE 2019. 1. 3. 13:13
문제 Name이 CodeEngn 일때 Serial을 구하시오 (이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) Ex) 11111 풀이 → 프로그램을 실행한다. 적당한 값을 입력한 후, CHECK 버튼을 클릭하면 잘못된 시리얼 번호를 알려주는 메시지가 나타난다. → PEiD 도구를 이용하여 프로그램을 확인한 결과, UPX로 패킹된 것으로 확인된다. → 언패킹된 프로그램을 IDA로 디컴파일한다. 그리고 적절한 분기에 bp를 설정한다. → 분석을 진행하며 변하는 레지스터들의 값을 살펴본다. 이 때, 마지막에 설정한 bp인 cmp eax, esi 명령어에서의 레지스터 값을 살펴본다. 해당 명령어에 도달하기 전 Name 값을 문제에서 주어진 "C..
-
lvl 13Wargame/CodeEngn Basic RCE 2019. 1. 3. 10:42
문제 정답은 무엇인가 풀이 → 프로그램을 실행한 결과 콘솔 프로그램인 것을 확인할 수 있다. → PEiD 도구를 통해, C# / Basic .NET 환경으로 구현된 프로그램인 것을 확인할 수 있다. → C# / Basic .NET 환경은 디컴파일러가 존재하기 때문에, ILSpy 디컴파일러를 이용하여 디컴파일한 결과, 다음과 같이 소스코드를 확인할 수 있다. → 소스코드를 정확히 파악할 수 있으므로, Visual Studio를 이용하여 C# .NET 프레임워크를 이용하여 프로그램을 그대로 구현한다. → 구현한 코드에서 plainText 변수에 저장되는 값을 알아야하므로, 해당 값을 출력하는 코드를 추가하여 재컴파일 한다. → 프로그램을 실행하면, 다음과 같이 정답이 출력된다.