JS 에 eval,Function 등 시스템 함수 주입 동적 코드 캡 처
동적 실행 js 코드 는 두 가지 방법,즉 eval 과 Function 이 아 닙 니 다.그러면 사이트 암호 화 코드 가 아무리 많아 도 우 리 는 이 두 가지 방법 을 hook 에 두 면 복호화 후의 실행 가능 한 js 코드 를 얻 을 수 있 습 니 다.
일부 사 이 트 는 eval 과 Function 이라는 두 가지 방법 이 원생 인지 아 닌 지 를 검사 하기 때문에 작은 꽃 들 이 흔 들 리 는 것 이 필요 하 다.
연결 코드
우선 eval 의 연결 코드 입 니 다:
(function() {
if (window.__cr_eval) return
window.__cr_eval = window.eval
var myeval = function (src) {
console.log("================ eval begin: length=" + src.length + ",caller=" + (myeval.caller && myeval.caller.name) + " ===============")
console.log(src);
console.log("================ eval end ================")
return window.__cr_eval(src)
}
var _myeval = myeval.bind(null)
_myeval.toString = window.__cr_eval.toString
Object.defineProperty(window, 'eval', { value: _myeval })
console.log(">>>>>>>>>>>>>> eval injected: " + document.location + " <<<<<<<<<<<<<<<<<<<")
})();이 코드 가 실 행 된 후에 모든 eval 작업 은 콘 솔 에서 실 행 될 js 소스 코드 를 출력 합 니 다.같은 이치 로 Function 의 연결 코드 를 쓸 수 있 습 니 다:
(function() {
if (window.__cr_fun) return
window.__cr_fun = window.Function
var myfun = function () {
var args = Array.prototype.slice.call(arguments, 0, -1).join(","), src = arguments[arguments.length - 1]
console.log("================ Function begin: args=" + args + ", length=" + src.length + ",caller=" + (myfun.caller && myfun.caller.name) + " ===============")
console.log(src);
console.log("================ Function end ================")
return window.__cr_fun.apply(this, arguments)
}
myfun.toString = function() { return window.__cr_fun + "" }
Object.defineProperty(window, 'Function', { value: myfun })
console.log(">>>>>>>>>>>>>> Function injected: " + document.location + " <<<<<<<<<<<<<<<<<<<")
})();eval 과 달리 Function 은 길 어 지 는 매개 변수의 구조 방법 이 므 로 this 를 처리 해 야 합 니 다.또한 일부 사 이 트 는 비슷 한 메커니즘 으로 페이지 내용 을 암호 화하 고
document.write를 통 해 동적 복호화 내용 을 출력 하기 때문에 연결document.write도 할 수 있 고 연결 방법 은 eval 과 유사 하 며 여 기 는 중복 되 지 않 습 니 다.주입 방식
또 하나의 문 제 는 연결 코드 의 주입 방법 이다.
가장 간단 한 것 은 F12 컨트롤 러 를 꺼 내 서 위의 코드 를 직접 실행 하 는 것 입 니 다.그러나 이것 은 hook 이 머 무 른 후에 만 호출 할 수 있 습 니 다.만약 에 페이지 가 불 러 오 자마자 주입 하려 면 다음 과 같은 몇 가지 방식 을 사용 할 수 있 습 니 다.
많은 사람들 이 프 록 시 규칙 을 사용 하지 않 았 습 니 다.여기에 Fiddler 의 규칙 작성 방법 을 쓰 십시오.
Fiddler 메뉴 에서 Rules>Customize Rules 스 크 립 트 편집기 열기
스 크 립 트 편집기 에서 OnBeforeResponse 방법 을 찾 습 니 다.방법 에 다음 코드 를 추가 합 니 다.
if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html")){
oSession.utilDecodeResponse(); // Remove any compression or chunking
var b = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
var r = /<head[^>]*>/i;
var js = "..."; // 要注入的js源码
b = b.replace(r, "$0<script>" + js + "</script>");
oSession.utilSetResponseBody(b); // Set the response body back
}이렇게 하면 모든 html 문서 의 머리 에 자동 으로 js 코드 를 추가 합 니 다.총결산
위 에서 말 한 것 은 편집장 이 소개 한 JS 에 eval,Function 등 시스템 함 수 를 주입 하여 동적 코드 를 캡 처 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.