Rating: 2.0

# EBC
#### #UEFI
```
들어가기전에...
Before Start...

이 Write Up은 성공한 풀이가 아닙니다.
This Write Up is not successful Write Up.

문제를 풀고 실패하기까지의 삽질과정을 보여줍니다.
I will show you what i did until failure.
```
처음엔 ebc라는 바이너리를 딱 하나 줍니다.

![alt text](../../images/ebc1.PNG "Logo Title Text 1")

처음에는 elf인줄 알고 실행시켰는데 실행이 되지않습니다.

그래서 무슨 파일인고 하니

![alt text](../../images/ebc2.PNG)

PE32+ 의 형식을 가진 EFI 파일이였습니다.

사실 처음보는 형태의 파일이라 구동시키는데까지도 굉장히 오래걸렸습니다.

몇 시간 삽질해서 EFI Shell에서 .efi 파일이 구동된다는 사실을 알았습니다.
<dl>



</dl>

***

<EFI Shell 구축 및 .efi 구동방법>

VM Ware를 사용하였습니다.

***

![alt text](../../images/ebc3.PNG "Logo Title Text 1")

New Virtual Machine 탭에서 Typical 을 선택 후 Next를 눌러줍니다.

***

![alt text](../../images/ebc4.PNG "Logo Title Text 1")

os는 나중에 깔기로 해줍니다.

***
![alt text](../../images/ebc5.PNG "Logo Title Text 1")

설치할 os는 Windows 7 x64로 하였습니다.

***
그 뒤의 나머지 설정들은 쭉 Next 해주시면 됩니다.

그리고 VM 설치한 디렉토리로 가면 .vmx 파일이 생성되어있을겁니다.

***

![alt text](../../images/ebc7.PNG "Logo Title Text 1")

***

이제 이 파일에 하나만 추가할 것입니다.

***

![alt text](../../images/ebc8.PNG "Logo Title Text 1")

` firmware="efi" ` 이 구문을 파일안에 추가만 해주세요.

***

그리고 설치된 VM을 구동하면 자동으로 EFI Shell을 실행할 수 있는 부트매니저로 진입할 것입니다.

***

![alt text](../../images/ebc9.PNG "Logo Title Text 1")

이렇게 한 길면 3분여의 시간정도 로딩할 것입니다.

기다리는동안 유튜브 한 편 보고오세요 :)

***
![alt text](../../images/ebc10.PNG "Logo Title Text 1")

부트매니저가 구동되었습니다!

EFI Shell로 진입하기전에 준비해야할 것이 있습니다.

바로 FAT32로 포맷된 부팅디스크인데요. 이건 각자 iso파일 잘 받아서 부팅디스크로 만들어보세용.

그리고 이 때, ebc.efi 파일도 부팅디스크안에 따로 넣어줘야합니다.

만들었다면, EFI Shell 에 진입 후, USB를 꽂아주세요.
그리고 다시 `exit` 명령어로 나왔다가 다시 들어가주세요.

그러면 아래와 같이 fs0: 로 인식이 된 것이 보일 겁니다.

***

![alt text](../../images/ebc11.PNG "Logo Title Text 1")

`fs0:` 로 부팅디스크로 들어갑니다.

ebc.efi 가 저장된 디렉토리로 가서 실행시켜봅니다.

***
![alt text](../../images/ebc12.PNG "Logo Title Text 1")

무사히 실행이 됩니다! XD

하지만 키를 입력하면 뭔가 바이너리가 씹힌듯이 멈춥니다...

아무래도 ebc.efi 파일을 까봐야겠습니다.

***
### 하지만 어떤 디버깅 툴을 쓰죠???

이 부분에서도 삽질 굉장히 했습니다.

.elf는 디버깅해봤어도 .efi는 난생처음이었기에...
(참고로 IDAx64 에서는 안열리던데 방법을 아시는 분은 알려주세요 ㅠㅠ)

아무튼 이것저것 툴들을 찾아보다가 발견한게 있었는데...!

[Radare2 official ](https://rada.re/r/)
[Radare2를 설명해준 블로그](https://cpuu.postype.com/post/838572)

설치는 문서 찾아보면 간단히 할 수 있습니다!

***
radare2 로 디버깅 해봅시다!

![alt text](../../images/ebc13.PNG "Logo Title Text 1")

우선 `r2` 명령어로 ebc 바이너리를 실행 후,
`aa` 명령어로 바이너리를 분석해봅시다.

***
![alt text](../../images/ebc14.PNG "Logo Title Text 1")

그러면 entry0 으로 처음 엔트리 부분으로 보이는 함수가 보입니다.

문제는 함수이름도 다 깨져있고, 이런 형식의 어셈블리는 처음이라 이 부분에서 막혀버렸습니다;;

바로 검색하여 알아보니 UEFI 바이트코드용 명령어 셋(SET)이 따로 있었습니다.
아래는 그 문서 (총 2637페이지의 압박;)

[UEFI Specification](https://uefi.org/sites/default/files/resources/UEFI%202_5.pdf)

이제 이 뒤로는 아직까진 풀지 못했습니다.

다른 팀에서 올린 Write Up이 있다면 참고해서 공부해야겠습니다. ;(

많은 조언 구합니다. 감사합니다 Thank You!

** [email protected] **

Original writeup (https://github.com/goseungduk/CTF_WriteUp/blob/master/TokyoWesterns_2019/reverse/ebc(fail)/README.md).