PyV 8 을 사용 하여 Python 파충류 에서 js 코드 를 실행 합 니 다.

9528 단어 pythonpyv8js
머리말
많은 사람들 이 이것 이 기이 한 수요 라 고 생각 할 것 이다.파충류 가 데 이 터 를 잘 오 르 면 되 지 않 겠 는가?배 부 른 거?배 부 른 거?
인터넷 에서 이 문제 에 관 한 문 제 를 검색 해 보 세 요.하지만 대부분의 동 화 는 자신의 js 기반 이 너무 엉망 이거 나 HTML 기반 이 썩 거나 ajax 기반 이 썩 거나 어차피 모든 면 이 썩 기 때 문 입 니 다.기초 가 이렇게 엉망 인 데 기 초 를 제대로 배우 지 않 고 무슨 파충 이 를 써?
그럼 꼭 물 어 봐 야 겠 네요."제 친구,당신 TM 에 도 왜 이런 요구 가 있 습 니까?""설마 당신 은 기술 쓰레기 입 니까?"
뿐만 아니 라 블 로 거들 은 3 년 여의 전단 경험 을 가 진 공 성 시체 로 서 어떻게 이 문제 에 어려움 을 겪 을 수 있 습 니까?남편 이 오늘 겪 은 문 제 는 분명 그리 간단 하지 않 습 니 다.
문제.
그렇다면 블 로 거들 은 도대체 어떤 문제 에 부 딪 혔 을 까?
블 로 거 는 오늘 인 터 페 이 스 를 오 르 려 고 하지만 그 인 터 페 이 스 를 호출 하려 면 토 큰 과 유사 한 토 큰 을 가 져 와 야 합 니 다.Cookie 의 값 은 js 로 생 성 되 었 습 니 다.이 js 는 다른 인 터 페 이 스 를 통 해 얻 은 것 입 니 다.얻 은 js 코드 는 동태 적 인 것 입 니 다.WTF!!개발 자 지금 장난 하 는 거 야?
행인 가:내 가 닦 을 게.경험 이 많은 블 로 거들 이 js 의 논 리 를 분석 하지 않 을 거 라 고?
네,저 는 할 줄 몰라요.
됐어,내 가 직접 집행 해서 결 과 를 얻 었 으 면 좋 겠 어.그 가 쓴 것 이 무슨 귀신 이 든 상관 없어.
사고의 방향
생각 을 정리 하면,지금 해 야 할 일 은 사실 매우 간단 하 다.
  • 요청 인터페이스 A,동적 으로 생 성 된 혼 란 스 러 운 js 코드
  • js 코드 를 실행 하여 생 성 된 쿠키 값
  • 을 받 습 니 다.
  • 인터페이스 B 요청,js 생 성 토 큰
  • 결 과 를 얻어 즐 거 운 놀 이 를...
  • 생각 이 상당히 뚜렷 해서 초 만 에 이 루어 질 것 같 아 요.()
    어 려 운 문제
    Python 에서 js 를 실행 합 니까?재 밌 는데 내 가 왜 nodejs 를 안 써?
    파 이 썬 은 세계 에서 아메리슘 원 을 가장 노 리 기 때문이다.∶휘 형 일!
    PyV 8 이라는 신기 한 모듈 을 찾 았 습 니 다.기 계 는 이미 pip 가 있 습 니 다.설 치 를 실행 하면 OK 가 되 지 않 습 니까?
    
    pip install pyv8
    의심 하지 마 세 요.블 로 거 는 Kali Linux,Root 권한 을 설치 하고 sudo 가 필요 없습니다.
    계속해서 잘못 을 보고 하 다
    
    pip install -U PyV8
    Collecting PyV8
     Using cached PyV8-0.5.zip
    Building wheels for collected packages: PyV8
     Running setup.py bdist_wheel for PyV8 ... error
     Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-QUm4bX/PyV8/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r
    ', '
    '), __file__, 'exec'))" bdist_wheel -d /tmp/tmpb0udlepip-wheel- --python-tag cp27: running bdist_wheel running build running build_py creating build creating build/lib.linux-x86_64-2.7 copying PyV8.py -> build/lib.linux-x86_64-2.7 running build_ext building '_PyV8' extension creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-cFt4xx/python2.7-2.7.12=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DBOOST_PYTHON_STATIC_LIB -Ilib/python/inc -Ilib/boost/inc -Ilib/v8/inc -I/usr/include/python2.7 -c src/Exception.cpp -o build/temp.linux-x86_64-2.7/src/Exception.o cc1plus: warning: command line option ‘-Wstrict-prototypes' is valid for C/ObjC but not for C++ In file included from src/Exception.cpp:1:0: src/Exception.h:6:16: fatal error: v8.h: #include <v8.h> ^ compilation terminated. error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 ---------------------------------------- Failed building wheel for PyV8 Running setup.py clean for PyV8 Failed to build PyV8 Installing collected packages: PyV8 Running setup.py install for PyV8 ... error Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-QUm4bX/PyV8/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r
    ', '
    '), __file__, 'exec'))" install --record /tmp/pip-7OAwUa-record/install-record.txt --single-version-externally-managed --compile: running install running build running build_py creating build creating build/lib.linux-x86_64-2.7 copying PyV8.py -> build/lib.linux-x86_64-2.7 running build_ext building '_PyV8' extension creating build/temp.linux-x86_64-2.7 creating build/temp.linux-x86_64-2.7/src x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-cFt4xx/python2.7-2.7.12=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DBOOST_PYTHON_STATIC_LIB -Ilib/python/inc -Ilib/boost/inc -Ilib/v8/inc -I/usr/include/python2.7 -c src/Exception.cpp -o build/temp.linux-x86_64-2.7/src/Exception.o cc1plus: warning: command line option ‘-Wstrict-prototypes' is valid for C/ObjC but not for C++ In file included from src/Exception.cpp:1:0: src/Exception.h:6:16: fatal error: v8.h: #include <v8.h> ^ compilation terminated. error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 ---------------------------------------- Command "/usr/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-QUm4bX/PyV8/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r
    ', '
    '), __file__, 'exec'))" install --record /tmp/pip-7OAwUa-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-QUm4bX/PyV8/
    v8.h 라 는 파일 이 부족 해서 그런 것 같 지만 무슨 뜻 인지 알 수가 없습니다.
    해결 하 다.
    검색엔진 을 통 해 해결 방안 을 찾 았 습 니 다.PyV 8 이 Boost 에 의존 하기 때 문 이 었 습 니 다.그러나 이 문 제 는 공식 적 으로 말 하지 않 았 기 때문에 이 가방 을 먼저 설치 해 야 합 니 다.
    
    apt-get update && apt-get install libboost-all-dev
    설치 가 끝 난 후에 도 PyV 8 을 계속 설치 하 는 것 은 여전히 위의 똑 같은 문제 이 므 로 수 동 으로 할 수 밖 에 없 을 것 같다.
    다운로드 하 다.https://github.com/emmetio/pyv8-binaries
    압축 을 풀 고 자신의 시스템 환경 에 맞 는 파일 을 선택 하여 다시 압축 을 풀 고 압축 을 풀 수 있 는 파일 을 복사 합 니 다.
    
    /usr/lib/python2.7/dist-packages/
    안 으로 들 어가 서 성공 여 부 를 테스트 하고 터미널 에서 실행 합 니 다.
    
    python
    import PyV8
    잘못 보고 하지 않 았 다 면 성 공 했 을 것 입 니 다.즐 거 운 놀 이 를 시 작 했 습 니 다.다음은 제 가 분석 해 야 할 js 코드 입 니 다.
    
    var l = [119, 98, 115, 33, 111, 109, 120, 105, 118, 62, 92, 50, 50, 54, 45, 50, 50, 51, 45, 50, 50, 55, 45, 50, 49, 58, 45, 50, 50, 49, 45, 50, 51, 51, 45, 50, 50, 52, 45, 50, 50, 51, 45, 50, 50, 54, 45, 50, 49, 55, 45, 50, 49, 58, 45, 50, 49, 50, 45, 50, 50, 54, 45, 50, 50, 58, 45, 50, 50, 49, 45, 50, 50, 51, 45, 50, 50, 58, 45, 50, 51, 51, 45, 50, 50, 58, 45, 50, 50, 55, 45, 50, 50, 54, 45, 50, 50, 54, 94, 60, 119, 98, 115, 33, 121, 119, 99, 100, 108, 62, 92, 49, 45, 51, 50, 45, 53, 45, 55, 45, 50, 50, 45, 57, 45, 56, 45, 50, 51, 45, 51, 45, 51, 49, 45, 50, 52, 45, 50, 54, 45, 50, 49, 45, 50, 57, 45, 52, 45, 58, 45, 50, 53, 45, 50, 56, 45, 54, 45, 50, 55, 45, 50, 58, 45, 50, 94, 60, 119, 98, 115, 33, 118, 62, 35, 35, 60, 103, 112, 115, 33, 41, 119, 62, 49, 60, 119, 61, 121, 119, 99, 100, 108, 47, 109, 102, 111, 104, 117, 105, 60, 119, 44, 44, 42, 124, 118, 44, 62, 84, 117, 115, 106, 111, 104, 47, 103, 115, 112, 110, 68, 105, 98, 115, 68, 112, 101, 102, 41, 111, 109, 120, 105, 118, 92, 121, 119, 99, 100, 108, 92, 119, 94, 94, 42, 126, 60, 37, 47, 100, 112, 112, 108, 106, 102, 41, 40, 114, 117, 112, 108, 102, 111, 40, 45, 118, 45, 124, 113, 98, 117, 105, 59, 40, 48, 40, 126, 42, 60];
    eval(function(p, a, c, k, e, d) {
     e = function(c) {
     return (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
     };
     if (!''.replace(/^/, String)) {
     while (c--) d[e(c)] = k[c] || e(c);
     k = [function(e) {
     return d[e]
     }];
     e = function() {
     return '\\w+'
     };
     c = 1
     };
     while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
     return p
    }('6 3=\'\';7(2=0;2<4.5;2++){3+=8.a(4[2]-1)};9(3)', 11, 11, '||i|t|l|length|var|for|String|eval|fromCharCode'.split('|'), 0, {}))
    이미 정 리 를 거 쳤 는데,사실 처음에는 한 줄 밖 에 없어 서 비교적 난처 하 다.
    자세.
    고생 하 는 과정 은 여러 가지 우여곡절 이 라 고 할 수 있 지만 많은 자 세 를 배 웠 다.예 를 들 어 혼 란 스 러 운 js 를 어떻게 원시 코드 로 복원 하 는 지 등 이다.
    Firebug 플러그 인 을 사용 하면 이 문 제 를 쉽게 해결 할 수 있 습 니 다.firebug 플러그 인 을 열 고 스 크 립 트 옵션 을 찾 습 니 다.eval 이 있 는 항목 을 선택 하 십시오.보통 마지막 줄 까지 해석 하면 원본 코드 입 니 다.제 위의 js 를 복원 한 후에 이렇게 되 었 습 니 다.
    
    var balwi=[115,116,115,122,112,115,110,106,122,110,122,112,101,119,115,106,113,101,116,116,119,106];var ljpry=[15,21,4,9,12,14,11,0,18,20,8,16,7,2,1,10,17,13,19,6,5,3];var j="";for (k=0;k<ljpry.length;k++){j+=String.fromCharCode(balwi[ljpry[k]])};$.cookie('qtoken',j,{path:'/'});
    조금 만 정리 해서 격식 이 뚜렷 한 코드 를 얻 을 수 있 습 니 다.
    
    var balwi = [115, 116, 115, 122, 112, 115, 110, 106, 122, 110, 122, 112, 101, 119, 115, 106, 113, 101, 116, 116, 119, 106];
    var ljpry = [15, 21, 4, 9, 12, 14, 11, 0, 18, 20, 8, 16, 7, 2, 1, 10, 17, 13, 19, 6, 5, 3];
    var j = "";
    for (k = 0; k < ljpry.length; k++) {
     j += String.fromCharCode(balwi[ljpry[k]])
    };
    $.cookie('qtoken', j, {
     path: '/'
    });
    원본 코드 가 있 으 면 영패 생 성 알고리즘 을 쉽게 얻 을 수 있 습 니 다.Python 으로 생 성 되 었 습 니 다.이번 에는 PyV 8 대 신 이 나 서지 않 아 도 됩 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.

    좋은 웹페이지 즐겨찾기