위험 경고: '가상화폐', '블록체인'이라는 이름으로 불법 자금 모집 위험에 주의하세요. — 은행보험감독관리위원회 등 5개 부처
검색
로그인
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
시장 동향 보기
Cheeze Wizards: 최초의 하드포크 블록체인 게임, 오리지널 Dapp은 해커의 천국이 되었습니다.
DappReview
特邀专栏作者
2019-10-19 04:49
이 기사는 약 2884자로, 전체를 읽는 데 약 5분이 소요됩니다
긴 라이브 시리즈.

보조 제목

Duguqiubu 버그

먼저 일반적인 Zhimao 결투가 어떻게 진행되는지 살펴보겠습니다.

  • 플레이어 A가 플레이어 B에게 도전합니다.

  • 플레이어 B가 이동을 수락하고 제출합니다.

  • 플레이어 A가 응답하고 동작을 제출합니다.

  • 선수 A가 움직임을 밝힙니다.

  • 플레이어 B가 움직임을 밝힙니다.

  • 스마트 계약이 전투의 결과를 결정합니다

  • 결투 애니메이션은 cheezewizards.com에서 생성되며 플레이어는 결과를 볼 수 있습니다.

플레이어 B가 "죽음의 종" 버그를 사용한 후 어떻게 싸울지 살펴보겠습니다.

  • 플레이어 A가 플레이어 B에게 도전합니다.

  • 플레이어 B가 이동을 수락하고 제출합니다.

  • 플레이어 A가 응답하고 동작을 제출합니다.

  • 선수 A가 움직임을 밝힙니다.

  • 선수 B가 동작을 공개하지 않고 의도적으로 타임아웃(90분)

  • 플레이어 B는 악의적으로 resolveTimedOutDuel(rTOD) 함수를 호출하여 두 참가자를 모두 플레이어 A로 바꾸어 플레이어 A가 승자이자 패자가 되도록 만듭니다.

악성 호출: 함수 resolveTimedOutDuel(WIZARD-A, WIZARD-A)

일반 호출: resolveTimedOutDuel(WIZARD-A, WIZARD-B) 함수는 찾기 어렵지 않습니다.둘의 차이점은 5단계에서 움직임을 공개했어야 하는 플레이어 B가 지연 전술을 사용하여 시간이 부족하다는 것입니다. , 그리고 안정적인 승리를 위해 위의 함수(a 결투 시간 부족 해결 함수)를 악의적으로 호출합니다.

악의적으로 함수를 호출하면 Zhimao A의 에너지가 소진되고 플레이어 A는 부정적인 것으로 판단되지만 Zhimao B도 무효 상태가 됩니다. 이때 플레이어 B는 resolveTimedOutDuel(WIZARD-B, WIZARD-B)를 다시 호출하여 오류 상태를 수정합니다.

이때 Zhi Moshi A의 기운이 사라진 것은 변할 수 없지만 Zhi Moshi B는 상처가 없었다. (이 버그를 악용하는 동안 에너지는 A에서 B로 전송되지 않습니다.) 물론 악의적인 제3자가 rTOD 계약을 호출하여 Zhimoshi A의 에너지를 파괴할 수도 있으며, 이는 반드시 플레이어 B에 의해 트리거될 필요는 없습니다.

Cheeze Wizards 스마트 계약은 일단 발행되면 상금을 인출(또는 토너먼트 상태를 변경)할 수 없도록 신중하게 설계되었습니다. 따라서 이 버그를 수정하는 유일한 방법은 새 계약을 배포하는 것입니다.

문제가 있는 계약에는 이미 150개의 지갑 주소가 있으며 총 가치는 175 ETH입니다. 이제 $40,000가 그 계약에 묶여 있고, 현재의 싸움 논리 하에서 그 상금을 인출할 수 있는 유일한 방법은 토너먼트에서 우승하는 것입니다.

나쁜 소식은 현재 번호 6133에 속하는 Chimage 중 일부가 영향을 받는다는 것입니다. 게임은 공식적으로 플레이어 참조를 위해 Txhash를 제공합니다.

https://etherscan.io/tx/0x0d497ea959406909edad945d332d0aa1ed2a41273c694ad385910720af2f86f3


좋은 소식은 버그가 전체 게임을 망가뜨리지는 않으며 일반 플레이어로서 거의 영향을 받지 않는다는 것입니다. 그리고 위에서 언급한 더러운 싸움 방식이 존재하도록 허용하는 경우 Zhi Magician Championship은 여전히 ​​계속 될 수 있습니다. 공식적으로는 Cheeze Wizard: Unpasteurized라고 합니다.

보조 제목

버그는 어디에 있습니까"흥미로운"?

위에서 언급했듯이 플레이어 A는 항상 피해자일 수 밖에 없는 것 같습니다. 그들은 규칙에 따라 이전에 제출했던 게임 동작을 보여 주었고 에너지가 사라졌습니다. 물론 B 선수는 이러한 에너지를 흡수할 수 없지만 A 선수가 더 이상 게임에 참여할 수 없도록 상대를 제거하는 데 성공했습니다.

그렇지 않다면... 여기 재미있는 부분이 있습니다.

