Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

Smart contract/Ethernaut 문제풀이

Ethernaut 문제풀이 #0 - Hello Ethernaut

방피터 2022. 2. 28. 16:29

Ethernaut은 Ethereum smart contract 해킹을 통해 취약점을 파악하여 대비할 수 있도록 연습하는 일종의 게임입니다.

 

아래 링크에서 시작할 수 있습니다. 같이 한단계 한단계 시작해봅시다.

https://ethernaut.openzeppelin.com/

 

Ethernaut

 

ethernaut.openzeppelin.com

 

*** 참고

Ethernaut 문제를 풀기 위해서는 적어도 CryptoZombie정도는 완료하셔야 합니다.(이것도 부족할 수 있습니다.)

https://cryptozombies.io/

 

#1 Solidity Tutorial & Ethereum Blockchain Programming Course | CryptoZombies

CryptoZombies is The Most Popular, Interactive Solidity Tutorial That Will Help You Learn Blockchain Programming on Ethereum by Building Your Own Fun Game with Zombies — Master Blockchain Development with Web3, Infura, Metamask & Ethereum Smart Contracts

cryptozombies.io

 

 

 

 

 

Level 0 - Hello ethernaut 은 번역이 전부가 아닐까 생각합니다.

 

1. Set up metamask

메타 마스크 지갑 설치가 필수입니다. 크롬 extension 형태로 설치 가능합니다. 크롬이 싫으시다면 파이어폭스, 브레이브, 오페라 브라우져 가능하다고 나와 있는데 ㅎㅎ 그냥 크롬 쓰시지요. 설치 과정은 따로 언급하지 않겠습니다. 설치를 완료하셨다면 Rinkeby 테스트 네트워크로 이더리움 네트워크를 변경합니다.

2. Open the browser's console

Ethernaut은 개발자 콘솔을 열어 인스턴스를 생성하고 제출하는 방식입니다. 크롬 브라우져에서는 F12를 누르면 개발자 모드가 열립니다.

아래와 같은 화면을 보실 수 있습니다.

3. Use the console helpers

콘솔에서 여러가지 명령을 수행할 수 있습니다. 

예를 들면 아래 화면처럼 getBalance(player)를 입력하면 Promise가 리턴되는 것을 확인할 수 있습니다.

(***이 연재에서 javascript에 대한 내용은 언급하지 않겠습니다.)

 

 

Promise가 리턴되므로 완료된 값을 리턴받기 위해 await을 붙여 다시 실행시켜보면 아래 화면처럼 내가 메타마스크 지갑에 가지고 있는 이더 잔액이 표시 됩니다. 저는 미리 받아서 18.xxxx로 표기되는데 여러분들은 0이 보이실거에요. 지금은 테스트넷입니다. 메인넷이 아니구요 ㅎ 고로 표시된 이더는 가짜입니다. 저도 저만큼 있었으면 좋겠네요 ㅎㅎ

 

 

player 실행하여 내 지갑의 주소를 확인하거나  help()를 실행하여 도움말을 보실 수도 있습니다. 연습삼아 해봅시다.

4. The ethernaut contract

ethernaut 이라는 메인 스마트 컨트렉트를 이용하여 문제를 풀텐데 콘솔창에 입력하셔서 무슨 내용이 있는지 살펴보세요.

(ABI부분을 한번 살펴봅시다.)

 

5. Interact with the ABI

ABI(Application Binary Interface)는 말 그대로 스마트 컨트렉트와 상호작용할 수 있는 "인터페이스"입니다.

설명에 따르자면 ethernaut은 Ethernaut.sol 이라는 이름으로 Rinkeby 테스트넷에 배포되어 있는 스마트 컨트렉트입니다. 당연히 ABI가 있겠죠? 다음을 콘솔에 실행시켜 owner ABI를 실행시켜보면 이 스마트 컨트렉트의 소유자를 확인할 수 있습니다.

await ethernaut.owner()

 

6. Get test ether

모든 이더리움 내 거래나 스마트 컨트렉트 수행에는 이더가 필요합니다. https://faucet.rinkeby.io/ 에 방문하여 이더를 받아봅시다.

마냥 자신의 지갑 주소를 넣는다고 되는게 아니구요. 트위터나 페이스북 계정이 필요합니다.

트위터 기준으로 설명드리자면 먼저 트위터에 내 지갑 주소를 적고 트윗합니다. 내 주소는 지갑에서 이름을 클릭해 복사합니다.

