V8 JavaScript Engine 입문 안내 3 - 간단 한 V8 응용 프로그램

컴 파일 이 이전의 hello World 프로그램 을 통과 한 후에 V8, V8 JavaScript Engine 을 실제 적 으로 활용 하여 강력 한 JavaScript 해석 엔진 으로 삼 으 려 고 합 니 다. 도대체 우리 에 게 어떤 기능 을 제공 할 수 있 습 니까?Hello World 프로그램 을 자세히 살 펴 보 겠 습 니 다.
    ......
    // 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

좋은 웹페이지 즐겨찾기