JavaScript 함수는 후크될 수 있습니다. 후크는 함수의 실행 프로세스를 동적으로 수정하거나 결과를 반환하는 방법입니다. JavaScript는 동적 언어로서 일반적으로 후크 작업을 수행하는 데 사용됩니다. 매개변수 또는 변수. 대체 및 기타 작업.
이 튜토리얼의 운영 환경: Windows 10 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
할 수 있다.
Hook은 함수의 실행 과정을 동적으로 수정하거나 함수의 결과를 반환하는 방법으로 실제 응용 분야에서 매우 널리 사용됩니다. 동적 언어인 Javascript는 Hook 작업도 수행할 수 있습니다. Javascript 언어가 발전하면서 Hook 메소드도 점점 더 많아지고 있습니다.
후크를 문자 그대로 번역하면 리버스 엔지니어링 분야에서 일반적으로 특정 매개변수 및 변수에 대한 수신, 출력, 교체 및 기타 작업에 사용됩니다.
예는 다음과 같습니다:
샘플 코드
함수 추가(a,b){return a + b}후크 코드
이는 매우 간단한 추가 함수로 Hook을 통해 얻을 수 있는데, 이는 반환 전에 console.log(a,b) 코드를 추가하는 것과 동일하므로 이들 값은 다음과 같습니다. 분석을 위해 두 개가 출력될 수 있습니다. 그런 다음 다음 방법을 사용하여 함수를 덮어쓸 수 있으며 이 방법은 JavaScript의 데코레이터 모드입니다.
let _add = addadd = function () { console.log('arguments', 인수) let result = _add.apply(this, 인수) console.log('result', result) return result // 결과가 필요하지 않은 경우, 그런 다음 _add()}를 직접 반환합니다.완전한 코드
function add(a, b) { return a + b} let _add = addadd = function () { console.log('arguments', 인수) let result = _add.apply(this, 인수) console.log('result' , 결과) 결과 반환 } add(1, 2)add(1,2)를 다시 호출하면 인수 매개변수와 결과 3이 출력됩니다. 매우 간단한 HOOK이 구현됩니다.
하지만 이 예는 너무 단순할 수 있는데, 제가 표현하고 싶은 것은 Hook을 통해서 우리가 Hook하고 싶은 함수와 변수를 찾을 수 있고, 그 함수가 존재하는 한 일련의 연산(함수 복사, 메타프로그래밍)을 통해서 가능하다는 것입니다. 트리거되거나 사용(값, 수정)되면 원하는 결과(예: 암호화 전, 암호화 후)를 얻을 수 있습니다. 이것이 우리의 목적입니다.
책에 나오는 예제는 특정 원래 함수에 일부 함수를 추가하고 싶지만(예: 여기에 추가) 원래 함수를 다른 개발자가 작성한 것일 수 있으므로 원래 함수 자체를 직접 수정하면 다음과 같은 문제가 발생할 수 있음을 설명하기 위한 것입니다. 알려지지 않은 BUG. 따라서 위의 방법을 사용하여 원래 기능을 파괴하지 않고 원래 기능을 복사할 수 있습니다.