2017-11-12 20 views
9

특정 하위 문자열이 포함 된 문자열에 변수가 할당 된 경우 트리거하는 데이터 중단 점을 넣을 수 있습니까?문자열에 특정 하위 문자열이 포함 된 경우 모든 문자열 할당의 중단 점

예를 들어 &ctoken=을 포함하는 URL이 어떻게 구성되는지 리버스 엔지니어링하고 싶습니다. 목표가 난독 화되는 것이 복잡한 자바 스크립트로 완성되었습니다.

모든 문자열 변수를 모니터링하고 어떤 하위 문자열이 의 변수 인 경우 변수에 표시되도록 JS VM에 알릴 수 있다면이 방법이 도움이 될 것입니다.

이것이 가능합니까?

+0

기술적 인 요구 사항을 알고 있습니다. 비즈니스 요구 사항을 작성할 수 있습니까? –

+0

IDE에 따라 특정 조건이 충족 될 경우 코드 실행을 중지시키는 조건부 중단 점을 둘 수 있습니다. 귀하의 경우에는 다음 행을 따라 뭔가를 할 수 있습니다 : 'myString.search ("& ctoken =")! == -1' –

+0

나는 전역 조건부 중단 점을 만들고 싶지만, 불행하게도 불가능합니다. [가능한 중단 점 유형에 대한 설명 (Chrome)] (https://developers.google.com/web/tools/chrome-devtools/javascript/breakpoints) – RQman

답변

8

시작하기 전에 - 지식으로는 불가능합니다.

(디버깅 기능을 만들기 전에도) 기본 원시 객체 인 String으로 박스 처리 된 원시 문자열 유형이며 String이 이미 프록시되어 있습니다.

좀 더 설명 :

const s = "hi" 

아직 String의 인스턴스가 아닌 필요 - 내장 당신의 범위에 대한 ECMAScript 구현에 의해 공급되는 기본 객체, - 그러나 원시 유형. 이러한 원시 형식은 원시 데이터 메모리 참조에 대한 포인터 일뿐입니다. 심지어 자바 같은 풀에 내장되어있어 데이터 객체의 동일한 메모리 참조가되도록

const s = "hi" 
const x = new String("hi") 

과 같은 사례를 최적화하는 것으로 가정합니다. 그러나 나중에 상자 String에 의해 상자가 될 것입니다. http://bespin.cz/~ondras/html/classv8_1_1String.html

원시 형식의 경우 구독자를 추가 할 수 없습니다.

s.charAt(i) 

의 래퍼 Strings 오토 박싱 할 것이다 : 다음 예를 들어

.

모든 원시 타입을 관찰하는 것은 모든 원시 문자열을 String으로 박스에 넣어야한다는 것을 의미합니다. 이는 전혀 성능이 좋지 않을 것입니다.

뿐만 아니라 String의 구현 자체가 가입자를 추가하여 이미 프록시 할 수 있어야합니다.

var proxiedString = new Proxy(String, { 
    defineProperty(target, propKey, propDesc) { 
    console.log('defined a new string') 
    }, 
    set(obj, prop, value) { 
    console.log('set a new value to a string') 
    } 
}); 

proxiedString.x = 'newPropValue' 

을하고 다시 것 같아요 - 성능이 좋지 않을 것입니다 :

JS 이러한 프록시는 다음과 같이 보일 것이다 (나는 프록시에 의해 무슨 뜻인지 좀 더 이해할 수 있도록하기 위해).

-1
  1. 브라우저에서 devTools 조건부 중단 점을 사용할 수 있습니다 (메뉴를 사용하여 클릭).
  2. 당신은이 페이지의 어딘가에 JS 쓸 수 있다면, 당신은 이 작업을 수행 할 수 있습니다

.

if(window.location.pathname.indexOf("&ctoken=") > -1){ 
     debugger;// browser will put breakpoint automaticaly here, if condition is trully. 
     console.dir(window.location); 
    }