Wargame/CodeEngn Basic RCE
-
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..
-
lvl 10Wargame/CodeEngn Basic RCE 2018. 12. 13. 15:26
문제 OEP를 구한 후 "등록 성공"으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP+OPCODE Ex) 00400000EB03 풀이 → 프로그램을 실행한다. → 문제에서, OEP를 언급했으므로 패킹된 것으로 추측할 수 있으며 IDA로 디스어셈블하면 UPX가 아닌 다른 값으로 세그먼트가 잡힌 것을 보아 다른 패커를 이용하여 패킹한 것을 알 수 있다. → 정확히, 어떤 패커로 패킹된지 알아보기 위해서, PEiD라는 PE프로그램 분석 도구를 이용한 결과 "ASPack 2.000" 인 것을 알 수 있다. → UPX와 같은 원리로, PUSHAD와 POPAD 명령어를 통해 파라미터 설정을 하는 것으로 추측하고, 여기에 BP를 걸고 디버깅한다. → ASPack 메뉴얼 언패킹 방식을 이해해야 한다. 여기..
-
lvl 09Wargame/CodeEngn Basic RCE 2018. 12. 12. 19:28
문제 StolenByte를 구하시오Ex) 75156A0068352040 풀이 → 프로그램을 실행한다. 키 파일 확인 메시지와 함께 키 파일을 찾을 수 없다는 메시지가 나타난다. → IDA로 디스어셈블한 결과, UPX로 패킹된 것을 확인 가능하다. 따라서, 언패킹을 수행한 후 재실행 시 정상적으로 실행되지 않는 것을 확인한다. → 언패킹한 바이너리를 디스어셈블한다. 먼저, 첫번째 MessageBox가 에러가 나타났고 해당 함수의 코드를 살펴보면 이상한 점이 존재한다. → 현재 MessageBoxA 함수가 실행되기 전 파라미터가 "push 0" 이라는 1개의 파라미터만 전달되었다. 하지만 MessageBoxA 함수를 검색한 결과, 총 4개의 파라미터가 필요한 것을 확인할 수 있다. (https://docs...