KR20140114769A - 안드로이드에서의 dex파일 바이너리 난독화 방법 - Google Patents

안드로이드에서의 dex파일 바이너리 난독화 방법 Download PDF

Info

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
Application number
KR1020140030168A
Other languages
English (en)
Other versions
KR101545272B1 (ko
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 주식회사 에스이웍스
Publication of KR20140114769A publication Critical patent/KR20140114769A/ko
Application granted granted Critical
Publication of KR101545272B1 publication Critical patent/KR101545272B1/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
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations

Abstract

본 발명은 Method를 분할하고 위치를 변경하는 제어 흐름 변환을 통해 APK파일의 실행코드인 DEX파일을 역컴파일과 같은 툴을 이용하여 풀지 못하도록 수정한다. 이를 위해 APK파일을 압축 해제하여 DEX파일을 추출하는 단계; 추출된 DEX 파일내의 복수의 각 Method 내에 디컴파일링을 방해하기 위한 하나 이상의 명령어를 추가하는 단계; 복수의 각 Method를 분할하고 위치를 변경하는 단계; APK파일로 리패키징하는 단계; 및 상기 APK파일의 정상적인 실행을 위하여 서명(Sign)하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법을 제공한다.

Description

안드로이드에서의 DEX파일 바이너리 난독화 방법{Method for Binary Obfuscating of Dalvix Executable File in Android}
본 발명은 안드로이드에서의 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파일 바이너리 난독화 장치를 나타내는 도면.
본 명세서 및 청구범위에 사용된 용어나 단어는 통상적이거나 사전적인 의미로 한정해서 해석되어서는 아니되며, 발명자는 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원칙에 입각하여 본 고안의 기술적 사상에 부합하는 의미와 개념으로 해석되어야만 한다.
따라서, 본 명세서에 기재된 실시예와 도면에 도시된 구성은 본 발명의 가장 바람직한 일 실시예에 불과할 뿐이고 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형예들이 있을 수 있음을 이해하여야 한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.
바이너리 난독화는 난독화 대상이 컴파일된 바이너리일 경우를 의미하며 바이너리가 컴파일된 환경에 따라 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)

  1. APK파일의 실행코드인 DEX파일을 해독하지 못하도록 하기 위한 안드로이드에서의 DEX파일 바이너리 난독화 방법에 있어서,
    APK파일을 압축 해제하여 DEX파일을 추출하는 단계;
    추출된 DEX파일내의 복수의 각 Method 내에 디컴파일링을 방해하기 위한 하나 이상의 명령어를 추가하는 단계;
    복수의 각 Method를 분할하고 위치를 변경하는 단계;
    APK파일로 리패키징하는 단계; 및
    상기 APK파일의 정상적인 실행을 위하여 서명(Sign)하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법.
  2. 제 1항에 있어서,
    상기 하나 이상의 명령어를 추가하는 단계는,
    DEX파일의 각 Method에 실행에 영향을 주지 않는 제1 명령어를 삽입하는 단계;
    상기 제1 명령어가 포함된 DEX 파일을 실행하는 단계; 및
    상기 제1 명령어의 삽입으로 생성된 방해 공간에 디컴파일링을 방해하는 방해 코드인 제2 명령어를 삽입하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법.
  3. 제 1항에 있어서,
    상기 복수의 각 Method를 분할하고 위치를 변경하는 단계는,
    복수의 각 Method를 분할하는 단계;
    상기 분할된 각 Method의 길이를 계산하여 위치를 변경하는 단계; 및
    상기 위치가 변경된 각 Method가 끝날 때마다 이동 명령어를 정확히 삽입하여 앱 실행이 정상적으로 진행되도록 하는 단계를 포함하는 것을 특징으로 하는 안드로이드에서의 DEX파일 바이너리 난독화 방법.
KR1020140030168A 2013-03-15 2014-03-14 안드로이드에서의 dex파일 바이너리 난독화 방법 KR101545272B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020130027954 2013-03-15
KR20130027954 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)

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

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

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2776913C (en) * 2009-10-08 2017-01-03 Irdeto Canada Corporation 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 北京深思数盾科技有限公司 一种提高安卓系统中应用程序保护强度的方法

Cited By (16)

* Cited by examiner, † Cited by third party
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脚本混淆、水印的方法及装置
US20170024230A1 (en) Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine
WO2015058620A1 (en) Method and apparatus for generating installation package corresponding to an application and executing application
US20110271350A1 (en) method for protecting software
KR101861341B1 (ko) 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법
CN103177199A (zh) 网页应用代码保护方法及系统和执行的提速方法及系统
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
US8775826B2 (en) Counteracting memory tracing on computing systems by code obfuscation
EP2937803B1 (en) Control flow flattening for code obfuscation where the next block calculation needs run-time information
US8533826B2 (en) Method for protecting the source code of a computer program
KR101536920B1 (ko) Arm 프로세서 기반의 파일 난독화 방법
You et al. A Comparative Study on Optimization, Obfuscation, and Deobfuscation tools in Android.
KR20180131009A (ko) 대용량 애플리케이션 변환 장치 및 방법
KR102173151B1 (ko) 원본코드 자동추출장치 및 원본코드 자동추출방법
EP3574425B1 (en) Method to secure a software code
CN110472425A (zh) 基于Mono的Unity插件加密方法、存储介质
KR101436741B1 (ko) 프로그램 보안 솔루션 적용 방법 및 시스템
EP2947590B1 (en) Program code obfuscation based upon recently executed program code
KR20180028666A (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