KR101521765B1 - 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 - Google Patents
분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 Download PDFInfo
- Publication number
- KR101521765B1 KR101521765B1 KR1020150002933A KR20150002933A KR101521765B1 KR 101521765 B1 KR101521765 B1 KR 101521765B1 KR 1020150002933 A KR1020150002933 A KR 1020150002933A KR 20150002933 A KR20150002933 A KR 20150002933A KR 101521765 B1 KR101521765 B1 KR 101521765B1
- Authority
- KR
- South Korea
- Prior art keywords
- code
- file
- identifier
- bytecode
- character
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 48
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 34
- 238000003780 insertion Methods 0.000 claims abstract description 8
- 230000037431 insertion Effects 0.000 claims abstract description 8
- 239000000284 extract Substances 0.000 claims description 5
- 230000001131 transforming effect Effects 0.000 claims description 2
- 238000001514 detection method Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000005336 cracking Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/106—Enforcing content protection by specific content processing
- G06F21/1066—Hiding content
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
- Document Processing Apparatus (AREA)
Abstract
본 발명은 식별자 변환을 이용한 코드 난독화 장치 및 방법에 관한 것으로, 본 발명의 일 실시예에 따른 코드 난독화 장치는, 응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 추출부, 상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 코드분석부, 난독문자의 종류, 개수 및 삽입위치를 선택하는 제어부, 그리고 상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 식별자 변환부를 포함한다.
이와 같이 본 발명에 의하면, 화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되는 난독문자를 이용하여 식별자를 변환함으로써 정적 분석 기반의 역공학 저항성을 증가시킬 수 있다. 또한, 서로 다른 유니코드 값을 갖지만 동일하게 표현되는 난독문자를 이용하여 공격자의 혼란을 야기함으로써 역공학 분석 저항성을 강화할 수 있으며, 역공학 공격시, 바이너리 파일 분석 능력을 필요로 하므로 역공학 분석 저항성을 증가시킬 수 있다. 또한, 응용 프로그램에 난독화 기술을 적용하여 응용 프로그램의 분석으로 인한 기술 유출 및 응용 프로그램의 위변조를 방지하고, 응용 프로그램을 각종 보안 공격으로부터 보호할 수 있다.
이와 같이 본 발명에 의하면, 화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되는 난독문자를 이용하여 식별자를 변환함으로써 정적 분석 기반의 역공학 저항성을 증가시킬 수 있다. 또한, 서로 다른 유니코드 값을 갖지만 동일하게 표현되는 난독문자를 이용하여 공격자의 혼란을 야기함으로써 역공학 분석 저항성을 강화할 수 있으며, 역공학 공격시, 바이너리 파일 분석 능력을 필요로 하므로 역공학 분석 저항성을 증가시킬 수 있다. 또한, 응용 프로그램에 난독화 기술을 적용하여 응용 프로그램의 분석으로 인한 기술 유출 및 응용 프로그램의 위변조를 방지하고, 응용 프로그램을 각종 보안 공격으로부터 보호할 수 있다.
Description
본 발명은 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법에 관한 것으로서, 더욱 상세하게는 역공학 공격으로부터 응용 프로그램을 보호하는 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법에 관한 것이다.
자바 프로그램은 바이트 코드 형태로 번역되며, 바이트 코드는 특정 기계에 종속되지 않은 자바가상머신(Java virtual machine)을 이용하는 코드이므로 자바가상머신을 지원하는 기계는 어떤 기계이든 프로그램을 실행할 수 있다. 바이트 코드로 번역된 코드에는 자바 소스코드의 정보가 그대로 포함되어 있으며, 이로 인하여 바이트 코드에서 자바 소스코드로의 디컴파일이 쉽게 이루어진다. 또한 기본적으로 자바 언어로 구현된 안드로이드 애플리케이션도 디컴파일하면 본래 소스 코드와 유사한 소스코드로 쉽게 복원이 가능하다.
일반적으로 안드로이드 응용 프로그램 패키지(APK, Android application package) 파일을 디컴파일하면 소스코드를 파악할 수 있고, 역공학이나 크래킹이 가능해진다. 이러한 문제를 해결하기 위하여 소스코드에 난독화 기술을 적용하며, 난독화 기술이 적용되면 디컴파일로 소스코드를 파악할 수 없게 된다. 이를 통하여 역공학, 크래킹 등을 방지할 수 있다.
여기서 난독화란 악의적인 소프트웨어 역공학으로부터 프로그램의 코드를 보호하기 위하여 특정 방식으로 변환하여 바이너리나 소스코드가 역공학에 의해 분석되는 것을 어렵게 하기 위한 기술을 의미한다.
난독화는 대상이 되는 프로그램의 컴파일된 형태에 따라 크게 소스코드 난독화와 바이너리 난독화로 구분된다. 소스코드 난독화는 C, C++, JAVA 등의 프로그램 소스 코드를 알아보기 힘든 형태로 바꾸는 기술을 의미하고, 바이너리 난독화는 C, C++, JAVA 등이 컴파일 된 후에 생성된 바이너리를 역공학을 통하여 알아보기 힘든 형태로 바꾸는 기술을 의미한다. 특히 바이트코드라고 불리는 JAVA의 컴파일된 코드는 네이티브코드에 비하여 역공학에 필요한 정보가 많이 포함되어 있어 쉽게 역공학이 가능하다. 이로 인하여 바이트코드에 난독화 기술이 많이 적용되고 있다.
난독화 기술로는 주로 식별자 변환, 제어 흐름, 문자열 암호화, API 은닉 및 클래스 암호화 등이 주로 사용된다. 식별자 변환은 클래스, 필드 또는 메소드의 이름을 원본 이름과는 무관한 의미없는 이름으로 대체하여 디컴파일된 소스코드의 분석을 어렵게 만드는 기법이다. 특히 명령어 단축 기법을 이용하여 식별자를 변환한다.
식별자 변환을 이용하면 식별자의 의미 정보는 숨길 수 있으나, 역공학 수행시 시각적으로 고유한 식별자로 확인이 가능하다. 이로 인하여 공격자가 용이하게 고유한 식별자를 인식할 수 있으므로 식별자 변환 기술은 역공학 공격에 대한 저항성이 높지 않다.
본 발명의 배경이 되는 기술은 한국등록특허 제10-1328012호 (2013.11.13공고)에 개시되어 있다.
본 발명은 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법에 관한 것으로서, 더욱 상세하게는 역공학 공격으로부터 응용 프로그램을 보호하는 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법을 제공하는데 목적이 있다.
이러한 기술적 과제를 이루기 위한 본 발명의 실시예에 따른 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치는, 응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 추출부, 상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 코드분석부, 난독문자의 종류, 개수 및 삽입위치를 선택하는 제어부, 그리고 상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 식별자 변환부를 포함한다.
또한, 상기 추출부는, 상기 응용 프로그램 파일을 압축 해제하여 DEX 파일의 바이트코드를 추출할 수 있다.
또한, 상기 난독문자는, 화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되되 서로 다른 유니코드 값을 가질 수 있다.
또한, 상기 식별자 변환부는, 상기 바이트코드의 클래스명, 메소드명, 필드명 중에서 적어도 하나에 상기 난독문자를 삽입할 수 있다.
본 발명의 다른 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법은 응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 단계, 상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 단계, 난독문자의 종류, 개수 및 삽입위치를 선택하는 단계, 그리고 상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 단계를 포함한다.
이와 같이 본 발명에 따르면 화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되는 난독문자를 이용하여 식별자를 변환함으로써 정적 분석 기반의 역공학 저항성을 증가시킬 수 있다.
또한, 서로 다른 유니코드 값을 갖지만 동일하게 표현되는 난독문자를 이용하여 공격자의 혼란을 야기함으로써 역공학 분석 저항성을 강화할 수 있으며, 역공학 공격시, 바이너리 파일 분석 능력을 필요로 하므로 역공학 분석 저항성을 증가시킬 수 있다.
또한, 응용 프로그램에 난독화 기술을 적용하여 응용 프로그램의 분석으로 인한 기술 유출 및 응용 프로그램의 위변조를 방지하고, 응용 프로그램을 각종 보안 공격으로부터 보호할 수 있다.
도 1은 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 장치의 구성을 나타내는 블록도이다.
도 2는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 설명하기 위한 순서도이다.
도 3은 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 설명하기 위한 도면이다.
도 4는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법의 역공학 분석 저항성 증가 효과를 설명하기 위한 도면이다.
도 2는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 설명하기 위한 순서도이다.
도 3은 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 설명하기 위한 도면이다.
도 4는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법의 역공학 분석 저항성 증가 효과를 설명하기 위한 도면이다.
그러면 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
이하 첨부된 도면을 참조하면서 본 발명에 따른 바람직한 실시예를 상세히 설명하기로 한다.
도 1은 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 장치의 구성을 나타내는 블록도이다. 도 1과 같이, 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 장치(100)는 추출부(110), 코드분석부(120), 제어부(130) 및 식별자 변환부(140)를 포함한다.
먼저, 추출부(110)는 응용 프로그램 파일을 압축 해제하여 달빅 실행(DEX, Dalvik Executable) 파일을 추출한다. 이때, 응용 프로그램 파일은 안드로이드 응용 프로그램 패키지(APK, Android application package) 파일일 수 있으며, 추출부(110)는 APK 파일을 압축 해제하여 DEX 파일의 바이트 코드를 추출할 수 있다.
다음으로 코드 분석부(120)는 추출된 DEX 파일의 바이트코드를 분석한다.
그리고 제어부(130)는 난독문자의 종류, 개수 및 삽입위치를 선택한다. 여기서 난독문자는 화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되는 문자를 의미하며, 난독문자는 서로 다른 유니코드 값을 가진다.
마지막으로 식별자 변환부(140)는 선택된 난독문자를 바이트코드에 삽입하여 바이트 코드의 식별자를 변환시킨다. 이때, 식별자 변환부(140)는 바이트코드의 클래스명, 메소드명, 필드명 중에서 적어도 하나에 난독문자를 삽입할 수 있다. 그리고 식별자 변환부(140)는 난독문자가 삽입된 바이트코드를 재빌드한다.
이하에서는 도 2 내지 도 4를 통하여 본 발명의 실시예에 따른 응용 프로그램을 보호하는 방법에 대하여 더욱 상세하게 설명한다.
도 2는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 설명하기 위한 순서도이고, 도 3은 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 설명하기 위한 도면이다.
먼저, 추출부(110)는 응용 프로그램 파일인 APK 파일을 압축 해제하여 DEX 파일을 추출한다(S210).
APK 파일은 구글 안드로이드 운영체제에서 애플리케이션 배포 및 설치에 사용되는 ZIP 파일 형식의 압축 패키지이다. 사용자는 안드로이드 SDK에 포함된 ADB(Android Debug Bridge)를 이용하거나, ASTRO 파일 관리자, 파일 엑스퍼트, ES 파일 탐색기 등의 파일 관리 애플리케이션을 이용하여 APK 파일을 획득할 수 있다.
추출부(110)는 7-Zip, WinZip 등의 파일 압축 해제 유틸리티를 이용하여 응용 프로그램의 APK 파일을 압축 해제하여 DEX 파일을 추출할 수 있다. APK 파일의 압축을 해제하면 classes.dex, AndroidManifest.xml, META-IMF/, res/, resources.arsc, assets/, lib 등의 파일 및 디렉토리를 획득할 수 있고, 이중에서 classes.dex 파일이 APK 파일 구성 요소 중에서 가장 핵심 파일인 DEX 파일이다.
Classes.dex 파일은 자바 코드(.java)를 컴파일하여 생성된 자바 바이트코드(.class)를 안드로이드의 달빅 가상 머신이 인식하여 실행할 수 있도록 자바 바이트코드를 달빅 실행파일 포맷(.dex)으로 변환하여 생성한 것이다.
다음으로 코드 분석부(120)는 추출된 DEX 파일의 바이트코드를 분석한다(S220). 코드 분석부(120)는 DEX 파일 내에 포함되어 있는 복수의 클래스, 메소드, 필드 등을 파악하며, 난독문자를 삽입할 클래스, 메소드, 필드 등의 식별자를 선택할 수 있다.
그리고 제어부(130)는 바이트코드에 삽입할 난독문자의 종류, 개수 및 삽입위치를 선택한다(S230).
이때 난독문자는 시스템은 서로 다른 유니코드 값을 갖는 개별 문자로 인식하지만, 일반 텍스트 에디터에서는 null 값으로 표현이 되거나 다른 유니코드 값을 갖는 문자와 동일하게 표현되는 문자를 의미한다. 따라서 난독문자는 헥사 에디터와 같은 바이너리를 대상으로 하는 에디터를 이용하여야 문자의 식별이 가능하다.
UTF -8 값 | 문자 표현 |
0xC2AD | (Invisible) |
... | ... |
0xD7BA | ? |
0xD7BB | ? |
0xD7BC | ? |
0xD7BD | ? |
... | ... |
표 1에 나타낸 것처럼, 윈도우에서 Alt+0173, UTF에서 0xC2AD와 같이 일반 텍스트 에디터에서는 표현되지 않지만 바이너리를 대상으로 하는 에디터에서는 소프트 하이픈으로 출력되는 경우, 해당 문자를 난독문자로 사용한다.
또한 표 1과 같이, 복수의 코드 값에 대응하는 문자가 모두 ?로 표현이 되어 표현된 문자로는 해당 문자의 코드 값이 어떤 것인지 식별이 불가능한 경우, 해당 문자를 난독문자로 사용할 수 있다. 즉, 난독문자로 ?를 사용함으로써 공격자가 해당 난독문자의 코드 값이 0xD7BA, 0xD7BB, 0xD7BC, 0xD7BD 중에서 어떠한 값인지 smali 코드상에서는 식별이 불가능하도록 한다.
또한 제어부(130)는 난독문자의 종류와 함께 바이트코드의 식별자에 삽입할 난독문자의 개수, 삽입할 위치 등을 결정한다.
적용 전 | g | e | t | S | e | c | r | e | t | ||
0x67 | 0x65 | 0x74 | 0x53 | 0x65 | 0x63 | 0x72 | 0x65 | 0x74 | |||
적용 1 | g | e | t | S | e | c | r | e | t | ||
0x67 | 0x65 | 0x74 | 0x53 | 0xC2 | 0xAD | 0x65 | 0x63 | 0x72 | 0x65 | 0x74 | |
적용 2 | g | e | t | S | e | c | r | e | t | ||
0x67 | 0x65 | 0x74 | 0x53 | 0x65 | 0x63 | 0x72 | 0x65 | 0x74 | 0xC2 | 0xAD |
표 2에 나타낸 것처럼, getSecret라는 메소드명에 null 값으로 표현되는 난독문자인 0xC2AD를 삽입하려는 경우, 제어부(130)는 적용1과 같이 메소드명의 중간에 난독문자를 삽입하거나, 적용2와 같이 메소드명의 마지막에 난독문자를 삽입하도록 삽입 위치를 결정할 수 있다.
제어부(130)는 코드 분석부(120)가 난독문자를 삽입할 대상으로 선택한 클래스명, 메소드명, 필드명 중에서 어느 위치에 어떤 난독문자를 몇 개 삽입할 지 결정한다.
적용 전 | g | e | t | S | e | c | r | e | t | ||
0x67 | 0x65 | 0x74 | 0x53 | 0x65 | 0x63 | 0x72 | 0x65 | 0x74 | |||
적용 3 | g | e | t | S | e | c | r | e | t | ? | |
0x67 | 0x65 | 0x74 | 0x53 | 0x65 | 0x63 | 0x72 | 0x65 | 0x74 | 0xD7 | 0xBA | |
적용 4 | g | e | t | S | e | c | r | e | t | ? | |
0x67 | 0x65 | 0x74 | 0x53 | 0x65 | 0x63 | 0x72 | 0x65 | 0x74 | 0xD7 | 0xBB |
또한, 제어부(130)는 코드 값의 식별이 불가능한 난독문자인 0xD7BA, 0xD7BB와 같은 난독문자를 선택할 수도 있다. 적용3 및 적용4와 같이 동일하게 ?로 표현이 되지만, 실제 난독문자의 코드 값은 상이하도록 제어부(130)는 삽입할 난독문자의 코드 값을 선택한다.
다음으로, 식별자 변환부(140)는 선택된 난독문자를 바이트코드에 삽입하여 바이트코드의 식별자를 변환시킨다(S240). 식별자 변환부(140)는 S220 단계에서 코드 분석부(120)가 선택한 바이트코드의 식별자에 S230 단계에서 제어부(130)가 선택한 난독문자를 삽입하여 바이트코드의 식별자를 변환시킨다.
그리고 도 3에 나타낸 것처럼 식별자 변환이 완료되면 식별자 변환부(140)는 바이트코드 구조를 재빌드하여 식별자가 변환된 DEX 파일을 생성한다.
또한 본 발명의 실시예에 따른 코드 난독화 장치(100)는 S240 단계에서 식별자가 변환된 바이트코드에 프로가드(Proguard), 덱스가드(Dexguard), Allatori, Stringer Java Obfuscator 등의 난독화 솔루션을 이용하여 추가적으로 난독화 기법을 적용할 수 있다.
또한, 코드 난독화 장치(100)는 소스코드 난독화 또는 바이너리 난독화를 추가적으로 적용할 수 있다. 특히 흐름 제어(control flow), 문자열 암호화(string encryption), API 은닉(API hiding)과 클래스 암호화(class encryption)를 적용할 수 있다.
흐름 제어는 파악하기 힘든 불투명 명령 또는 쓰레기 명령을 삽입하여 역공학시 제어흐름 분석을 어렵게 하거나 잘못된 결과를 발생시키는 기법을 의미하고, 문자열 암호화는 특정 문자열을 암호화하고 실행시 복호화 메소드로 복원하여 사용하는 방법이다. 그리고 API 은닉은 민감한 라이브러리 및 메소드 호출을 감추는 기법이며, 클래스 암호화는 특정 클래스 파일 자체를 암호화하고 실행시 복호화하는 기법을 의미한다.
또한 코드 난독화 장치(100)는 구획 난독화(layout obfuscation), 데이터 난독화(data obfuscation), 집합 난독화(aggregation obfuscation), 제어난독화(control obfuscation)를 적용할 수 있다.
도 4는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법의 역공학 분석 저항성 증가 효과를 설명하기 위한 도면이다.
도 4에 나타낸 것처럼, 난독화 기법을 적용하지 않은 경우 공격자는 APK 파일을 apktool을 이용하여 디컴파일하여 달빅 바이트코드로 작성된 smali 코드를 획득하고, smali 코드를 파싱한다. 그리고 smali 코드의 코드를 수정한 후 apktool을 이용하여 재컴파일한다. 그리고 apktool을 이용하여 공격자의 서명으로 리패키징한 후, 리패키징된 APK 파일을 배포할 수 있다. 이러한 과정을 통하여 공격자는 위변조 된 응용 프로그램을 생성하고, 이를 유포하여 보안을 위협한다.
그러나 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법을 적용하면, 공격자가 apktool을 이용하여 APK 파일을 디컴파일 한 후 smali 코드를 획득하여도 육안으로 smali 코드를 분석할 수 없어 smali 코드 분석에 소요되는 시간을 증가시킬 수 있다.
공격자는 smali 코드를 육안으로 분석할 수 없으므로 헥사 에디터와 같은 바이너리를 대상으로 하는 에디터를 이용하여 수작업으로 Hex 값을 직접 확인하여 코드를 분석하여야 한다. 즉 기존의 정적 분석 역공학 공격 도구를 이용하여 식별자가 변환된 smali 코드를 분석할 수 없으므로 코드 분석에 소요되는 시간 및 비용이 증가한다.
이와 같이 본 발명의 실시예에 따르면, 화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되는 난독문자를 이용하여 식별자를 변환함으로써 정적 분석 기반의 역공학 저항성을 증가시킬 수 있다.
또한, 서로 다른 유니코드 값을 갖지만 동일하게 표현되는 난독문자를 이용하여 공격자의 혼란을 야기함으로써 역공학 분석 저항성을 강화할 수 있으며, 역공학 공격시, 바이너리 파일 분석 능력을 필요로 하므로 역공학 분석 저항성을 증가시킬 수 있다.
또한, 응용 프로그램에 난독화 기술을 적용하여 응용 프로그램의 분석으로 인한 기술 유출 및 응용 프로그램의 위변조를 방지하고, 응용 프로그램을 각종 보안 공격으로부터 보호할 수 있다.
이상에서 본 발명의 바람직한 실시예에 대하여 상세하게 설명하였지만 본 발명의 권리범위는 이에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변형 및 개량 형태 또한 본 발명의 권리범위에 속하는 것이다.
100 : 코드 난독화 장치 110 : 추출부
120 : 코드분석부 130 : 제어부
140 : 식별자 변환부
120 : 코드분석부 130 : 제어부
140 : 식별자 변환부
Claims (8)
- 응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 추출부,
상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 코드분석부,
난독문자의 종류, 개수 및 삽입위치를 선택하는 제어부, 그리고
상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 식별자 변환부를 포함하며,
상기 난독문자는,
화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되되 서로 다른 유니코드 값을 가지는 문자를 나타내는 식별자 변환을 이용한 코드 난독화 장치. - 제1항에 있어서,
상기 추출부는,
상기 응용 프로그램 파일을 압축 해제하여 DEX 파일의 바이트코드를 추출하는 식별자 변환을 이용한 코드 난독화 장치. - 삭제
- 제1항에 있어서,
상기 식별자 변환부는,
상기 바이트코드의 클래스명, 메소드명, 필드명 중에서 적어도 하나에 상기 난독문자를 삽입하는 식별자 변환을 이용한 코드 난독화 장치. - 코드 난독화 장치를 이용한 응용 프로그램의 코드 난독화 방법에 있어서,
응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 단계,
상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 단계,
난독문자의 종류, 개수 및 삽입위치를 선택하는 단계, 그리고
상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 단계를 포함하며,
상기 난독문자는,
화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되되 서로 다른 유니코드 값을 가지는 문자를 나타내는 식별자 변환을 이용한 코드 난독화 방법. - 제5항에 있어서,
상기 달빅 실행 파일을 추출하는 단계는,
상기 응용 프로그램 파일을 압축 해제하여 DEX 파일의 바이트코드를 추출하는 식별자 변환을 이용한 코드 난독화 방법. - 삭제
- 제5항에 있어서,
상기 식별자를 변환시키는 단계는,
상기 바이트코드의 클래스명, 메소드명, 필드명 중에서 적어도 하나에 상기 난독문자를 삽입하는 식별자 변환을 이용한 코드 난독화 방법.
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020150002933A KR101521765B1 (ko) | 2015-01-08 | 2015-01-08 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
PCT/KR2015/002197 WO2016111413A1 (ko) | 2015-01-08 | 2015-03-06 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
JP2016527352A JP2017513077A (ja) | 2015-01-08 | 2015-03-06 | 見分けが難解な識別子変換を用いたコード難読化装置及び方法 |
US15/104,310 US20160371473A1 (en) | 2015-01-08 | 2015-03-06 | Code Obfuscation Device Using Indistinguishable Identifier Conversion And Method Thereof |
EP15858115.7A EP3133518B1 (en) | 2015-01-08 | 2015-03-06 | Apparatus and method for code obfuscation using indistinguishable identifier conversion |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020150002933A KR101521765B1 (ko) | 2015-01-08 | 2015-01-08 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR101521765B1 true KR101521765B1 (ko) | 2015-05-20 |
Family
ID=53395115
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020150002933A KR101521765B1 (ko) | 2015-01-08 | 2015-01-08 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20160371473A1 (ko) |
EP (1) | EP3133518B1 (ko) |
JP (1) | JP2017513077A (ko) |
KR (1) | KR101521765B1 (ko) |
WO (1) | WO2016111413A1 (ko) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105426708A (zh) * | 2016-01-19 | 2016-03-23 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
KR101710796B1 (ko) * | 2015-08-24 | 2017-02-28 | 숭실대학교산학협력단 | 난독화된 모바일 애플리케이션의 식별자 역난독화 장치 및 그 방법 |
CN113656765A (zh) * | 2021-08-17 | 2021-11-16 | 平安国际智慧城市科技股份有限公司 | java程序安全处理方法、装置、计算机设备及存储介质 |
WO2022107957A1 (ko) * | 2020-11-18 | 2022-05-27 | 숭실대학교 산학협력단 | 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치 |
KR20220096589A (ko) * | 2020-12-31 | 2022-07-07 | 충남대학교산학협력단 | 중간언어를 활용한 바이너리 프로그램 난독화 시스템 및 그 방법 |
KR20220141490A (ko) * | 2021-04-13 | 2022-10-20 | 네이버클라우드 주식회사 | 바이너리 파일 재구성 방법 및 그 장치 |
KR20230033350A (ko) * | 2021-09-01 | 2023-03-08 | 숭실대학교산학협력단 | 애플리케이션 코드 은닉 장치, 애플리케이션 코드 은닉 방법 및 애플리케이션 코드 은닉 방법을 실행시키도록 기록매체에 저장된 컴퓨터 프로그램 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10394554B1 (en) * | 2016-09-09 | 2019-08-27 | Stripe, Inc. | Source code extraction via monitoring processing of obfuscated byte code |
CN107861949B (zh) * | 2017-11-22 | 2020-11-20 | 珠海市君天电子科技有限公司 | 文本关键词的提取方法、装置及电子设备 |
CN108733379B (zh) * | 2018-05-28 | 2022-04-08 | 常熟理工学院 | 基于dex字节码抽离映射混淆的安卓应用加固方法 |
CN110502874B (zh) * | 2019-07-19 | 2021-05-25 | 西安理工大学 | 一种基于文件自修改的Android App加固方法 |
CN111143789B (zh) * | 2019-12-05 | 2023-07-25 | 深圳市任子行科技开发有限公司 | 一种apk资源文件的混淆方法和装置 |
KR102355235B1 (ko) | 2020-10-15 | 2022-02-07 | 주식회사 디알엠인사이드 | 웹 브라우저 기반 컨텐츠의 보안을 위한 서비스 제공 방법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070256061A1 (en) * | 2006-04-26 | 2007-11-01 | 9Rays.Net, Inc. | System and method for obfuscation of reverse compiled computer code |
KR20120006288A (ko) * | 2010-07-12 | 2012-01-18 | 엔에이치엔(주) | 자바스크립트의 소스 코드 보호를 위해 난독화를 하기 위한 방법, 시스템 및 컴퓨터 판독 가능한 기록 매체 |
KR20140114769A (ko) * | 2013-03-15 | 2014-09-29 | 주식회사 에스이웍스 | 안드로이드에서의 dex파일 바이너리 난독화 방법 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100568228B1 (ko) * | 2003-05-20 | 2006-04-07 | 삼성전자주식회사 | 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치 |
CN102663285B (zh) * | 2012-03-21 | 2015-06-10 | 北京奇虎科技有限公司 | 一种apk病毒特征码的提取方法及装置 |
KR101328012B1 (ko) | 2013-08-12 | 2013-11-13 | 숭실대학교산학협력단 | 애플리케이션 코드 난독화 장치 및 그 방법 |
KR101350390B1 (ko) * | 2013-08-14 | 2014-01-16 | 숭실대학교산학협력단 | 코드 난독화 장치 및 그 방법 |
-
2015
- 2015-01-08 KR KR1020150002933A patent/KR101521765B1/ko active IP Right Grant
- 2015-03-06 WO PCT/KR2015/002197 patent/WO2016111413A1/ko active Application Filing
- 2015-03-06 US US15/104,310 patent/US20160371473A1/en not_active Abandoned
- 2015-03-06 JP JP2016527352A patent/JP2017513077A/ja active Pending
- 2015-03-06 EP EP15858115.7A patent/EP3133518B1/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070256061A1 (en) * | 2006-04-26 | 2007-11-01 | 9Rays.Net, Inc. | System and method for obfuscation of reverse compiled computer code |
KR20120006288A (ko) * | 2010-07-12 | 2012-01-18 | 엔에이치엔(주) | 자바스크립트의 소스 코드 보호를 위해 난독화를 하기 위한 방법, 시스템 및 컴퓨터 판독 가능한 기록 매체 |
KR20140114769A (ko) * | 2013-03-15 | 2014-09-29 | 주식회사 에스이웍스 | 안드로이드에서의 dex파일 바이너리 난독화 방법 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101710796B1 (ko) * | 2015-08-24 | 2017-02-28 | 숭실대학교산학협력단 | 난독화된 모바일 애플리케이션의 식별자 역난독화 장치 및 그 방법 |
CN105426708A (zh) * | 2016-01-19 | 2016-03-23 | 北京鼎源科技有限公司 | 一种Android系统的应用程序的加固方法 |
WO2022107957A1 (ko) * | 2020-11-18 | 2022-05-27 | 숭실대학교 산학협력단 | 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치 |
KR20220096589A (ko) * | 2020-12-31 | 2022-07-07 | 충남대학교산학협력단 | 중간언어를 활용한 바이너리 프로그램 난독화 시스템 및 그 방법 |
KR102524627B1 (ko) * | 2020-12-31 | 2023-04-24 | 충남대학교 산학협력단 | 중간언어를 활용한 바이너리 프로그램 난독화 시스템 및 그 방법 |
KR20220141490A (ko) * | 2021-04-13 | 2022-10-20 | 네이버클라우드 주식회사 | 바이너리 파일 재구성 방법 및 그 장치 |
KR102557007B1 (ko) * | 2021-04-13 | 2023-07-19 | 네이버클라우드 주식회사 | 바이너리 파일 재구성 방법 및 그 장치 |
CN113656765A (zh) * | 2021-08-17 | 2021-11-16 | 平安国际智慧城市科技股份有限公司 | java程序安全处理方法、装置、计算机设备及存储介质 |
KR20230033350A (ko) * | 2021-09-01 | 2023-03-08 | 숭실대학교산학협력단 | 애플리케이션 코드 은닉 장치, 애플리케이션 코드 은닉 방법 및 애플리케이션 코드 은닉 방법을 실행시키도록 기록매체에 저장된 컴퓨터 프로그램 |
KR102615080B1 (ko) * | 2021-09-01 | 2023-12-15 | 숭실대학교 산학협력단 | 애플리케이션 코드 은닉 장치, 애플리케이션 코드 은닉 방법 및 애플리케이션 코드 은닉 방법을 실행시키도록 기록매체에 저장된 컴퓨터 프로그램 |
Also Published As
Publication number | Publication date |
---|---|
US20160371473A1 (en) | 2016-12-22 |
EP3133518B1 (en) | 2019-08-28 |
EP3133518A4 (en) | 2018-01-03 |
JP2017513077A (ja) | 2017-05-25 |
EP3133518A1 (en) | 2017-02-22 |
WO2016111413A1 (ko) | 2016-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101521765B1 (ko) | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 | |
KR101545272B1 (ko) | 안드로이드에서의 dex파일 바이너리 난독화 방법 | |
EP2897072B1 (en) | Device for obfuscating code and method for same | |
RU2439669C2 (ru) | Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения | |
CN103544414B (zh) | 一种Android系统应用的深度代码混淆方法 | |
CN103413075B (zh) | 一种通过虚拟机保护java可执行程序的方法及设备 | |
KR101518420B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
CN105683990B (zh) | 用于保护动态库的方法和装置 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN108363911B (zh) | 一种Python脚本混淆、水印的方法及装置 | |
KR101623096B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
CN103413073B (zh) | 一种保护java可执行程序的方法及设备 | |
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
CN107908392B (zh) | 数据采集工具包定制方法、装置、终端和存储介质 | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
KR101920597B1 (ko) | 동적 코드 추출 기반 자동 분석 방지 우회 및 코드 로직 해석 장치 | |
CN107430650B (zh) | 保护计算机程序以抵御逆向工程 | |
EP3126973A1 (en) | Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine | |
CN104318135A (zh) | 一种基于可信执行环境的Java代码安全动态载入方法 | |
US20120096562A1 (en) | Method for protecting the source code of a computer program | |
Fu et al. | A watermark-aware trusted running environment for software clouds | |
Yoo et al. | String deobfuscation scheme based on dynamic code extraction for mobile malwares | |
EP2947590B1 (en) | Program code obfuscation based upon recently executed program code | |
EP3876119A1 (en) | Method for protecting a data in a software application | |
CN113282294A (zh) | 基于安卓平台Java字符串混淆的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20180409 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20190401 Year of fee payment: 5 |