All
-
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 변수에 저장되는 값을 알아야하므로, 해당 값을 출력하는 코드를 추가하여 재컴파일 한다. → 프로그램을 실행하면, 다음과 같이 정답이 출력된다.
-
lvl 12Wargame/CodeEngn Basic RCE 2018. 12. 27. 15:41
문제 Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 문제 : Key값과 + 주소영역을 찾으시오 Ex) 7777777???????? 풀이 → 프로그램을 실행한다. → 임의의 키 값을 입력한 후, 체크를 눌러도 반응하지 않는다. 일단 키 값을 찾기 위해, 디스어셈블한다. → 다음과 같은 결과 포인트를 확인할 수 있다. → eax 레지스터와, 7A2896BFh 와 비교한 후, 성공메시지를 출력한다. 해당 값이 사용자 입력 값에 결정되는 것을 확인하기 위해, 다음과 같은 함수도 확인할 수 있다. → GetDlgI..
-
lvl 11Wargame/CodeEngn Basic RCE 2018. 12. 27. 12:34
문제 OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte Ex ) 00401000FF35CA204000E84D000000 풀이 → 프로그램을 실행한다. → 키 파일 체크 확인 메시지와 해당 파일을 찾을 수 없는 메시지를 확인된다. 디스어셈블을 통해 확인 결과, UPX로 패킹되어 있다. → 언패킹한 바이너리를 다시 디스어셈블한 결과, 앞선 문제와 같이 메시지 박스 함수 호출에 필요한 인자 값이 정상적으로 스택에 쌓이지 않는 것을 확인할 수 있다. → 해당 부분이 문제에서 말하는 StolenBytes 인 것으로 추측되며, StolenBytes를 찾기 위해 패킹된 바이너리를 디버깅해야 한다. U..