KR101521765B1 - 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 - Google Patents

분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 Download PDF

Info

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
Application number
KR1020150002933A
Other languages
English (en)
Inventor
이정현
김성룡
나건배
박용진
Original Assignee
숭실대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 숭실대학교산학협력단 filed Critical 숭실대학교산학협력단
Priority to KR1020150002933A priority Critical patent/KR101521765B1/ko
Priority to PCT/KR2015/002197 priority patent/WO2016111413A1/ko
Priority to JP2016527352A priority patent/JP2017513077A/ja
Priority to US15/104,310 priority patent/US20160371473A1/en
Priority to EP15858115.7A priority patent/EP3133518B1/en
Application granted granted Critical
Publication of KR101521765B1 publication Critical patent/KR101521765B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/106Enforcing content protection by specific content processing
    • G06F21/1066Hiding 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

분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법{Apparatus For Code Obfuscation Using Indistinguishable Identifier Conversion and Method Thereof}
본 발명은 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법에 관한 것으로서, 더욱 상세하게는 역공학 공격으로부터 응용 프로그램을 보호하는 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법에 관한 것이다.
자바 프로그램은 바이트 코드 형태로 번역되며, 바이트 코드는 특정 기계에 종속되지 않은 자바가상머신(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는 본 발명의 실시예에 따른 식별자 변환을 이용한 코드 난독화 방법의 역공학 분석 저항성 증가 효과를 설명하기 위한 도면이다.
그러면 첨부한 도면을 참고로 하여 본 발명의 실시예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
이하 첨부된 도면을 참조하면서 본 발명에 따른 바람직한 실시예를 상세히 설명하기로 한다.
도 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 : 식별자 변환부

Claims (8)

  1. 응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 추출부,
    상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 코드분석부,
    난독문자의 종류, 개수 및 삽입위치를 선택하는 제어부, 그리고
    상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 식별자 변환부를 포함하며,
    상기 난독문자는,
    화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되되 서로 다른 유니코드 값을 가지는 문자를 나타내는 식별자 변환을 이용한 코드 난독화 장치.
  2. 제1항에 있어서,
    상기 추출부는,
    상기 응용 프로그램 파일을 압축 해제하여 DEX 파일의 바이트코드를 추출하는 식별자 변환을 이용한 코드 난독화 장치.
  3. 삭제
  4. 제1항에 있어서,
    상기 식별자 변환부는,
    상기 바이트코드의 클래스명, 메소드명, 필드명 중에서 적어도 하나에 상기 난독문자를 삽입하는 식별자 변환을 이용한 코드 난독화 장치.
  5. 코드 난독화 장치를 이용한 응용 프로그램의 코드 난독화 방법에 있어서,
    응용 프로그램 파일을 압축 해제하여 달빅 실행 파일을 추출하는 단계,
    상기 추출된 달빅 실행 파일의 바이트코드를 분석하는 단계,
    난독문자의 종류, 개수 및 삽입위치를 선택하는 단계, 그리고
    상기 선택된 난독문자를 상기 바이트코드에 삽입하여 상기 바이트코드의 식별자를 변환시키는 단계를 포함하며,
    상기 난독문자는,
    화면상에 표현되지 않거나 다른 문자와 동일한 문자로 표현되되 서로 다른 유니코드 값을 가지는 문자를 나타내는 식별자 변환을 이용한 코드 난독화 방법.
  6. 제5항에 있어서,
    상기 달빅 실행 파일을 추출하는 단계는,
    상기 응용 프로그램 파일을 압축 해제하여 DEX 파일의 바이트코드를 추출하는 식별자 변환을 이용한 코드 난독화 방법.
  7. 삭제
  8. 제5항에 있어서,
    상기 식별자를 변환시키는 단계는,
    상기 바이트코드의 클래스명, 메소드명, 필드명 중에서 적어도 하나에 상기 난독문자를 삽입하는 식별자 변환을 이용한 코드 난독화 방법.
KR1020150002933A 2015-01-08 2015-01-08 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 KR101521765B1 (ko)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 숭실대학교산학협력단 코드 난독화 장치 및 그 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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