Jaeseo's Information Security Story

Codeengn Basic RCE 6번 문제 본문

Write UP/Codeengn - basic

Codeengn Basic RCE 6번 문제

Jaeseokim 2019. 11. 15. 23:09

06.exe - Unpack을 한 후 Serial을 찾으시오. (정답인증은 OEP + Serial)

프로그램을 실행을 하면 이런 식으로 Input Box가 있고 입력을 하면 Serial를 체크를 하는 프로그램이다.

일단 디버깅을 하기 전에 PE 분석을 해본다.

PE 분석을 통해 UPX를 통해 Packing이 되어있다는 것을 확인했다.

UPS unpacking을 해본다.

이제 unpacking된 파일을 가지고 x32dbg로 분석을 해본다.

일단 프로그램을 동작 시켜 GUI가 구성이 시작되는 main 함수부분을 찾아본다.

인터럽트가 발생하는 것을 검색해본다.

이때 main에서 동작될 것으로 예상되는 GUI를 만드는 함수에 관련된 키워드를 검색해본다.

키워드(gui, box, dialog )

이때 이러한 결과값이 나오게 되는데 처음 실행된 것으로 의심이 되는 DialogBoxParamw를 들어가 확인해본다.

그리고 Break Point를 걸어 실제로 맞는지 확인을 해본다.

Break Point를 지나자 Gui창이 뜨는 것을 통해 main 함수 영역을 찾을 것을 볼 수 있다.

이제 다시 문제로 돌아와 Serial key 값을 찾아야 하는데 Check 버튼을 눌렀을 때 발생하는 인터럽트를 검색하여 찾아본다.

그 결과 위와 같이 다양한 호출을 볼 수 있는데 이때 안내 메시지 창으로 의심이 되는 MessageBox 내부로 들어가 본다.

메시지와 관련된 문자열을 발견 할 수 있다 이때 jne를 통해 정확한 serial key 인지 아닌지 판별된 ZF 플래그로 메시지를 출력하는 것으로 예상이 된다.

Jne 하는 부분에 Break Point를 걸고 버튼을 눌러 확인을 해본다.

ZF 플래그가 0으로 에러 메시지를 출력하는 곳으로 넘어가게 되는 것을 볼 수 있다.

한번 ZF1으로 수정하여 작동시켜 본다.

그 결과 성공했다는 메시지가 나오게 된다.

이때 위에서 작동하는 곳을 분석해서 시리얼 키와 어떤 식으로 비교를 하는지 분석해본다.

일단 맨처음에 입력한 값을 GetDigitemTextA를 통해 입력 값을 가져와 push를 하고 serial key 값으로 의심이 되는 문자를 push 한 후 비교하는 기능을 하는 것으로 의심이 되는  함수를 호출 한 다음 리턴값을 eax에 가져와 and 연산을 하는 것을 볼 수 있다.이때 시리얼 키로 의심이 되는 키값을 넣고 다시 한번 해본다.

예상했던 것처럼 ZF1이고 EAX0으로 성공 메시지를 출력하는 부분으로 진행되는 것을 확인할 수 있다.

이제 Unpacking된 파일의 엔트리 포인트 값 OEP 코드 00401360+시리얼키를 추가 해서 정답을 구한다.

정답: 00401360AD46DFS547

'Write UP > Codeengn - basic' 카테고리의 다른 글

Codeengn Basic RCE 8번 문제  (0) 2019.11.30
Codeengn Basic RCE 7번 문제  (0) 2019.11.16
Codeengn Basic RCE 5번 문제  (0) 2019.10.14
Codeengn Basic RCE 4번 문제  (0) 2019.10.14
Codeengn basic RCE 3번 문제  (0) 2019.10.14
Comments