본문 바로가기

리버스엔지니어링/크랙미 풀이

CodeEngn Basic RCE L06 문제 풀이

원래는 이번에 패킹에 대해서 포스팅하기로 했으나 L06을 보니까 또다시 패킹이 되있는 프로그램이라 한번에 쓸려고 바로 L06분석으로 들어갑니다.

 

 

 

L06의 문제를 보시고 프로그램을 다운받고 실행시키시면 이런 창이 뜹니다.

 

 

시리얼 넘버를 입력해서 실패하면 Wrong serial!!!이라고 뜨고 성공하면 왠지 You got it ; 이라고 뜰 것 같군요.

 

아 참고로 코드엔진 분석할 때 분명이 PEiD부터 쓰라고 했는데 저는 분석글을 쓰는것이고, 아직은 간단한 크랙미풀이라서 악성코드처럼 실행하면 안되는 프로그램은 아니기 때문에 프로그램을 실행시켰습니다.

그리고 실제로 악성코드도 VMware나 Virtual PC등을 이용해서 실행해 동작을 분석합니다.

 

PEiD에 넣어서 분석해보면 문제에서 나와있듯이 패킹이 되있는데요 저번 포스팅과 마찬가지로 UPX입니다.

하지만 이번에는 패킹에 대한 지식을 쓸 것 이기 때문에 UPX를 이용해서 언팩은 하지 않겠습니다.

 

 

프로그램을 실행시켜서 Wrong serial라는 문자열을 찾아보려 해도 패킹이 되어있기 때문에 찾을 수 가 없습니다.

그러므로 우리는 Back to user 모드라는 새로운 기술을 이용해서 L06을 풀겠습니다.(솔직히 새로운 기술을 계속 쓰게끔 알려주게 하니까 Basic RCE겠지)

 

 Back to User모드에 대한 설명을 알려드리겠습니다.

요로코롬 F9나 실행버튼을 눌러서 프로그램을 그냥 돌리시고요

이렇게 에러창이 뜰때 까지 프로그램을 동작시킵시다.

사실 Back to user모드를 이용하려면 프로그램이 완전히 정지해잇어야 하므로 이렇게 에러창이 뜰 때 밖에 Back to user모드를 이용할 수 없습니다.

 

①번 : 일시정지 버튼 or F12버튼을 이용해서 프로그램을 ②번 상태창에서 보듯이 Paused상태로 만듭니다.

 

그 상태에서 Alt + F9키를 이용해서 오른쪽 하단 상태창에서 보듯이 Back to User상태로 만듭니다.

그럼 Back to User상태에서 에러창의 확인버튼을 누릅니다.

 

그럼 커서가 이상태로 오게 될 것입니다.

 

제가 빨간색 박스를 친 이유는요 Back to User모드가 뭐하는 상태인지 설명하기 위해서인데요,

Back to User모드는 어떤 이벤트를 처리하고 난 바로 직후의 상태로 디버거를 옮깁니다.

저희는 에러창에서 Back to User모드를 이용하였으므로 바로 위에는 에러창을 구성하는 문자열, 메시지 창 띄우는 함수등이 있겠죠.

 

진짜 해킹대회에서는 진짜 짜증나게 에러창과 성공창이 이렇게 사이좋게 나란히 있게 두질 않겠지만 찌질이 같은 크랙미풀이이므로 사이좋게 성공부분과 실패부분과 시리얼키가 함께 있습니다.

그럼 이것을 이용해서 찐따같이 쉽게 시리얼키를 찾으시면 됩니다.

(절대로 해킹대회에서 너무 어려워서 짜증난거 아님)

그럼 이제 시리얼키를 찾았으므로 UPX언팩과 OEP를 찾으면 되겠군요.

 

 

 

 

 

원래 UPX언팩 코드를 트레이싱하면서 각각의 루프들이 뭐하는지 보여드릴려 그랬는데 제가 준비했던 UPX언팩 구문과 이버전의 UPX언팩 구문이 달라졌습니다!!!!!

그러므로 약식으로 간단하게 UPX언팩구문을 띄어넘는 설명을 하겠습니다.

원래는 이렇게 하면 다른 블로그랑 차별점이 없기 때문에 어떤 블로그를 봐도 딱히 상관이 없기 때문에 저의 블로그에 손님이 많이 안올수 있기 때문에 원래 하려고 했듯이 패킹에 대해서 다른 포스팅으로 찾아오겠습니다.

 

이렇게 프로그램을 실행시키면 pushad 부터 시작을 하는데요

정말로 간단하게 밑으로 쭉쭉쭉오시다가

 

이렇게 코드가 끊기는 부분에 있는 jmp구문에서 F7이나 F8같은 한칸 넘는 명령을 이용해서 jmp한 주소로 가면

 

이렇게 여기로 넘어갑니다.

바로 여기가 OEP(Original Entry Point)입니다.

※ OEP라고 하는 이유는 원래 EP가 여긴데 UPX코드가 추가되서 EP가 UPX언패킹부분으로 가서 실제 프로그램만의 EP라는 뜻으로 OEP라고 합니다.

 

실제로 UPX언패킹을 해서 프로그램을 열어봐도

이렇게 OEP가 똑같게 됩니다.

그럼 패스워드는 OEP+시리얼키 입니다.

이것으로 L06 분석을 마치겠습니다.

 

 

 

※지금까지는 상관 안했는데 티스토리는 익명이고 하니 잘 봤다거나 어디가 설명이 이상하다는 태클같은거나 리버싱에 호기심을 가지고 있는 다른 분야 정보보안전문가가 되고싶은 사람이 저랑 친해지고 싶거나 같이 대회를 나가고 싶으면 댓글이나 쪽지를 주세요!!!!

(절대로 인문계 고등학교에서 같이 해킹대회를 같이 나갈사람이 없어서 심심해서 이러는거 아닐수도???)