js getter 및 setter로 해커맨 공개
누군가가 처음부터 플레이어에게 꽤 높은 수준의 게임을 제공하는 새로운 "1인칭 핵 앤 슬레이 로그라이트 모바"에 일부 코드를 몰래 넣었습니다. 당신은 이 새로운 "기능"이 "Xp 획득을 위한 노력"에서 모든 재미를 빼앗기 때문에 싫어합니다.
따라서 코드베이스 내에서 범인을 찾기 위해 출격합니다.
해커가 어떻게든 게임의 레벨 속성을 직접 증가시키고 있음을 알고 있습니다. 그들이 정확히 어떻게 증가했는지 알아 내야합니다.
이모티콘 퍼레이드
최근에 게임에 "Emoji Parade"를 화면에 기록하는 작은 위젯을 추가했습니다.
그 모습에 상당히 만족하셨습니다. 하지만 이 코드가 단순히 "Emoji Parade"를 기록하는 것 이상을 할 수 있음을 알려주는 무언가가 있습니다.
그러나 그것을 어떻게 증명할 수 있습니까? 🤔
▶️ 아래 리플릿을 실행하여 실제 해킹을 확인하세요.
게터 및 세터
JavaScript는 기존 개체 속성의 할당 및 검색을 제어하는 방법을 제공합니다.get
ter 및 set
tter를 사용하여 누군가가 속성에 직접 액세스하거나 속성에 무언가를 할당하는 경우 "무언가를 수행"할 수 있습니다.
level
가 시간 경과에 따라 어떻게 변경되는지 확인하기 위해 level
의 game
속성을 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이 포함되어 있습니다
Reference
이 문제에 관하여(js getter 및 setter로 해커맨 공개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/datadeer/reveal-the-hackerman-with-js-getters-and-setters-4203텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)