js getter 및 setter로 해커맨 공개

이 예에서 우리는 당신의 비디오 게임의 실시간 해킹을 관찰하고 있습니다.
누군가가 처음부터 플레이어에게 꽤 높은 수준의 게임을 제공하는 새로운 "1인칭 핵 앤 슬레이 로그라이트 모바"에 일부 코드를 몰래 넣었습니다. 당신은 이 새로운 "기능"이 "Xp 획득을 위한 노력"에서 모든 재미를 빼앗기 때문에 싫어합니다.
따라서 코드베이스 내에서 범인을 찾기 위해 출격합니다.

해커가 어떻게든 게임의 레벨 속성을 직접 증가시키고 있음을 알고 있습니다. 그들이 정확히 어떻게 증가했는지 알아 내야합니다.

이모티콘 퍼레이드



최근에 게임에 "Emoji Parade"를 화면에 기록하는 작은 위젯을 추가했습니다.
그 모습에 상당히 만족하셨습니다. 하지만 이 코드가 단순히 "Emoji Parade"를 기록하는 것 이상을 할 수 있음을 알려주는 무언가가 있습니다.
그러나 그것을 어떻게 증명할 수 있습니까? 🤔

▶️ 아래 리플릿을 실행하여 실제 해킹을 확인하세요.




게터 및 세터



JavaScript는 기존 개체 속성의 할당 및 검색을 제어하는 ​​방법을 제공합니다.
get ter 및 set tter를 사용하여 누군가가 속성에 직접 액세스하거나 속성에 무언가를 할당하는 경우 "무언가를 수행"할 수 있습니다.



level가 시간 경과에 따라 어떻게 변경되는지 확인하기 위해 levelgame 속성을 set 및 get 함수로 바꿉니다.




function monkeyPatchLevelProperty(game, logTrace = false){

      log = logTrace ? console.trace : console.log; // ignore this. This is only relevant for the logs

      let _level = game.level;

      Object.defineProperty(game, 'level', {
      get: function() {
        log("level up 🔥",_level);
        return _level;
      },
        set: function(newLevel) {
         _level = newLevel;
        }
      });

      game.isMonkeyPatched = true; // ignore this. This is only relevant for the logs
  }


먼저 레벨 값이 존재할 수 있는 새 변수let _level = game.level;를 정의하고 현재 값game.level으로 설정합니다.

그런 다음 Object.defineProperty를 사용하면 level 속성을 get ter 및 set er로 변경할 수 있습니다.



get 함수에서 game.level 속성에 액세스하면 현재 레벨을 기록합니다.

그런 다음 새 변수_level의 현재 값을 반환하므로 이 변수에 의존하는 코드가 여전히 예상대로 작동합니다.



set 함수에서 game.level 대신 _level에 값을 저장하는 것을 제외하고는 game.level 설정 뒤에 예상되는 동작만 재현합니다.



▶️ Replit 열기 및 주석 제거//monkeyPatchLevelProperty(game); 누군가 game.level에 액세스할 때마다 getter가 어떻게 기록하는지 확인하려면



<사업부 클래스="ltag__replit">
<iframe frameborder="0"height="550px"src="https://repl.it/@idkshite/Assign-Getters-and-Setters?lite=true"loading="게으른"/>





▶️ monkeyPatchLevelProperty()의 두 번째 매개변수로 true를 전달하면 game.level에 액세스할 때마다 스택 추적이 표시됩니다.



그리고 이것이 우리가 공개하는 방법입니다. 해커는 +1 내부 50ms 마다 line 14 레벨 "/hack.js" 을 증가시키고 있습니다. 🥸



🎥 원본 게시물에는 Video에서 사용할 수 있는 idkshite.com이 포함되어 있습니다

좋은 웹페이지 즐겨찾기