KR101863325B1 - 역공학 방지 방법 및 장치 - Google Patents
역공학 방지 방법 및 장치 Download PDFInfo
- Publication number
- KR101863325B1 KR101863325B1 KR1020160116269A KR20160116269A KR101863325B1 KR 101863325 B1 KR101863325 B1 KR 101863325B1 KR 1020160116269 A KR1020160116269 A KR 1020160116269A KR 20160116269 A KR20160116269 A KR 20160116269A KR 101863325 B1 KR101863325 B1 KR 101863325B1
- Authority
- KR
- South Korea
- Prior art keywords
- file
- dex
- architecture
- apk
- dex file
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 230000002265 prevention Effects 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 6
- 238000004806 packaging method and process Methods 0.000 claims description 6
- 238000012407 engineering method Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 8
- 238000012795 verification Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification 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
- 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/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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
본 발명은 역공학 방지 방법 및 장치에 관한 것이다. 안드로이드 애플리케이션에서 암호화된 dex 파일의 복호화 시에 필요한 so 파일을 컴파일 할 때에 라이브러리 디렉토리에서 아키텍처 정보를 확인한 결과를 기반으로 하여 컴파일 함으로써, 적어도 애플리케이션을 빌드할 때에 이용된 아키텍처에 대해서는 so 파일이 정상적으로 실행될 수 있도록 하며, 나아가, 모든 아키텍처에 대해서 so 파일이 정상적으로 실행될 수 있도록 한다. 아울러, APK 파일에 두 개 이상의 dex 파일들이 있는 multidex 애플리케이션에도 역공학 방지를 적용할 수 있도록 하는 이점이 있다.
Description
역공학 방지 방법 및 장치에 관한 것이다. 더욱 상세하게는 안드로이드 애플리케이션의 역공학을 방지하는 방법과 이를 수행할 수 있는 장치에 관한 것이다.
최근 스마트폰 및 다양한 모바일 기기의 사용량이 증가하면서 안드로이드 기반의 애플리케이션 수가 증가하고 있으며, 대부분의 안드로이드 애플리케이션은 자바로 개발되었다. 자바는 컴파일을 할 경우 바이트 코드 형태로 변환되며, 이러한 바이트 코드는 디컴파일에 취약한 단점이 있다.
이러한 취약점 때문에 안드로이드 애플리케이션의 원본 소스 코드 노출이 발생하고 있으며, 개발자들은 디컴파일 된 소스 코드의 분석을 지연시키기 위해 난독화 기법을 적용하게 되었다. 난독화 기법은 기존 자바 난독화 기술인 식별자 난독화(identifier mangling), 문자열 난독화(string obfuscation), 사용되지 않거나 관계없는 코드 삽입 난독화(insert dead or irrelevant code) 등 다양한 난독화 기법을 적용한다. 이러한 난독화 기법들은 디컴파일 된 소스 코드의 노출을 방어하는 것이 아니라 소스 코드를 분석하기 어렵게 만드는데 초점이 맞춰져 있다.
종래 기술에 따라 디컴파일 된 소스 코드의 노출을 방지하는 역공학 방지 기술은, APK에 존재하는 dex 파일 암호화 및 동적 코드 로딩 방법이 제안되었다. APK 내에 있는 dex 파일을 암호화 한 뒤 다른 폴더로 이동시키고, 암호화된 dex 파일을 동적 코드 로딩을 하는 stub dex 파일을 APK의 루트 디렉토리에 저장하였다.
한편, 안드로이드 폰들이 다른 CPU 아키텍처(architecture)를 사용할 수 있게 하기 위해 ABI(Application Binary Interface)가 제공된다. ABI는 응용 프로그램 이진 인터페이스로 응용 프로그램과 운영 체제 또는 응용 프로그램과 해당 라이브러리, 마지막으로 응용 프로그램의 구성요소 간에서 사용되는 낮은 수준의 인터페이스이다. ABI는 API와 다르며, API가 소스 코드에서 사용된다면, ABI는 바이너리에서 호환이 가능하다는 점이 다르다. 이 ABI들은 NDK(Native Development Kit)를 이용해 크로스 컴파일(cross compile)이 가능하며, ABI 종류는 총 7개로서, armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips, mips64 이다. 개발자가 APK를 빌드할 때, ABI에 맞게 컴파일이 되면 라이브러리 디렉토리의 하부에 ABI 종류에 알맞은 하위 디렉토리가 생성된다. 안드로이드 애플리케이션은 실행도중 JNI(Java Native Interface)를 호출할 때, 안드로이드 애플리케이션을 실행 중인 안드로이드 디바이스의 아키텍처를 확인한 후, 확인된 아키텍처에 대응되는 so 파일을 라이브러리 디렉토리에서 선택해서 실행한다.
그런데, 역공학 방지를 위한 종래 기술에 따르면, 안드로이드 디바이스의 아키텍처에 대한 고려가 없었으며, 이에 따라 역공학 방지가 적용된 안드로이드 애플리케이션이 클라이언트측에서 실행될 때에 일부의 디바이스에서는 so 파일이 정상적으로 실행되지 않는 경우가 발생할 수 있었다.
또한, 종래 기술은 APK 파일에 두 개 이상의 dex 파일들이 있는 multidex 애플리케이션에는 적용할 수 없는 문제점이 있었다.
실시예에 따르면, 안드로이드 애플리케이션에서 암호화된 dex 파일의 복호화 시에 필요한 so 파일을 컴파일 할 때에 라이브러리 디렉토리에서 아키텍처 정보를 확인한 결과를 기반으로 하여 컴파일 함으로써, 적어도 애플리케이션을 빌드할 때에 이용된 아키텍처에 대해서는 so 파일이 정상적으로 실행될 수 있도록 하는 역공학 방지 방법 및 장치를 제공한다.
아울러, APK 파일에 두 개 이상의 dex 파일들이 있는 multidex 애플리케이션에도 적용할 수 있는 역공학 방지 방법 및 장치를 제공한다.
해결하려는 과제는 이상에서 언급한 것으로 제한되지 않으며, 언급되지 않은 또 다른 해결하고자 하는 과제는 아래의 기재로부터 본 발명이 속하는 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
제 1 관점에 따른 역공학 방지 장치에서 수행되는 역공학 방지 방법은, 안드로이드 애플리케이션의 APK 파일 내에서 원본 dex 파일을 확인하는 단계와, 상기 원본 dex 파일을 암호화한 암호화 dex 파일을 상기 APK 파일 내의 특정 서브 디렉토리에 저장하는 단계와, 상기 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 상기 원본 dex 파일이 있던 위치에 저장하는 단계와, 상기 APK 파일 내의 라이브러리 디렉토리에서 하위 디렉토리의 아키텍처 정보를 확인하는 단계와, 상기 암호화 dex 파일의 복호화에 필요한 so 파일을 상기 아키텍처 정보에 따라 아키텍처별로 컴파일하여 상기 라이브러리 디렉토리에 저장하는 단계와, 상기 stub dex 파일 및 상기 so 파일이 포함된 상기 APK 파일을 리패키징하는 단계를 포함할 수 있다.
제 2 관점에 따른 역공학 방지 장치는, 안드로이드 애플리케이션의 APK 파일을 읽어들여 원본 dex 파일을 확인하는 파일 리더부와, 상기 원본 dex 파일을 암호화한 암호화 dex 파일을 상기 APK 파일 내의 특정 서브 디렉토리에 저장하는 암호화부와, 상기 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 상기 원본 dex 파일이 있던 위치에 저장하는 파일 생성부와, 상기 APK 파일 내의 라이브러리 디렉토리에서 하위 디렉토리의 아키텍처 정보를 확인하는 아키텍처 확인부와, 상기 암호화 dex 파일의 복호화에 필요한 so 파일을 상기 아키텍처 정보에 따라 아키텍처별로 컴파일하여 상기 라이브러리 디렉토리에 저장하는 컴파일부와, 상기 stub dex 파일 및 상기 so 파일이 포함된 상기 APK 파일을 리패키징하는 패키징부를 포함할 수 있다.
실시예에 의하면, 안드로이드 애플리케이션에서 암호화된 dex 파일의 복호화 시에 필요한 so 파일을 컴파일 할 때에 라이브러리 디렉토리에서 아키텍처 정보를 확인한 결과를 기반으로 하여 컴파일 함으로써, 적어도 애플리케이션을 빌드할 때에 이용된 아키텍처에 대해서는 so 파일이 정상적으로 실행될 수 있도록 하며, 나아가, 모든 아키텍처에 대해서 so 파일이 정상적으로 실행될 수 있도록 한다.
아울러, APK 파일에 두 개 이상의 dex 파일들이 있는 multidex 애플리케이션에도 역공학 방지를 적용할 수 있도록 하는 효과가 있다.
도 1은 일 실시예에 따른 역공학 방지 장치의 블록 구성도이다.
도 2는 일 실시예에 따른 역공학 방지 방법을 설명하기 위한 흐름도이다.
도 3은 일 실시예에 따른 역공학 방지 방법에 따라 리패키징된 APK 파일과 원본 APK 파일의 디렉토리 구조도로서, (a)는 원본 APK 파일이고, (b)는 리패키징된 APK 파일이다.
도 4 및 도 5는 일 실시예에 따른 역공학 방지 방법에 의해 생성된 so 파일의 저장 위치를 보인 디렉토리 구조도이다.
도 2는 일 실시예에 따른 역공학 방지 방법을 설명하기 위한 흐름도이다.
도 3은 일 실시예에 따른 역공학 방지 방법에 따라 리패키징된 APK 파일과 원본 APK 파일의 디렉토리 구조도로서, (a)는 원본 APK 파일이고, (b)는 리패키징된 APK 파일이다.
도 4 및 도 5는 일 실시예에 따른 역공학 방지 방법에 의해 생성된 so 파일의 저장 위치를 보인 디렉토리 구조도이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
이하, 첨부된 도면들을 참조하여 본 발명의 실시예들에 대해 살펴보기로 한다.
도 1은 일 실시예에 따른 역공학 방지 장치의 블록 구성도이다.
이에 나타낸 바와 같이 일 실시예에 따른 역공학 방지 장치(100)는 파일 리더부(110), 암호화부(120), 파일 생성부(130), 아키텍처 확인부(140), 컴파일부(150), 패키징부(160)를 포함한다.
파일 리더부(110)는 안드로이드 애플리케이션의 APK 파일을 읽어들여 원본 dex 파일을 확인한다.
암호화부(120)는 파일 리더부(110)에 의해 확인된 원본 dex 파일을 암호화하고, 암호화한 암호화 dex 파일을 APK 파일 내의 특정 서브 디렉토리에 저장한다.
여기서, 암호화부(120)는 APK 파일 내에서 N개의 원본 dex 파일이 확인된 경우에, 암호화를 N회에 걸쳐서 수행하여 N개의 암호화 dex 파일을 특정 서브 디렉토리에 저장한다.
파일 생성부(130)는 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 원본 dex 파일이 있던 위치에 저장한다.
아키텍처 확인부(140)는 APK 파일 내의 라이브러리 디렉토리에서 아키텍처 정보를 확인한다.
컴파일부(150)는 암호화 dex 파일의 복호화에 필요한 so 파일을 아키텍처 확인부(140)에서 확인된 아키텍처 정보에 따라 아키텍처별로 컴파일하여 라이브러리 디렉토리에 저장한다.
여기서, 컴파일부(150)는 APK 파일 내에 라이브러리 디렉토리가 존재하지 않으면 신규로 라이브러리 디렉토리를 생성하고, 기 설정된 아키텍처별로 so 파일을 컴파일하여 신규로 생성한 라이브러리 디렉토리에 저장한다. 예컨대, 기 설정된 아키텍처는 안드로이드 플랫폼에서 지원하는 모든 아키텍처를 포함할 수 있다.
패키징부(160)는 파일 생성부(130)에 의해 생성된 stub dex 파일 및 컴파일부(150)에 의해 컴파일된 so 파일이 포함된 APK 파일을 리패키징한다.
일 실시예에 따르면, 파일 리더부(110), 암호화부(120), 파일 생성부(130), 아키텍처 확인부(140), 컴파일부(150) 및 처리부(130)는 CPU(Central Processing Unit) 등과 같은 프로세서로 구현할 수 있다. 아울러, 역공학 방지 장치(100)는 CPU 등과 같은 프로세서를 구비하여 컴퓨팅 연산이 가능한 장치로 구현할 수 있다. APK 파일에 대한 다운로드 서비스를 제공하는 서버 장치(예컨대, 앱 스토어 등)가 역공학 방지 장치(100)로서의 역할을 수행할 수 있고, 이러한 서버 장치가 별도의 역공항 방지 장치(100)와 연동할 수도 있다. 또, 안드로이드 운영체제가 설치된 단말 장치(예컨대, 스마트폰 등)가 역공학 방지 장치(100)로서의 역할을 수행할 수도 있다.
도 2는 일 실시예에 따른 역공학 방지 방법을 설명하기 위한 흐름도이다.
이에 나타낸 바와 같이 일 실시예에 따른 역공학 방지 방법은, 안드로이드 애플리케이션의 APK 파일이 업로드되면 APK 파일 내에서 원본 dex 파일을 확인하는 단계(S201)를 포함한다.
이어서, 원본 dex 파일을 암호화한 암호화 dex 파일을 생성하고, 생성된 암호화 dex 파일을 APK 파일 내의 특정 서브 디렉토리에 저장하는 단계(S202, S203)를 더 포함한다.
여기서, APK 파일 내에서 N개의 원본 dex 파일이 확인된 경우에, 암호화를 N회에 걸쳐서 수행하여 N개의 암호화 dex 파일을 특정 서브 디렉토리에 저장하는 과정을 반복하여 수행하는 단계(S204)를 더 포함한다.
그리고, 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 원본 dex 파일이 있던 위치에 저장하는 단계(S205)를 더 포함한다.
이어서, APK 파일 내의 라이브러리 디렉토리에서 아키텍처 정보를 확인하는 단계(S206)를 더 포함한다.
아울러, 암호화 dex 파일의 복호화에 필요한 so 파일을 확인된 아키텍처 정보에 따라 아키텍처별로 컴파일하여 라이브러리 디렉토리에 저장하는 단계(S207, S208)를 더 포함한다.
또, APK 파일 내에 라이브러리 디렉토리가 존재하지 않으면 신규로 라이브러리 디렉토리를 생성하고, 기 설정된 아키텍처별로 so 파일을 컴파일하여 신규로 생성된 라이브러리 디렉토리에 저장하는 단계(S207, S209)를 더 포함한다. 여기서, 기 설정된 아키텍처는 안드로이드 플랫폼에서 지원하는 모든 아키텍처를 포함할 수 있다.
다음으로, 단계 S205에서 생성된 stub dex 파일 및 단계 S207 또는 S208에서 컴파일된 so 파일이 포함된 APK 파일을 리패키징하는 단계(S210)를 더 포함한다. 여기서, 단계 S201에서 업로드되었던 안드로이드 애플리케이션이 서명이 되어 있던 경우라면 단계 S210의 리패키징 후에 재서명을 수행할 수 있다.
이하, 도 1 내지 도 5를 참조하여 실시예에 따른 역공학 방지 장치에서 안드로이드 애플리케이션의 역공학을 방지하는 방법에 대해 더 자세히 살펴보기로 한다.
먼저, 안드로이드 애플리케이션의 APK 파일이 업로드되면 파일 리더부(110)는 APK 파일 내에서 원본 dex 파일(Classes.dex)을 확인하여 암호화부(120)에게 전달한다(S201).
이어서, 암호화부(120)는 원본 dex 파일을 암호화하여 암호화 dex 파일을 생성하고(S202), 생성된 암호화 dex 파일을 APK 파일 내의 특정 서브 디렉토리에 저장한다(S203). 예컨대, 암호화부(120)는 단계 S202에서 생성한 암호화 dex 파일을 assets 디렉토리에 저장할 수 있다.
여기서, 파일 리더부(110)는 APK 파일 내에 원본 dex 파일이 잔존하는지를 확인한다. 단계 S201에서 APK 파일 내에 N개(단, N은 2이상의 자연수)의 원본 dex 파일(Classes.dex, Classes2.dex, …)이 확인된 경우에 단계 S202의 암호화를 N회에 걸쳐서 수행하며, 생성된 N개의 암호화 dex 파일을 특정 서브 디렉토리, 예컨대, assets 디렉토리에 저장하는 과정을 반복하여 수행한다. 이로써, assets 디렉토리에는 N개의 암호화 dex 파일(암호화 dex, 암호화 dex2, …)이 저장될 수 있다(S204).
그리고, 파일 생성부(130)는 단계 S203에서 저장된 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하며, 생성된 stub dex 파일을 원본 dex 파일이 있던 위치에 저장한다(S205).
여기서, 아키텍처 확인부(140)는 APK 파일 내의 라이브러리 디렉토리(lib)에서 아키텍처 정보를 확인하고, 확인된 아키텍처 정보를 컴파일부(150)에게 전달한다(S206).
그러면, 컴파일부(150)는 단계 S203에서 저장한 암호화 dex 파일의 복호화에 필요한 so 파일을 단계 S206에서 확인된 아키텍처 정보에 따라 아키텍처별로 컴파일하고(S207), 아키텍처별로 컴파일된 so 파일을 라이브러리 디렉토리(lib)에 저장한다. 이로써, 클라이언트측에서 애플리케이션이 실행될 때에 적어도 애플리케이션을 빌드할 때에 이용된 아키텍처에 대해서는 so 파일이 정상적으로 실행된다(S209).
예컨대, 단계 S206에서 도 4에 예시한 바와 같이 라이브러리 디렉토리(lib)에서 5개의 아키텍처(arm64-v8a, armeabi, armeabi-v7a, x86-64, x86)를 확인할 수 있다. 그러면, 각 아키텍처에 대응하는 서브 디렉토리에 아키텍처별로 컴파일된 so 파일(libStub.so)이 저장된다.
그런데, 단계 S206에서 APK 파일 내에 라이브러리 디렉토리(lib)가 존재하지 않은 것으로 확인된 경우라면, 컴파일부(150)는 신규로 라이브러리 디렉토리(lib)를 생성하고, 기 설정된 아키텍처별로 so 파일을 컴파일하며(S208), 신규로 생성된 라이브러리 디렉토리(lib)에 기 설정된 아키텍처별로 컴파일한 so 파일(libStub.so)을 저장한다. 이로써, 클라이언트측에서 애플리케이션이 실행될 때에 기 설정된 아키텍처에 대해서 so 파일이 정상적으로 실행된다(S209).
예컨대, 단계 S208에서 설정된 아키텍처는 안드로이드 플랫폼에서 지원하는 모든 아키텍처를 포함할 수 있다. 모든 아키텍처별로 so 파일을 컴파일하도록 설정된 경우라면, 컴파일부(150)는 도 5에 예시한 바와 같이 신규로 라이브러리 디렉토리(lib)를 생성하고, 라이브러리 디렉터리(lib) 내에 모든 아키텍처들과 일대일 대응하는 서브 디렉토리(arm64-v8a, armeabi, armeabi-v7a, mips, mips64, x86-64, x86)를 생성하며, 모든 아키텍처별로 so 파일을 컴파일하고(S208), 신규로 생성된 라이브러리 디렉토리(lib)에 모든 아키텍처별로 컴파일한 so 파일(libStub.so)을 저장한다. 이로써, 클라이언트측에서 애플리케이션이 실행될 때에 모든 아키텍처에 대해서 so 파일이 정상적으로 실행된다. 즉, 안드로이드 애플리케이션은 실행도중 JNI를 호출할 때, 안드로이드 애플리케이션을 실행 중인 안드로이드 디바이스의 아키텍처를 확인한 후 확인된 아키텍처에 대응되는 so 파일을 라이브러리 디렉토리에서 선택해 실행하여, 암호화된 dex 파일을 복호화할 수 있다.
다음으로, 패키징부(160)는 단계 S205에서 생성된 stub dex 파일 및 단계 S207 또는 S208에서 컴파일된 so 파일이 포함된 APK 파일을 리패키징한다(S210). 여기서, 단계 S201에서 업로드되었던 안드로이드 애플리케이션이 서명이 되어 있던 경우라면 단계 S210의 리패키징 후에 재서명을 수행할 수 있다(S210).
지금까지 설명한 바와 같이 실시예에 의하면, 안드로이드 애플리케이션에서 암호화된 dex 파일의 복호화 시에 필요한 so 파일을 컴파일 할 때에 라이브러리 디렉토리에서 아키텍처 정보를 확인한 결과를 기반으로 하여 컴파일 함으로써, 적어도 애플리케이션을 빌드할 때에 이용된 아키텍처에 대해서는 so 파일이 정상적으로 실행될 수 있도록 하며, 나아가, 모든 아키텍처에 대해서 so 파일이 정상적으로 실행될 수 있도록 한다.
아울러, APK 파일에 두 개 이상의 dex 파일들이 있는 multidex 애플리케이션에도 역공학 방지를 적용할 수가 있다.
본 명세서에 첨부된 블록도의 각 블록과 흐름도의 각 단계의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수도 있다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 블록도의 각 블록 또는 흐름도의 각 단계에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 블록도의 각 블록 또는 흐름도 각 단계에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 블록도의 각 블록 및 흐름도의 각 단계에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록 또는 각 단계는 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실시예들에서는 블록들 또는 단계들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들 또는 단계들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들 또는 단계들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
100 : 역공학 방지 장치 110 : 파일 리더부
120 : 암호화부 130 : 파일 생성부
140 : 아키텍처 확인부 150 : 컴파일부
160 : 패키징부
120 : 암호화부 130 : 파일 생성부
140 : 아키텍처 확인부 150 : 컴파일부
160 : 패키징부
Claims (10)
- 삭제
- 삭제
- 역공학 방지 장치에서 수행되는 역공학 방지 방법으로서,
안드로이드 애플리케이션의 APK 파일 내에서 원본 dex 파일을 확인하는 단계와,
상기 원본 dex 파일을 암호화한 암호화 dex 파일을 상기 APK 파일 내의 특정 서브 디렉토리에 저장하는 단계와,
상기 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 상기 원본 dex 파일이 있던 위치에 저장하는 단계와,
상기 APK 파일 내의 라이브러리 디렉토리에서 하위 디렉토리의 아키텍처 정보를 확인하는 단계와,
상기 하위 디렉토리의 아키텍처 정보가 확인되면, 상기 암호화 dex 파일의 복호화에 필요한 so 파일을 상기 아키텍처 정보에 따라 아키텍처별로 컴파일하여 상기 라이브러리 디렉토리에 저장하는 단계와,
상기 APK 파일 내에 상기 라이브러리 디렉토리가 존재하지 않으면, 신규로 라이브러리 디렉토리를 생성하고, 안드로이드 플랫폼에서 지원하는 모든 아키텍처들과 일대일 대응하는 하위 디렉토리를 생성하며, 상기 모든 아키텍처에 대해 아키텍처별로 상기 so 파일을 컴파일하여 신규로 생성한 각각의 상기 하위 디렉토리에 저장하는 단계와,
상기 stub dex 파일 및 상기 so 파일이 포함된 상기 APK 파일을 리패키징하는 단계를 포함하는
역공학 방지 방법.
- 제 3 항에 있어서,
상기 APK 파일 내에서 N개(단, N은 2이상의 자연수)의 상기 원본 dex 파일이 확인된 경우에, 상기 암호화를 N회에 걸쳐서 수행하여 N개의 상기 암호화 dex 파일을 상기 특정 서브 디렉토리에 저장하는
역공학 방지 방법.
- 제 3 항 또는 제 4 항의 역공학 방지 방법을 프로세서가 수행하도록 하기 위하여
컴퓨터 판독 가능한 기록매체에 저장된 컴퓨터 프로그램.
- 제 3 항 또는 제 4 항의 역공학 방지 방법을 프로세서가 수행하도록 하는
컴퓨터 프로그램이 저장된 컴퓨터 판독 가능한 기록매체.
- 삭제
- 삭제
- 안드로이드 애플리케이션의 APK 파일을 읽어들여 원본 dex 파일을 확인하는 파일 리더부와,
상기 원본 dex 파일을 암호화한 암호화 dex 파일을 상기 APK 파일 내의 특정 서브 디렉토리에 저장하는 암호화부와,
상기 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 상기 원본 dex 파일이 있던 위치에 저장하는 파일 생성부와,
상기 APK 파일 내의 라이브러리 디렉토리에서 하위 디렉토리의 아키텍처를 확인하는 아키텍처 확인부와,
상기 하위 디렉토리의 아키텍처 정보가 확인되면, 상기 암호화 dex 파일의 복호화에 필요한 so 파일을 상기 아키텍처 정보에 따라 아키텍처별로 컴파일하여 상기 라이브러리 디렉토리에 저장하며, 상기 APK 파일 내에 상기 라이브러리 디렉토리가 존재하지 않으면, 신규로 라이브러리 디렉토리를 생성하고, 안드로이드 플랫폼에서 지원하는 모든 이키텍처들과 일대일 대응하는 하위 디렉토리를 생성하며, 상기 모든 아키텍처에 대해 아키텍처별로 상기 so 파일을 컴파일하여 신규로 생성한 각각의 상기 하위 디렉토리에 저장하는 컴파일부와,
상기 stub dex 파일 및 상기 so 파일이 포함된 상기 APK 파일을 리패키징하는 패키징부를 포함하는
역공학 방지 장치.
- 제 9 항에 있어서,
상기 암호화부는, 상기 APK 파일 내에서 N개(단, N은 2이상의 자연수)의 상기 원본 dex 파일이 확인된 경우에, 상기 암호화를 N회에 걸쳐서 수행하여 N개의 상기 암호화 dex 파일을 상기 특정 서브 디렉토리에 저장하는
역공학 방지 장치.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160116269A KR101863325B1 (ko) | 2016-09-09 | 2016-09-09 | 역공학 방지 방법 및 장치 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160116269A KR101863325B1 (ko) | 2016-09-09 | 2016-09-09 | 역공학 방지 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180028666A KR20180028666A (ko) | 2018-03-19 |
KR101863325B1 true KR101863325B1 (ko) | 2018-06-01 |
Family
ID=61910906
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020160116269A KR101863325B1 (ko) | 2016-09-09 | 2016-09-09 | 역공학 방지 방법 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101863325B1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109271758B (zh) * | 2018-08-24 | 2021-04-20 | 阿里巴巴(中国)有限公司 | 防止So文件被盗用的方法、设备、装置及服务器 |
CN111597514B (zh) * | 2020-04-15 | 2023-10-13 | 卓望数码技术(深圳)有限公司 | 安卓源代码保护方法和装置 |
CN113360181A (zh) * | 2021-05-20 | 2021-09-07 | 武汉虹旭信息技术有限责任公司 | 用于工业互联网的代码调用方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160210130A1 (en) * | 2015-01-21 | 2016-07-21 | Samsung Electronics Co., Ltd. | Apparatus and method for running multiple instances of a same application in mobile devices |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101661817B1 (ko) * | 2014-05-21 | 2016-09-30 | 단국대학교 산학협력단 | 서버 및 휴대용 단말의 에플리케이션 보호방법 및 장치 |
KR101518420B1 (ko) | 2014-11-11 | 2015-05-07 | 주식회사 에스이웍스 | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 |
-
2016
- 2016-09-09 KR KR1020160116269A patent/KR101863325B1/ko active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160210130A1 (en) * | 2015-01-21 | 2016-07-21 | Samsung Electronics Co., Ltd. | Apparatus and method for running multiple instances of a same application in mobile devices |
Also Published As
Publication number | Publication date |
---|---|
KR20180028666A (ko) | 2018-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101471589B1 (ko) | 공통중간언어 기반 프로그램을 위한 보안 제공 방법 | |
CN108229112B (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
KR101518420B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
JP5990654B2 (ja) | アプリケーションコード難読化装置及びその方法 | |
KR101623096B1 (ko) | 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법 | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
CN106203006A (zh) | 基于dex与so文件动态执行的Android应用加固方法 | |
WO2016078130A1 (zh) | 一种防逆向apk文件的动态加载方法 | |
CN104408337A (zh) | 一种apk文件防逆向的加固方法 | |
KR101695639B1 (ko) | 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템 | |
WO2015192637A1 (zh) | 软件安装包的加固保护方法和装置 | |
EP3126973A1 (en) | Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine | |
US20150095653A1 (en) | Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package | |
CN104317625A (zh) | 一种apk文件的动态加载方法 | |
CN107273723B (zh) | 一种基于so文件加壳的Android平台应用软件保护方法 | |
CN108399319B (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN107430650B (zh) | 保护计算机程序以抵御逆向工程 | |
CN104866739A (zh) | 安卓系统中应用程序加密方法及系统 | |
US20180067777A1 (en) | Application protection method, server, and terminal | |
KR101863325B1 (ko) | 역공학 방지 방법 및 장치 | |
KR102459774B1 (ko) | Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체 | |
KR102001046B1 (ko) | 공통 중간 언어를 위한 보안 제공 장치와 방법, 및 보안 실행 장치와 방법 | |
KR20140139392A (ko) | 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치 | |
CN113893550A (zh) | 脚本源码处理方法及相关设备 |
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 | ||
GRNT | Written decision to grant |