상세 컨텐츠

본문 제목

이더넛 (Ethernaut) 0강 - Hello Ethernaut

이더넛 (Ethernaut)

by D_One 2023. 8. 12. 02:41

본문

안녕하세요. 

 

오픈제플린(OpenZeppelin)에서 제공하는 이더넛(Ethernaut)문제를 풀어보고자 합니다. 

 

영상으로 쉽게 확인하세요. 

https://youtu.be/vtGHguZCn3M

 

이더넛 이란?

"The Ethernaut is a Web3/Solidity based wargame played in the Ethereum Virtual Machine." 라고 간단하게 설명이 되어 있는데요. EVM에서 실행되는 웹3/솔리디티 기반의 워게임 이라고 합니다. 여기서 워게임은 해킹과 보안의 개념으로 생각하시면 됩니다. 즉 이더넛은 보안적으로 문제가 있는 스마트 컨트랙를 제공하고, 저희가 해당 스마트 컨트랙를 해킹하는 게임이라고 생각하시면 됩니다. 

이 과정을 통해서, 저희가 스마트 컨트랙트를 작성할 때, 보안적인 문제를 많이 고려할 수 있게 될 것 입니다. 

 

이더넛 들어가기

 

0. 이더넛 접속 -> Switch to Sepolia 클릭 

이더넛을 접속하게 되면, 아래와 같이 나옵니다. 

그림1 이더넛 첫 화면

그림 1에서 볼 수 있듯이, 이더넛은 Goerli, Mumbai, Sepolia, Optimism_goerli, Arbitrum_goerli 네트워크를 지원 합니다. 

저는 Sepolia 네트워크에서 문제를 풀도록 하겠습니다. 

 

현재 제 메타마스크는 Polygon 네트워크로 설정돼 있기에, Switch to Sepolia를 클릭하겠습니다.

 

1. Sepolia 네트워크 전환 

그림2 Sepolia 네트워크 전환

Switch to Sepolia 클리 후 메타 마스크의 네트워크 전환을 클릭해 Sepolia로 변환합니다. 

 

2. 29개의 이더넛 문제

그림3 29개의 이더넛 문제

위 그림과 같이 이더넛은 29개의 보안문제를 제공합니다. 

0번째 문제인 Hello Ethernaut을 클릭합니다. 

 

3. Hello Ethernaut 가이드 1 ~ 3

그림4 Hello Ethernaut 가이드 1 ~ 3

Hello Ethernaut은 문제를 풀기보다는, 이더넛 문제를 어떤식으로 풀 수 있는지 알려주는 튜토리얼이라 생각할 수 있습니다. 

 

이더넛 가이드는 다음과 같습니다. 

1. 메타마스크 설치 

2. 개발자 도구 열기 -> player 입력하기. 

그림5 개발자도구 열고 난 뒤 player 입력

개발자 도구는 윈도우 기준으로 F12를 눌러서 열 수 있습니다.

그림5와 같이, 이더넛의 문제를 풀려면, 개발자 도구를 열어서 해결해야 합니다. 

그러고 나서 player를 입력하시면, 현재 이더넛 사이트에 연결된 지갑의 주소가 나오는것을 확인 할 수 있습니다. 

 

3. 개발자 도구에 help() 입력 -> await getBalance(player)

그림6 help() 화면

그림6과 같이 help()를 입력하면, 이더넛의 명령어를 확인할 수 있습니다. 

이부분은 문제를 풀면서 자연스럽게 다뤄 보도록 하겠습니다. 

 

그림7 await getBalance(player) 입력후 현재 이더 잔액확인하기

그림6의 help() 화면에서 볼 수 있듯이, await getBalance(특정주소)는 특정주소의 현재 이더의 잔액을 보여줍니다. 

 

4. Hello Ethernaut 가이드 4 ~ 6

그림8 Hello Ethernaut 가이드 4 ~ 6

4. 개발자 도구에서 ethernaut 입력

ethernaut을 입력하면, 아래 그림과 같이 스마트 컨트랙트의 정보가 나오는것을 알 수 있다. 

ethernaut은 간단히 말해서, 29개의 각 문제를 제공하는 메인 스마트 컨트랙트라고 생각할 수 있다. 

그림9 개발자 도구에서 ethernaut 입력

5. 개발자 도구에 await ethernaut.owner() 입력 해보기

그림10 abi 클리후 owner 함수 확인하기
그림11 개발자 도구에 await ethernaut.owner() 입력 해보기

 

그림10에서 볼 수 있듯이, ethernaut abi에 owner라는 함수를 확인 할 수 있으며, await ethernaut.owner()를 통해 ethernaut 스마트 컨트랙트의 owner를 알 수 있다. 

 

6. Sepolia 테스트넷 이더 받기 

이더넛 문제를 풀려면, 트랜잭션을 보낼 가스비용, 약간의 부가적인 이더가 필요하므로 테스트넷 이더를 받아야한다. 

테스트넷 이더를 받는 링크는 알케미(Alchemy) 웹사이트며, 테스트넷 이더를 받기 위해 아이디가 필요하다.

 

5. Hello Ethernaut 가이드 7 ~ 9

그림12 Hello Ethernaut 가이드 7 ~ 9

7. Get new instance 버튼 클릭해, 문제 부여 받기

그림13 Get new instance  버튼 클릭해, 문제 부여 받기

Get new instance 버튼 클릭해, 문제를 부여 받는다.

해당 버튼을 클릭하면, 가이드 5번에서 다룬 이더넛의 메인 스마트 컨트랙트인 ethernaut을 통해 문제를 부여 받는것을 알 수 있다. 

그림14 new instance 배포

Get new instance 버튼 클릭후, 개발자 도구에서 트랜잭션이 완료 된것을 확인할 수 있으며, 현재 문제의 Instance 주소도 알 수 있다. 

 

8. 개발자 도구에서 contract 입력 해보기

그림15 개발자 도구에서 contract 입력 해보기

개발자 도구에서 contract 입력시,  위 그림과 같이 나오는것을 알 수 있다. 

 

9. 개발자 도구에서 await contract.info() 입력하기

그림16 개발자 도구에서 await contract.info() 입력하기

await contract.info() 를 입력하면 그림 16과 나오는것을 알 수 있다. 

이제부터 Hello Ethernaut의 문제가 시작된다. 

 

 

6. Hello Ethernaut 문제 풀기 

해당 문제는 영상을 통해서 참고 하기 바랍니다 . (12분 12초 부터 보세요)

https://youtu.be/vtGHguZCn3M