플레이어 B는 자신의 수를 공개하지 않는 위험을 무릅썼으며, Cheeze Wizards의 규칙에 따르면 성공적으로 제출된 수를 공개하지 않으면 자동 기권이 됩니다.

이때 플레이어 A 또는 시스템이 올바른 방법으로 rTOD 메서드를 호출하고 올바른 매개변수를 제출하면 플레이어 B가 악의적으로 rTOD를 호출하기 전에 함수 resolveTimedOutDuel(WIZARD-A, WIZARD-B), 플레이어 A가 승리하고 모든 플레이어 B의 에너지!

그래서 새로운 게임 플레이가 탄생했습니다. 플레이어가 상대방이 버그를 사용하여 자신을 처리할 것이라고 판단하면 rTOD를 호출하는 올바른 방법을 사용하여 상대방의 에너지를 제거할 수 있습니다. 승패의 관건은 누가 먼저 rTOD를 콜하느냐다(DR 친구들 참고: 동시에 콜하더라도 가스비가 높은 거래는 채굴자들이 더 빨리 패키징한다).

그러나 정직한 플레이어에게는 장점이 있습니다: 승리할 때 부정직한 플레이어를 제거하고 에너지를 흡수할 수 있으며 부정직한 플레이어가 이기더라도 정직한 플레이어만 제거하고 더 많은 에너지를 얻지 못합니다.

그리고 잊지 마세요, 공식 Cheeze Wizards는 90분 이상 공개되지 않은 무브가 있는 게임이 있는지 모니터링하기 위해 백그라운드 프로그램을 실행하고 있으며, 발견되면 올바른 rTODs 방법이 자동으로 트리거됩니다.

참고: 살균되지 않은 Zhimoshi 버전은 모든 플레이어에게 적합하지 않습니다. 참가자는 위험을 완전히 인식해야 합니다. 많은 플레이어가 자동화된 스크립트를 실행하여 정직한 당사자 또는 부정직한 당사자로서 rTOD 방법을 가장 먼저 트리거하도록 합니다. 플레이어는 이 재미있는 게임을 할 배짱이 있는지 생각해 볼 필요가 있습니다. 따라서 자신에게 맞는 방법을 찾은 다음 무살균 버전의 Zhimoshi에 참여하십시오.

보조 제목

코드 수준에서 버그 확인

그것은 두 명의 플레이어가 전투에서 서로에게 동작을 제출할 때 시작되었으며, 그 중 한 명은 의도적이든 아니든 자신이 내놓는 동작을 공개하지 않았습니다. 이때 Cheeze Wizards는 다른 플레이어가 이 기나긴 전투를 끝낼 수 있도록 하기 위해 플레이어가"일방적인 폭로"거래. 이는 사실 일반 게임에서는 접할 수 없는 특수한 경우입니다.

rTOD 익스플로잇은 전투 중 한 가지 상황에서만 발생합니다. 한 플레이어는 동작을 공개했고 다른 플레이어는 시간이 만료될 때까지(90분) 동작을 공개하지 않았습니다. 한 쪽만 움직임을 공개하고 다른 쪽은 시간이 만료될 때까지 기다릴 때 악의적인 사용자는 잘못된 방식으로 rTOD 계약을 호출하여 정직한 플레이어의 에너지를 동결시킬 수 있습니다.

정직한 플레이어 A가 #1000 Chimage를 가진 플레이어 B와 #2000 Chimpanzee를 가진 플레이어 B와 싸우고 있고 플레이어 B가 "Death Bell" 버그를 사용하려고 한다고 가정해 보겠습니다. 두 마법사 모두 결투에 들어가기 위해 자신의 움직임을 선택했습니다. 플레이어 A는 자신의 움직임을 공개하고 플레이어 B는 결투 시간이 초과될 때까지 기다렸다가 resolveTimedOutDuel(1000, 1000)을 호출합니다. 스마트 계약의 코드 일부를 살펴보겠습니다.

결국 스마트 계약은 계약이 모든 에너지를 이기는 좀비에게 전달하고 패배한 좀비의 에너지를 고갈시킨다고 믿고 에너지 전달을 실행합니다. 그러나 wiz1과 wiz2는 모두 인덱스(#1000)를 가리키기 때문에 먼저 #1000 Zhimoshi의 힘을 두 배로 한 다음... 그를 고갈시킵니다. 고맙게도 이 오류는 두 Chimera ID가 구별되도록 함수 상단에 간단한 require 문을 추가하여 쉽게 수정할 수 있습니다.

require(wizardId1!= WizardId2,“Same Wizard”)

이 스마트 계약은 Sigma Prime의 공식적인 보안 검토를 거쳤으며 Cheeze Wizards는 게임이 의도한 대로 진행되는 데 방해가 되는 다른 문제가 없다고 확신합니다.

이것을 본 Cheeze Wizards의 살균되지 않은 버전을 플레이하려면 여전히 특정 기술 임계값이 필요하다는 것을 모두가 이해했을 것입니다. 해킹을 원하는 해커라면 unp.cheezewizards.com으로 이동하세요. 일반 플레이어는 여전히 cheezewizards.com에 참여하십시오.

DApp
Odaily 공식 커뮤니티에 가입하세요