CodeEngn Basic05 풀이
Wargame | CTF/Reversing

CodeEngn Basic05 풀이

오늘은 5단계를 풀어보도록 하겠습니다. 많이쉬었네요.. 분발해야겠습니다.

일단 동적분석을위해 프로그램을 실행시켜보도록 하겠습니다.

일단 실행시키면 이런 창이 뜨게됩니다. 등록되지않았다고 적혀있고 밑에는 알수없는 시리얼넘버 12자리가 있습니다.

그냥 Register now를 누르게되면 시리얼이 틀렸다고나옵니다.

음 아마도 알맞는 시리얼넘버를 누르면 맞다는 창이 뜨겠네요. 올리디버거로 가봅시다.

일단 실행시키게되면 이 프로그램은 압축,암호화, 그리고 숨겨진 데이터가 많아서 코드분석결과가 믿을수없다네요 음 일단 예를 눌러봅시다..

실행을 하긴했는데 F8을 한 10분동안 누르고있었는데도 프로그램이 실행이 안되네요.. 이때까지 야매로 한방법은 안통하나봅니다..

함수명도 스트링 참조도 아무것도 안나오네요 음 좀더 고민해봐야겠습니다.

음 한참을 올리디버거로 삽질하다가 패킹 된게아닐지 의심해보았습니다. 그래서 PE파일로 열어보니 역시나.. UPX압축이 되어있었습니다. 

UPX는 실행압축으로서, 파일 내용은 압축된 코드이지만 실행시에는 압축이 해제된 코드가 메모리에 적재되는 형식을 지닌 파일입니다.보통 UPX 파일은 코드의 맨 뒤에 진짜 Entry Point(시작 지점)의 주소가 존재합니다. 라고 하네요


어쩐지 뭔가 올리디버거로 열었을때 코드가 간결하고 이상했습니다.. 복사만해대고 ㅡㅡ;

친절하게 알려주고있군요. 

 후........ 베이직에서 패킹이 나오네요 여기서 막혀버렸습니다.. 나뭇잎책을 좀더보고 다시 돌아오겠습니다 ㅠㅠㅠㅠ


나뭇잎책을 보고 돌아왔습니다. 먼저 PE View로 섹션헤더를 봅시다. 예상하기로는 아마 첫번째섹션은 비어있고 두번째섹션에 첫번째섹션 내용이 압축되어있겠죠 메모리에 올라가면 압축을 푸는형식으로요.. UPX말고는 얕은지식으로인해 모르겠습니다..

예상대로 UPX0 라는 이름의 첫번째섹션에는 파일에서 크기는 0입니다. 아무것도 없죠. 하지만 Virtual Size 는 무려 36000 입니다. 이것은 메모리에 올라가면 여기에 압축이 풀린다는 뜻이겠죠. 올리디버거로 가봅시다.


자 실행해서 가장처음에 보이는 PUSHAD라는 어셈블리어코드 UPX 패킹을 나타내준다고도 볼수있죠... POPAD라는 코드로 끝이날것이고 그다음 OEP(Original Entry Point)로 점프하는 코드가 있을겁니다. 저는 리버싱 왕초보니 바로 가지않고 루프를 통과해 보겠습니다.

올리디버거기능 Ctrl+F8 을 사용해 오토로 한줄씩 진행하면서 루프를 발견해 보겠습니다. 

여기서 ESI 는 두번째 섹션의 VA 이고 EDI 는 첫번째 섹션의 VA 입니다 . PEView 로 확인결과 첫번째섹션의 RVA는 1000 두번쨰섹션의 RVA는 37000 인걸 확인하였습니다. 무언가를 ESI에서 EDI로 복사하고 있습니다. Boolean 이라는 글자를 복사하고있는데요. 뭔지는 잘모르겠네요

흠... 뭔가 계속 쭉 복사하고있는데 글쎼요... 뭘까요 모르겠습니다... 다모르겠어요 ㅠㅠ 책이랑역시 실전은 다르군요

BP를 걸고 빠져나가겠습니다.. 

그냥 쭉 패킹코드맨마지막으로 왔습니다. 덤프를 아무리 봐도 메모장을 UPX패킹한거랑은 많이 다르네요. 메모장은 IAT(Import Address Table) 세팅하는 부분이 눈에 보였거든요. 함수이름이 아스키코드값으로 보였어요. 저거는 이상한 외계문자만 보이네요.

그냥바로 POPAD부분으로 왔습니다. 그냥 노가다로 오셔도되고 PUSHAD 하는시점에 하드웨어 BP를 걸어 바로 OEP를 찾는방법도 있습니다.

OEP로 점프해줍시다.

후.. 산넘어 산이군요 참조된 텍스트, 함수목록을 보아도 중요한 정보는 다 감춰져있네요 .. ㅠㅠ 후 그냥 트레이스 해보겠습니다.

어!! 뭔가 반가운 코드가 보이네요 ImageBase 받아오는 함수가 있습니다. ImageBase 인 00400000 를 받아오네요. 계속 트레이스 해보겠습니다.

는 뻘짓이였습니다. 1시간동안 헤메다가 결국인터넷검색..  OEP를 찾는것만으로는 패킹을 풀은것이 아니였네요.. 그래이렇게 쉬울리가없지..

덤프를 떠줍시다..

덤프 버튼을 누른후 다른이름으로 파일이름저장.. Rebuild Import를 체크하고 덤프뜬후 올리디버거로 덤프뜬파일을 열어보겠습니다.


텍스트가 그대로 보입니다. 프로그램 코드도 보이는군요 

이름은 Registered User이고

등록키는 GFX-754-IER-954 입니다. 


풀이완료! 힘들었네요 ...











'Wargame | CTF > Reversing' 카테고리의 다른 글

CodeEngn Basic07 풀이  (0) 2017.08.30
CodeEngn Basic06 풀이  (0) 2017.08.21
CodeEngn Basic04 풀이  (0) 2017.08.11
CodeEngn Basic03 풀이  (0) 2017.08.09
CodeEngn Basic02 풀이  (0) 2017.08.09