그리고 해당 트윗 링크를 복사해서 https://faucet.rinkeby.io/에 붙여넣기를 하고 원하는 만큼의 이더를 받아요. 이왕이면 테스트넷에서라도 많이 받아봅시다. 잠깐 기분이 좋습니다.

그리고 잠시 후 테스트넷으로 입금된 것을 확인할 수 있습니다. 37 이더나 있습니다. 전 이제 부잡니다........ 하아...

이제 필요한 이더도 받았으니 계속 이어가봅시다. 참고고 faucet은 수도꼭지라는 뜻이에요 ;)

 

7. Getting a level instance

스마트 컨트렉트의 인스턴스를 받을 차례입니다. 가장 하단에 있는 Get new instance 버튼을 클릭하면 메타마스크가 자동으로 열리며 수수료를 납부하라고 합니다. 하 수수료 5.3불 6000원 수수료... 테스트넷인데도 아깝.....

확인을 클릭하여 수수료를 보내면 인스턴스가 생선됩니다.

 

8. Inspecting the contract

콘솔창에서 contract라고 입력하여 인스턴스 내용을 살펴봅시다. 특히 ABI 부분을 봐 봅시다.

 

9. Interact with the contract to complete the level

거의 다 왔습니다. 컨트랙트와 상호작용을 하기만하면 0레벨이 끝난다고 하네요. 그냥 콜만 해도 되겠죠? ㅎㅎ 아래를 실행해봅시다.

await contract.info()

그러면 아래와 같은 메세지를 볼 수가 있습니다.

 

info1()을 실행해보라고 하네요 ㅎㅎㅎ 하라는데로 해봅시다.

 

 

똥깨 훈련 시키네요. 이번에는 info2() 실행해보라는 메세지가 나왔습니다. "hello"를 파라미터로 함께 보냅시다.

await contract.info2("hello")

똥깨훈련 4. infoNum이 다음에 수행할 method의 번호를 가지고 있다고 합니다. 또 수행해봅시다.

await contract.infoNum()

array를 리턴하는데 words 0번째에 42라는 숫자가 있네요. 전에 다음에 수행할 method의 숫자를 가지고 있다고 했으니 42()?를 수행해 봅시다. 역시 await contract.42()는 에러를 리턴하네요. abi를 확인해 봅시다.

abi중에 info42()가 있네요. 이 abi를 수행하는게 맞는 것 같습니다. 결과는 다음과 같아요.

어나더 똥깨훈련 theMethodName도 수행해봅시다.... 으휴..

ㅎㅎㅎ 무한 똥깨훈련이네요. method7123949() 를 수행해봅니다. ㅎㅎ 하다보면 늘겠지요!

무한 똥깨 훈련 ㅠㅠ 너무햏

마지막이었으면 좋겠네요 ㅠㅠ 비밀번호를 알고 있다면 제출하라고 합니다. 파라미터 없이 authenticate()를 수행해보니 파라미터 에러가 출력됩니다. 비밀번호? 다시 abi를 확인해 보면 password()가 있습니다. 

에러~

await contract.password()를 수행하니 비밀번호가 보입니다. 아하하 튜토리얼이니까 아하하..... 그리고나서 await contract.authenticate("ethernaut0") 를 수행합니다.

그러면 다시 메타마스크창이 열리며 수수료를 납부하라고 하네요. 수수료 0.0044 ETH???? 으악 ㅋㅋㅋㅋㅋ 거의 13불이 넘네요. 가짜 이더지만 수수료 대박이네요.

 

자 납부하면 드디어 끝! 이제 주황색 Submit instance 버튼을 클릭해 인스턴스를 제출해 봅시다.

그러면 다시 메타 마스크가 열리며 또 수수료를 납부하라고 합니다.

수수료를 납부하고 잠시 기다리면 콘솔창에 무지개빛깔로 잘했다고 합니다. 으하하 잘했대 으흐흐 칭찬받았다 ㅎㅎ

0번 문제는 그야말로 0번 문제였어요. 이 문제를 실행하기 위한 이것저것 사전 준비와 익숙해지기 위한 연습 정도 였던 것 같습니다.

 

혼자서 천천히 생각하면서 해보는 게 중요합니다!! 다음엔 1번 문제에서 만나요~

 

안녕~!

 

다음 레벨 문제 풀이

2021.09.24 - [Smart contract] - Ethernaut 문제풀이 #1 - Fallback

반응형