KR20140114769A - 안드로이드에서의 dex파일 바이너리 난독화 방법 - Google Patents
안드로이드에서의 dex파일 바이너리 난독화 방법 Download PDFInfo
- Publication number
- KR20140114769A KR20140114769A KR1020140030168A KR20140030168A KR20140114769A KR 20140114769 A KR20140114769 A KR 20140114769A KR 1020140030168 A KR1020140030168 A KR 1020140030168A KR 20140030168 A KR20140030168 A KR 20140030168A KR 20140114769 A KR20140114769 A KR 20140114769A
- Authority
- KR
- South Korea
- Prior art keywords
- file
- dex
- instruction
- apk
- dex file
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 95
- 238000006243 chemical reaction Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012857 repacking Methods 0.000 description 2
- 235000020289 caffè mocha Nutrition 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 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
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
Abstract
본 발명은 Method를 분할하고 위치를 변경하는 제어 흐름 변환을 통해 APK파일의 실행코드인 DEX파일을 역컴파일과 같은 툴을 이용하여 풀지 못하도록 수정한다. 이를 위해 APK파일을 압축 해제하여 DEX파일을 추출하는 단계; 추출된 DEX 파일내의 복수의 각 Method 내에 디컴파일링을 방해하기 위한 하나 이상의 명령어를 추가하는 단계; 복수의 각 Method를 분할하고 위치를 변경하는 단계; APK파일로 리패키징하는 단계; 및 상기 APK파일의 정상적인 실행을 위하여 서명(Sign)하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법을 제공한다.
Description
본 발명은 안드로이드에서의 DEX(Dalvix Executable)파일 바이너리 난독화 방법에 관한 것으로, 보다 상세하게는 APK파일의 실행코드인 DEX파일을 역컴파일러와 같은 툴을 이용하여 풀지 못하도록 수정하는 안드로이드에서의 DEX파일 바이너리 난독화 방법에 관한 것이다.
스마트폰을 비롯한 다양한 모바일 기기 보급이 급속도로 증가하고 있고, 이들 기기에 저장된 각종 개인정보에 대한 불법적 접근을 노리는 악성 앱들로 인한 피해가 발생하고 있다. 이들 위변조 앱 출현의 원인 중의 하나는 앱 실행파일의 역컴파일이 쉽기 때문이다. 앱 역컴파일이 쉽게 이루어지지 않도록 하기 위한 기술 중의 하나가 코드 난독화 기술이다.
역컴파일(decompile)이란 이미 컴파일된 기계어나 어셈블러 부호로부터 컴파일 전의 본래 소스 코드를 추출해 내는 프로그램이다. 기계어 부호와 고수준 언어의 원시 부호는 서로 대응되지 않는 경우가 많으므로 역컴파일 작업이 매우 어렵다. 델파이용 역컴파일러로는 디디(DeDe:Delphi decompiler)가 있으며 자바(Java)용 역컴파일러는 자스민(Jasmine), 자드(Jad), 모카(Mocha) 등 다양하다.
특히, 자바는 컴파일하면 class 확장자의 실행파일이 생성되며 이를 JVM(Java Virtual Machine)이 해석해주는 역할을 하고, 안드로이드는 Dalvik VM(Dalvik Virtual Machine)이 APK(Android application package)파일의 압축을 해제하고 DEX(Dalvik Executable)파일을 실행파일로 사용하고 있다.
일반적으로 안드로이드의 실행파일인 APK는 ZIP 파일 포맷에 기반을 두어 아래의 [표1]과 같은 구조를 가지고 있다.
파일명 | 설명 |
AndroidManifest.xml. | APK 실행 파일의 전체적인 구조, 그리고 부가적인 권한 설정이나 기능을 사용하는 class를 명시한다. |
Classes.dex. | Android의 실행 코드가 저장되어 있다. |
META-INF | 인증된 키값이 저장된 폴더 |
res | 그래픽과 관련된 이미지 및 레이아웃 |
lib | Dalvik를 이용하지 않는 SO(Shared Object) 라이브러리 |
개발자가 컴파일시 java 소스 코드는 Dalvik VM이 해석할 수 있는 바이트코드로 변환되어 classes.dex 파일로 저장된다.
도 1 내지 도 3은 종래의 역컴파일을 통해 classes.dex파일이 java파일로 역컴파일되는 과정의 예를 나타낸 도면이다.
classes.dex.파일은 먼저 dex파일을 class로 만들고 그것을 다시 java파일로 역컴파일하는 과정을 거치게 된다.
도 1에 도시된 바와 같이, 역컴파일을 통하여 class파일로 변경하면 해당 클래스 파일이 도 2와 같이 나타나게 된다. 이후 class를 일반적인 자바 역컴파일러인 JD를 통하여 역컴파일하면 도 3과 같이 실행파일에서 추출한 소스를 확인할 수 있다.
이렇듯, 안드로이드는 기존의 JAVA와 비슷한 언어인 Dalvik을 이용하여 사용되기 때문에 역컴파일에 노출이 쉽다는 단점이 있다.
이러한 단점을 파고들어서 최근에는 여러가지 역컴파일 관련 툴들이 쏟아져 나오고 있는데 dex2jar과 같은 툴들이 그 예이다. 이에 따라 역컴파일을 방어하기 위한 난독화 기술이 절실해지고 있다.
기존의 안드로이드 난독화 기술은 메소드와 클래스를 a1, b1과 같이 알아보기 어렵도록 수정하는 정도의 소스코드 난독화 기능 정도 밖에 없다.
[특허문헌]
특허공개 제10-2012-0126920 “JNI를 이용한 안드로이드 난독화 방법”(2012. 11 21. 공개)
따라서, 본 발명은 상술한 문제점을 해결하기 위한 것으로, 본 발명의 목적은 각 Method를 분할하고 위치를 변경하는 제어 흐름 변환을 통해 APK파일의 실행코드인 DEX파일을 역컴파일과 같은 툴을 이용하여 풀지 못하도록 수정하는 안드로이드에서의 DEX파일 바이너리 난독화 방법을 제공하는 데 있다.
상기한 본 발명의 목적은, APK파일의 실행코드인 DEX파일을 해독하지 못하도록 하기 위한 안드로이드에서의 DEX파일 바이너리 난독화 방법에 있어서, APK파일을 압축 해제하여 DEX파일을 추출하는 단계; 추출된 DEX파일내의 복수의 각 Method 내에 디컴파일링을 방해하기 위한 하나 이상의 명령어를 추가하는 단계; 복수의 각 Method를 분할하고 위치를 변경하는 단계; APK파일로 리패키징하는 단계; 및 상기 APK파일의 정상적인 실행을 위하여 서명(Sign)하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법을 통해서 달성된다.
또한 본 발명에 따르면, 상기 하나 이상의 명령어를 추가하는 단계는, DEX파일의 각 Method에 실행에 영향을 주지 않는 제1 명령어를 삽입하는 단계; 상기 제1 명령어가 포함된 DEX파일을 실행하는 단계; 및 상기 제1 명령어의 삽입으로 생성된 방해 공간에 디컴파일링을 방해하는 방해 코드인 제2 명령어를 삽입하는 단계를 포함하는 것을 특징으로 한다.
또한 본 발명에 따르면, 상기 복수의 각 Method를 분할하고 위치를 변경하는 단계는, 복수의 각 Method를 분할하는 단계; 상기 분할된 각 Method의 길이를 계산하여 위치를 변경하는 단계; 및 상기 위치가 변경된 각 Method가 끝날 때마다 이동 명령어를 정확히 삽입하여 앱 실행이 정상적으로 진행되도록 하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 안드로이드에서의 DEX파일 바이너리 난독화 방법에 의하면, 실행에는 영향을 주지 않도록 방해 코드를 넣고 Method 분할 및 위치를 변경한 후 APK파일로 리패키징을 하여, 디컴파일러를 교란시키는 제어 흐름 변환을 통해 APK파일의 실행코드인 DEX파일을 역컴파일과 같은 툴로는 풀지 못하도록 하는 효과가 있다.
도 1 내지 도 3은 종래의 역컴파일을 통해 classes.dex파일이 java파일로 역컴파일되는 과정의 예를 나타낸 도면.
도 4는 본 발명의 실시예에 따른 APK파일의 난독화 과정을 나타낸 흐름도.
도 5는 본 발명의 실시예에 따른 APK파일의 난독화를 위한 특정 명령어를 추가하는 과정을 나타낸 흐름도.
도 6은 본 발명의 실시예에 따른 복수의 각 Method를 분할하여 위치를 변경하는 과정을 나타낸 흐름도.
도 7은 본 발명의 실시예에 따른 난독화 적용 후 분할되어 재배치된 각 Method의 진행 흐름의 예를 나타낸 도면.
도 8a 및 8b는 본 발명의 실시예에 따른 난독화 후 Apktool툴의 분해 결과를 나타낸 도면.
도 9a 및 9b는 본 발명의 실시예에 따른 난독화 후 Dex2jar 툴을 통해 역컴파일된 결과를 나타낸 도면.
도 10은 본 발명의 일 실시예에 따른 안드로이드에서의 DEX파일 바이너리 난독화 장치를 나타내는 도면.
도 4는 본 발명의 실시예에 따른 APK파일의 난독화 과정을 나타낸 흐름도.
도 5는 본 발명의 실시예에 따른 APK파일의 난독화를 위한 특정 명령어를 추가하는 과정을 나타낸 흐름도.
도 6은 본 발명의 실시예에 따른 복수의 각 Method를 분할하여 위치를 변경하는 과정을 나타낸 흐름도.
도 7은 본 발명의 실시예에 따른 난독화 적용 후 분할되어 재배치된 각 Method의 진행 흐름의 예를 나타낸 도면.
도 8a 및 8b는 본 발명의 실시예에 따른 난독화 후 Apktool툴의 분해 결과를 나타낸 도면.
도 9a 및 9b는 본 발명의 실시예에 따른 난독화 후 Dex2jar 툴을 통해 역컴파일된 결과를 나타낸 도면.
도 10은 본 발명의 일 실시예에 따른 안드로이드에서의 DEX파일 바이너리 난독화 장치를 나타내는 도면.
본 명세서 및 청구범위에 사용된 용어나 단어는 통상적이거나 사전적인 의미로 한정해서 해석되어서는 아니되며, 발명자는 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원칙에 입각하여 본 고안의 기술적 사상에 부합하는 의미와 개념으로 해석되어야만 한다.
따라서, 본 명세서에 기재된 실시예와 도면에 도시된 구성은 본 발명의 가장 바람직한 일 실시예에 불과할 뿐이고 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형예들이 있을 수 있음을 이해하여야 한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.
바이너리 난독화는 난독화 대상이 컴파일된 바이너리일 경우를 의미하며 바이너리가 컴파일된 환경에 따라 Managed code와 Native code로 분류된다.
Managed code를 Java, C# 등이 컴파일된 바이너리로서, CPU 명령어 체계로 컴파일되지 않고 중간언어(intermediate language)로 컴파일 되는 바이너리를 지칭한다.
이 경우 컴파일된 파일의 구조가 Native code 보다 역공학에 필요한 유용한 정보를 많이 포함하고 있어 상대적으로 공격자가 역공학 분석을 용이하게 할 수 있다.
Native code는 반대로 C, C++ 등의 코드를 바로 CPU명령어 체계로 컴파일한 바이너리를 지칭하며 컴파일된 파일에는 상대적으로 적은 정보를 가지고 있다.
도 4는 본 발명의 실시예에 따른 APK파일의 난독화 과정을 나타낸 흐름도이고, 도 5는 본 발명의 실시예에 따른 APK파일의 난독화를 위한 특정 명령어를 추가하는 과정을 나타낸 흐름도이고, 도 6은 본 발명의 실시예에 따른 복수의 각 Method를 분할하고 위치를 변경하는 과정을 나타낸 흐름도이다.
도 4를 참조하면, APK파일의 실행코드인 DEX파일을 해독하지 못하도록 하기 위한 안드로이드에서의 DEX파일 바이너리 난독화 방법은 DEX파일을 추출하는 단계(S100), DEX파일내의 복수의 각 Method에 디컴파일링을 방해하기 위한 특정 명령어를 추가하는 단계(S200), 복수의 각 Method를 분할하고 위치를 변경하는 단계(S300), APK파일로 리패키징하는 단계(S400) 및 서명(Sign) 단계(S500)를 포함한다.
상기 DEX파일 추출 단계(S100)는 APK파일을 압축 해제하여 DEX파일을 추출하는 과정이다. DEX파일 내에는 복수의 Method들이 포함된다.
상기 특정 명령어 추가 단계(S200)는 실행파일이 디컴파일링을 위한 상용 툴들에 의해 디컴파일되지 않도록 복수의 각 Method 내에 디컴파일링을 방해하기 위한 특정 명령어를 삽입하는 과정이다.
상기 분할 및 위치변경 단계(S300)는 복수의 각 Method를 분할하고 분할된 각 Method의 위치를 변경하는 과정이다. 즉, 난독화를 위해 복수의 각 Method들 하나 하나를 각각 분할하여 위치를 변경한다. 예를 들어, A라는 Method는 A'와 A"의 하위 Method들로 분할될 수 있다. 하나의 Method가 복수의 하위 Method들로 분할되어 위치가 변경되면, 실행 파일내의 해당 Method의 물리적 위치가 변경되어, 실행 코드가 변경되게 된다. 메소드의 분할 및 위치 변경을 통해서 분석 툴 혹은 분석자가 정상적인 프로그램의 흐름을 알아내기 어렵게 된다.
상기 리패키징 단계(S400)는 단계 S200 및 단계 S300에 의해 변경된 DEX파일을 APK파일로 재생성하기 위하여 리패키징하는 과정이고, 상기 서명(Sign) 단계(S500)는 APK파일의 정상적인 실행을 위하여 서명하는 과정이다.
좀더 상세히 설명하면, 도 5 및 도 6에서와 같이, 상기 특정 명령어를 추가하는 단계(S200)는 안드로이드 실행파일이 상용 툴들에 의해 디컴파일 되지 않도록 복수의 각 Method 내에 하나 이상의 특정 명령어를 삽입하는 것이다.
DEX파일의 각 Method에 실행에 영향을 주지 않는 제1 명령어를 삽입하는 단계(S202)와, 상기 제1 명령어가 포함된 DEX 파일을 실행하는 단계(S204) 및 제1 명령어의 삽입으로 생성된 공간에 디컴파일링을 방해하기 위한 방해 코드인 제2 명령어를 삽입하는 단계(S206)로 진행된다.
DALVIK VM은 VM 자체적으로 제공하는 명령어들을 인터프리팅하는데, 이는 한번 실행된 명령의 결과는 메모리에 상주됨을 의미한다. 즉 이미 실행된 명령어를 동적으로 변경해도 결과에 아무런 영향을 미치지 않는다. 본 발명의 일 실시예에 따르면, 실행에 영향을 주지 않는 제1 명령어를 복수의 각 Method에 삽입한다(S202). 제1 명령어는 NOP(No operation) 명령어일 수 있다. 제1 명령어가 포함된 DEX 파일을 실행하여(S204), 소정의 공간을 생성한다. 소정의 공간은 이후 삽입될 방해 코드인 제2 명령어가 삽입되는 공간이므로 방해 공간이라고 부를 수 있다. 제2 명령어는 난독화를 위한 하나 이상의 명령어 군(set)일 수 있다. 해당 제1 명령어를 포함한 DEX 파일이 실행된 후 마련된 소정의 공간에 DEX파일이 디컴파일되지 않도록 디컴파일링을 방해하기 위한 방해 코드인 제2 명령어를 삽입한다(S206). 제2 명령어는 디컴파일러들이 해독하지 못하는 명령어이므로, 이와 같은 난독화 과정을 통해 디컴파일러를 교란시키게 된다.
상기 분할 및 위치변경 단계(S300)는 복수의 Method의 위치를 메소드의 길이 계산을 이용하여 진행하고 메소드가 끝날 때마다 이동 명령어를 정확히 넣어 앱 실행이 정상적으로 진행되도록 하기 위한 것이다. 이를 위해, 복수의 각 Method가 분할된다(S302). 하나의 Method는 복수의 하위 Method들로 분할될 수 있으며, 다양한 방법으로 분할될 수 있다. 분할된 각 Method의 길이가 계산되고, 분할된 각 Method의 위치를 변경한다(S304). 그런 다음, 계산된 각 Method의 길이에 기초하여, 상기 위치가 변경된 각 Method가 끝날 때마다 이동 명령어(예를 들어, goto 명령어)를 정확히 넣어 앱 실행이 정상적으로 진행되도록하는 이동 명령어 삽입 단계(S306)로 진행된다.
도 7은 본 발명의 실시예에 따른 난독화 적용 후 분할되어 재배치된 Method의 진행흐름의 예를 나타낸 도면이다.
도 7에서, Method 1, Method 2 및 Method 3은 단계 S 302를 통해 하나의 Method가 분할되어 생성된 복수의 하위 Method들을 나타낸다. 도 7에 도시된 바와 같이, Method 1, Method 2 및 Method3는 일 실시예에 따른 난독화를 적용받아서 위치가 변경된다. 그런 다음, 가상머신을 제공하는 이동 명령어로서 바이트코드 명령어인 goto를 이용하여 제어 흐름이 변경된다.
역컴파일된 소스코드는 자바소스코드 수준에서 표현하지 못하는 제어 흐름 때문에 오류를 포함하게 된다.
도 8a 및 도 8b는 본 발명의 실시예에 따른 난독화 후 Apktool툴의 분해 결과를 나타낸 도면이고, 도 9a 및 도 9b는 본 발명의 실시예에 따른 난독화 후 Dex2jar 툴을 통해 역컴파일된 결과를 나타낸 도면이다.
Apktool은 안드로이드 APK파일을 분해하거나 재패키징하는 데에 가장 많이 사용되는 툴이다. 그 중 DEX파일을 smali라는 코드로 변경하여 보여주는 기능이 포함되어 있다.
실제 코드를 분해하도록 명령을 내린 결과 도 8a과 같이 에러가 나타났다.
그리고, 에러가 포함된 실행파일은 생성되어 있으나 가장 중점인 smali 코드의 메소드 내부는 도 8a에서와 같이 변경 되어 분석이 어려운 것을 확인할 수 있다.
Dex2jar는 안드로이드 DEX파일을 역컴파일하기 쉬운 자바 패키지인 jar파일로 변경하는 툴이다. 실제로 변경 실행 결과 도 9a와 같이 에러가 나타났다.
마찬가지로 에러가 나타났지만 jar파일은 새로 생성되었는데 해당 자바 패키지 파일을 자바 실행파일 역컴파일에서 가장 많이 사용하는 jd 역컴파일툴로 이용하여 메소드를 확인하면 도 9b에서와 같이, RuntimeException이 발생하는 것을 확인 할 수 있었다.
도 10은 본 발명의 일 실시예에 따른 안드로이드에서의 DEX파일 바이너리 난독화 장치를 나타내는 도면이다.
DEX파일 바이너리 난독화 장치(100, 이하 난독화 장치라 함)는, DEX파일 추출부(110), 명령어 추가부(120), 분할 및 위치 변경부(130), 리패키징부(140) 및 서명부(150)를 포함한다.
DEX파일 추출부(110)는 APK파일을 입력받고, APK파일을 압축 해제하여 DEX파일을 추출한다.
명령어 추가부(120)는 추출된 DEX파일내의 복수의 각 Method 내에 디컴파일링을 방해하기 위한 하나 이상의 명령어를 추가한다. 명령어 추가부(120)는 도 5를 참조하여 설명한 바와 같이 디컴파일링을 방해하기 위한 방해 코드인 제2 명령어를 추가할 수 있다.
분할 및 위치 변경부(130)는 복수의 각 Method를 분할하여 위치를 변경한다. 분할 및 위치 변경부(130)는 도 6을 참조하여 설명한 바와 같은 과정을 수행할 수 있다.
리패키징부(140)는 명령어 추가 과정과, 각 Method의 분할 및 위치 변경 과정을 거친 DEX파일을 APK파일로 리패키징한다.
서명부(150)는 리패키징된 APK파일의 정상적인 실행을 위하여 서명(Sign)하여, 난독화된 APK파일을 출력한다.
상기와 같이, APK파일을 압축 해제하여 DEX파일을 추출하고, 실행파일이 상용 툴들에 의해 디컴파일되지 않도록 Method 내에 방해 코드를 삽입하고, Method를 분할하고 위치를 변경하고, APK파일로 재패키징하고, 파일의 정상적인 실행을 위해 sign하는 과정을 통해 실행에는 영향을 주지 않도록 리패키징을 하여 디컴파일러를 교란시킴으로써, APK파일의 실행코드인 DEX파일을 역컴파일할 수 없도록 하는 효과가 있다.
본 발명의 일 양상은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로서 구현될 수 있다. 상기의 프로그램을 구현하는 코드들 및 코드 세그먼트들은 당해 분야의 컴퓨터 프로그래머에 의하여 용이하게 추론될 수 있다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다. 컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 디스크 등을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드로 저장되고 실행될 수 있다.
이상의 설명은 본 발명의 일 실시예에 불과할 뿐, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명의 본질적 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현할 수 있을 것이다. 따라서, 본 발명의 범위는 전술한 실시예에 한정되지 않고 특허 청구범위에 기재된 내용과 동등한 범위 내에 있는 다양한 실시 형태가 포함되도록 해석되어야 할 것이다.
Claims (3)
- APK파일의 실행코드인 DEX파일을 해독하지 못하도록 하기 위한 안드로이드에서의 DEX파일 바이너리 난독화 방법에 있어서,
APK파일을 압축 해제하여 DEX파일을 추출하는 단계;
추출된 DEX파일내의 복수의 각 Method 내에 디컴파일링을 방해하기 위한 하나 이상의 명령어를 추가하는 단계;
복수의 각 Method를 분할하고 위치를 변경하는 단계;
APK파일로 리패키징하는 단계; 및
상기 APK파일의 정상적인 실행을 위하여 서명(Sign)하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법.
- 제 1항에 있어서,
상기 하나 이상의 명령어를 추가하는 단계는,
DEX파일의 각 Method에 실행에 영향을 주지 않는 제1 명령어를 삽입하는 단계;
상기 제1 명령어가 포함된 DEX 파일을 실행하는 단계; 및
상기 제1 명령어의 삽입으로 생성된 방해 공간에 디컴파일링을 방해하는 방해 코드인 제2 명령어를 삽입하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법.
- 제 1항에 있어서,
상기 복수의 각 Method를 분할하고 위치를 변경하는 단계는,
복수의 각 Method를 분할하는 단계;
상기 분할된 각 Method의 길이를 계산하여 위치를 변경하는 단계; 및
상기 위치가 변경된 각 Method가 끝날 때마다 이동 명령어를 정확히 삽입하여 앱 실행이 정상적으로 진행되도록 하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20130027954 | 2013-03-15 | ||
KR1020130027954 | 2013-03-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140114769A true KR20140114769A (ko) | 2014-09-29 |
KR101545272B1 KR101545272B1 (ko) | 2015-08-20 |
Family
ID=51537038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020140030168A KR101545272B1 (ko) | 2013-03-15 | 2014-03-14 | 안드로이드에서의 dex파일 바이너리 난독화 방법 |
Country Status (2)
Country | Link |
---|---|
KR (1) | KR101545272B1 (ko) |
WO (1) | WO2014142430A1 (ko) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101518420B1 (ko) * | 2014-11-11 | 2015-05-07 | 주식회사 에스이웍스 | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 |
KR101521765B1 (ko) * | 2015-01-08 | 2015-05-20 | 숭실대학교산학협력단 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
CN105740708A (zh) * | 2016-01-28 | 2016-07-06 | 博雅网信(北京)科技有限公司 | 一种基于Java反射机制的安卓应用自动脱壳方法 |
KR20160118920A (ko) * | 2015-04-04 | 2016-10-12 | 홍동철 | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 |
WO2017026739A1 (ko) * | 2015-08-10 | 2017-02-16 | 라인 가부시키가이샤 | 어플리케이션의 코드 난독화를 위한 시스템 및 방법 |
CN107402792A (zh) * | 2017-08-01 | 2017-11-28 | 广州视源电子科技股份有限公司 | 应用软件安装包的集成方法、装置、设备及存储介质 |
WO2020050455A1 (ko) * | 2017-11-16 | 2020-03-12 | 숭실대학교산학협력단 | 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법 |
CN111274551A (zh) * | 2019-12-30 | 2020-06-12 | 上海上讯信息技术股份有限公司 | 基于编译器的java代码保护方法、装置及电子设备 |
US10878086B2 (en) | 2017-11-16 | 2020-12-29 | Foundation Of Soongsil University-Industry Cooperation | Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus |
WO2023191557A1 (ko) * | 2022-04-01 | 2023-10-05 | (주)잉카엔트웍스 | Dex 파일 보호를 위한 보안 제공 장치와 방법 및 보안 실행 장치와 방법 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574000B (zh) * | 2014-10-08 | 2019-11-05 | 中兴通讯股份有限公司 | 扩展apk文件应用的方法及装置 |
CN108681457B (zh) * | 2018-05-11 | 2020-09-01 | 西北大学 | 基于代码下沉与残码解释的Android应用程序保护方法 |
CN108733379B (zh) * | 2018-05-28 | 2022-04-08 | 常熟理工学院 | 基于dex字节码抽离映射混淆的安卓应用加固方法 |
CN109543369B (zh) * | 2018-11-23 | 2022-03-25 | 杭州哲信信息技术有限公司 | 一种dex的保护方法 |
CN112394906B (zh) * | 2019-08-15 | 2022-10-25 | 华为技术有限公司 | 一种应用切换运行的方法及设备 |
KR102113966B1 (ko) | 2019-11-25 | 2020-05-21 | 숭실대학교산학협력단 | 분석회피기법 우회 장치, 방법 및 이를 수행하기 위한 프로그램을 기록한 기록매체 |
CN111427584A (zh) * | 2020-04-14 | 2020-07-17 | 北京达佳互联信息技术有限公司 | 可执行文件的生成方法、装置及设备 |
US11886589B2 (en) | 2020-11-26 | 2024-01-30 | Foundation Of Soongsil University-Industry Cooperation | Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2486482B1 (en) * | 2009-10-08 | 2018-02-28 | Irdeto B.V. | A system and method for aggressive self-modification in dynamic function call systems |
KR101234591B1 (ko) * | 2011-05-13 | 2013-02-19 | 주식회사 인프라웨어테크놀러지 | Jni를 이용한 안드로이드 난독화 방법 |
KR101265099B1 (ko) * | 2011-06-15 | 2013-05-20 | 주식회사 터보테크 | 소프트웨어 보안 처리방법 및 기록매체 |
KR101214893B1 (ko) | 2011-12-16 | 2013-01-09 | 주식회사 안랩 | 어플리케이션의 유사성 검출 장치 및 방법 |
CN102831342B (zh) * | 2012-07-28 | 2016-01-06 | 北京深思数盾科技有限公司 | 一种提高安卓***中应用程序保护强度的方法 |
-
2013
- 2013-12-24 WO PCT/KR2013/012054 patent/WO2014142430A1/ko active Application Filing
-
2014
- 2014-03-14 KR KR1020140030168A patent/KR101545272B1/ko active IP Right Grant
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9535942B2 (en) | 2014-11-11 | 2017-01-03 | SEWORKS, Inc. | Apparatus and method for managing APK file in an android platform |
KR101518420B1 (ko) * | 2014-11-11 | 2015-05-07 | 주식회사 에스이웍스 | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 |
KR101521765B1 (ko) * | 2015-01-08 | 2015-05-20 | 숭실대학교산학협력단 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
WO2016111413A1 (ko) * | 2015-01-08 | 2016-07-14 | 숭실대학교 산학협력단 | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 |
KR20160118920A (ko) * | 2015-04-04 | 2016-10-12 | 홍동철 | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 |
US10740443B2 (en) | 2015-08-10 | 2020-08-11 | Line Corporation | System and method for code obfuscation of application |
WO2017026739A1 (ko) * | 2015-08-10 | 2017-02-16 | 라인 가부시키가이샤 | 어플리케이션의 코드 난독화를 위한 시스템 및 방법 |
CN105740708A (zh) * | 2016-01-28 | 2016-07-06 | 博雅网信(北京)科技有限公司 | 一种基于Java反射机制的安卓应用自动脱壳方法 |
CN107402792A (zh) * | 2017-08-01 | 2017-11-28 | 广州视源电子科技股份有限公司 | 应用软件安装包的集成方法、装置、设备及存储介质 |
CN107402792B (zh) * | 2017-08-01 | 2020-08-28 | 广州视源电子科技股份有限公司 | 应用软件安装包的集成方法、装置、设备及存储介质 |
WO2020050455A1 (ko) * | 2017-11-16 | 2020-03-12 | 숭실대학교산학협력단 | 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법 |
US10878086B2 (en) | 2017-11-16 | 2020-12-29 | Foundation Of Soongsil University-Industry Cooperation | Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus |
US11934495B2 (en) | 2017-11-16 | 2024-03-19 | Foundation Of Soongsil University-Industry Cooperation | Device for automatically identifying anti-analysis techniques by using signature extraction and method therefor |
CN111274551A (zh) * | 2019-12-30 | 2020-06-12 | 上海上讯信息技术股份有限公司 | 基于编译器的java代码保护方法、装置及电子设备 |
CN111274551B (zh) * | 2019-12-30 | 2023-06-27 | 上海上讯信息技术股份有限公司 | 基于编译器的java代码保护方法、装置及电子设备 |
WO2023191557A1 (ko) * | 2022-04-01 | 2023-10-05 | (주)잉카엔트웍스 | Dex 파일 보호를 위한 보안 제공 장치와 방법 및 보안 실행 장치와 방법 |
Also Published As
Publication number | Publication date |
---|---|
KR101545272B1 (ko) | 2015-08-20 |
WO2014142430A1 (ko) | 2014-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101545272B1 (ko) | 안드로이드에서의 dex파일 바이너리 난독화 방법 | |
KR101623096B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
KR101518420B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
KR101521765B1 (ko) | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 | |
KR101740134B1 (ko) | 어플리케이션의 코드 난독화를 위한 시스템 및 방법 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN108363911B (zh) | 一种Python脚本混淆、水印的方法及装置 | |
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
WO2015058620A1 (en) | Method and apparatus for generating installation package corresponding to an application and executing application | |
US20170024230A1 (en) | Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
CN109598107B (zh) | 一种基于应用安装包文件的代码转换方法及装置 | |
US20100058303A1 (en) | System and method for conditional expansion obfuscation | |
CN103177199A (zh) | 网页应用代码保护方法及***和执行的提速方法及*** | |
US20120204039A1 (en) | Counteracting memory tracing on computing systems by code obfuscation | |
US8533826B2 (en) | Method for protecting the source code of a computer program | |
You et al. | A Comparative Study on Optimization, Obfuscation, and Deobfuscation tools in Android. | |
KR101536920B1 (ko) | Arm 프로세서 기반의 파일 난독화 방법 | |
EP2937803A1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
KR102173151B1 (ko) | 원본코드 자동추출장치 및 원본코드 자동추출방법 | |
CN110472425A (zh) | 基于Mono的Unity插件加密方法、存储介质 | |
KR102529826B1 (ko) | 난독화 장치 및 방법 | |
KR20180131009A (ko) | 대용량 애플리케이션 변환 장치 및 방법 | |
EP3574425B1 (en) | Method to secure a software code | |
KR101436741B1 (ko) | 프로그램 보안 솔루션 적용 방법 및 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
FPAY | Annual fee payment |
Payment date: 20180813 Year of fee payment: 4 |