2012-01-17 3 views
5

Google에서 변환기를 검색했지만 아무것도 찾지 못했습니다. 사용 가능한 도구가 있습니까? 아니면 난독 한 JavaScript 코드를 디코딩해야합니까?자바 스크립트 리터럴 구문 변환기/deobfuscation 도구가 필요합니다.

그런 도구가 있다고 생각하지만 적절한 키워드로 Google을 검색하지 않습니다. 코드 길이가 3 페이지이므로 도구가 필요합니다.

<script>([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(!![]+[])[!+[]+!+[]+!+[]]+(+(+[])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+!+[]+[+[]]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]])(([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+ 

겨우 아홉 문자 ("[]()!+,;을"빈 공간 U+0020)를 사용하는 것 때문에

+1

평가할 때 어떤 일이 발생합니까? – maerics

+0

코드 일부가 사용자를 Youtube로 리디렉션합니다. –

+0

그게 가능한 복사본이라면 문제가 생겼다고 생각합니다. – Jivings

답변

1

이 질문에 대한 답변은 이미 받아 들여졌지만 아직 몇 가지 사항을 정리하기 위해 게시 할 것입니다.

이 아이디어가 나왔을 때 어떤 사람은 generator을 작성하여 이런 식으로 JavaScript를 인코딩했습니다. []["sort"]["call"]()["eval"](/* big blob of code here */)을 기반으로합니다. 따라서 sort-call-eval 부분 (즉 처음 1628 바이트)을 제거하여이 인코더의 결과를 쉽게 디코딩 할 수 있습니다. 이 경우에는 생산 :

if (document.cookie=="6ffe613e2919f074e477a0a80f95d6a1"){ alert("bravo"); } 
else{ document.location="http://www.youtube.com/watch?v=oHg5SJYRHA0"; } 

또한이 코드는하지 않는 이유에 대한 설명이있다 (재미 충분히이 코드의 작성자도 킬로바이트를 제대로 압축하고 저장 할 수 없습니다) 더 이상 새 브라우저에서 작업하십시오. Array.prototype.sort을 변경하여 window에 대한 참조를 반환하지 않습니다. 지금까지 내가 기억하는 한, 이것은 window에 대한 참조를 얻을 수있는 유일한 방법 이었으므로이 코드는 지금 일종의 코드입니다.

4

이 코드는 매력적이다 주셔서 감사합니다 아직 몇 가지 정교한 있습니다 여기에

코드의 exemple입니다 기능. 자바 스크립트의 암시 적 타입 변환을 사용하여 배열을 다양한 기본 유형과 문자열 표현으로 강제 변환 한 다음 해당 문자열의 문자를 사용하여 호출 할 함수의 이름을 입력하는 다른 문자열을 작성하는 것으로 보입니다.

array filter function로 평가 다음 코드 고려해 같은 코드를 재구성

([][ 
    (![]+[])[+[]]    // => "f" 
+ ([![]]+[][[]])[+!+[]+[+[]]] // => "i" 
+ (![]+[])[!+[]+!+[]]   // => "l" 
+ (!![]+[])[+[]]    // => "t" 
+ (!![]+[])[!+[]+!+[]+!+[]] // => "e" 
+ (!![]+[])[+!+[]]   // => "r" 
]) // => function filter() { /* native code */ } 

하기 때문에 자동화 된 솔루션이 분명히 바람직하다, 시간이 많이 걸리고 오류가 발생하기 쉬운입니다. 그러나이 코드의 동작은 JavaScript 런타임에 너무 밀접하게 연결되어 있으므로 JS 인터프리터가 코드를 평가해야하는 것으로 보입니다.

일반적으로 이러한 종류의 인코딩과 함께 작동하는 도구를 찾을 수 없었습니다. 코드를 자세히 연구하고 사용 패턴 (예 : 배열 메서드에 의존)을 결정하고 사용법을 캡처하는 방법을 찾아야합니다 (예 : Function.prototype.call ])를 사용하여 코드 실행을 추적합니다.