KR20160112904A - 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치 - Google Patents

안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치 Download PDF

Info

Publication number
KR20160112904A
KR20160112904A KR1020150102380A KR20150102380A KR20160112904A KR 20160112904 A KR20160112904 A KR 20160112904A KR 1020150102380 A KR1020150102380 A KR 1020150102380A KR 20150102380 A KR20150102380 A KR 20150102380A KR 20160112904 A KR20160112904 A KR 20160112904A
Authority
KR
South Korea
Prior art keywords
android
file
reverse engineering
executable file
application
Prior art date
Application number
KR1020150102380A
Other languages
English (en)
Other versions
KR101734663B1 (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 KR20160112904A publication Critical patent/KR20160112904A/ko
Application granted granted Critical
Publication of KR101734663B1 publication Critical patent/KR101734663B1/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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

안드로이드 어플리케이션의 실행에 있어 진입점 변환 기법을 적용함으로써 실행 파일에 대한 암호화 및 복호화를 지원하여 역공학을 방지하는 방법 및 장치이 개시된다. 안드로이드 어플리케이션의 역공학 방지 방법은, 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하는 단계와; 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 안드로이드 어플리케이션을 패키징하는 단계를 포함하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어한다. 따라서, 진입점 변환 기법을 스텁 파일에 적용함으로써 안드로이드 패키지의 정적 역공학 공격을 효율적으로 방지할 수 있다.

Description

안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치{METHOD FOR PREVENTING REVERSE ENGINEERING OF ANDROID APPLICATION AND APPARATUS FOR PERFORMING THE METHOD}
본 발명은 안드로이드 어플리케이션의 보호에 관한 것으로, 더욱 상세하게는 안드로이드 어플리케이션의 실행에 있어 변환 기법을 적용함으로써 실행 파일에 대한 암호화 및 복호화를 지원하여 역공학을 방지하는 방법 및 장치에 관한 것이다.
종래에는 안드로이드 어플리케이션에 대한 정적 역공학 방지하기 위해 어플리케이션 패키지 중 소스 코드가 있는 DEX 파일을 암호화한 후 실행 시 복호화하는 기법이 이용되었다.
보다 구체적으로, 소스 코드에 디컴파일 방지 코드를 추가하여 DEX 파일을 생성하거나 어플리케이션 패키지 파일(zip file)의 형태를 생성하여 어플리케이션을 암호화하였다. 이 후, 어플리케이션 소스 코드를 수정하여 생성한 DEX 파일과 실행 파일 형태의 복호화 모듈을 합친 어플리케이션 패키지를 생성하고 어플리케이션의 실행 시 복호화 모듈이 우선 실행되게 하거나, 암호화된 어플리케이션을 실행하기 위해 별도의 런처(Launcher) 또는 서비스(Service)를 설치하여 어플리케이션 실행 전에 복호화하거나, 안드로이드 프레임워크 또는 커널을 수정하여 암호화된 어플리케이션을 복호화하여 이용하였다.
이러한 경우, 암호화 또는 복호화 키 관리를 위해, DEX 파일에 포함된 복수 개의 클래스 및 메소드의 인덱스 정보를 통해 비밀키를 이용하거나, 암호화 키를 어플리케이션 패키지 내에 삽입하거나, 어플리케이션 인증 서버와의 통신을 통해 암호화 키를 획득하거나, XOR과 같이 별도의 키가 필요하지 않은 암호화 알고리즘을 사용하였다.
상술한 종래 기술은 난독화, 더미 코드(dummy code) 삽입과 같은 기존의 정적 역공학 공격을 효율적으로 방어할 수 있으나, 안드로이드 어플리케이션의 암호화를 위해 XOR과 같이 공격에 취약한 암호화 알고리즘을 사용하거나, 암호화 또는 복호화 키를 안전하지 않은 방법으로 관리함에 따라 암호화를 통한 정적 역공학 방지 효과를 효율적으로 사용하지 못하는 문제점이 있다.
또한, 종래 기술은 암호화된 안드로이드 어플리케이션의 실행을 위해, 안드로이드 프레임워크 혹은 서비스 단에서 암호화된 안드로이드 어플리케이션을 실행하는 별도의 시스템 서비스(Service)나 어플리케이션을 실행하는 런처(Launcher)를 사전에 설치하거나, 안드로이드 프레임워크 내의 어플리케이션 실행 코드를 수정해야 하며, 안드로이드 어플리케이션의 DEX 파일 혹은 소스 코드를 임의 변경해야 한다는 점에서, 급속도로 다양하게 발전하고 있는 안드로이드 스마트폰을 대상으로 범용성 및 이식성이 부족하다는 한계가 있다.
상기와 같은 문제점을 해결하기 위한 본 발명의 목적은, 진입점 변환 기법에 기반하여 안드로이드 어플리케이션의 역공학을 방지하는 방법을 제공하는데 있다.
상기와 같은 문제점을 해결하기 위한 본 발명의 다른 목적은, 진입점 변환 기법에 기반하여 안드로이드 어플리케이션의 역공학을 방지하는 장치를 제공하는데 있다.
상기 목적을 달성하기 위한 본 발명의 일 측면에 따른 안드로이드 어플리케이션의 역공학 방지 방법은, 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하는 단계와; 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 안드로이드 어플리케이션을 패키징하는 단계를 포함하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어한다.
여기에서, 상기 안드로이드 어플리케이션의 역공학 방지 방법은, 안드로이드 어플리케이션을 개발하는 개발자 단말 또는 안드로이드 어플리케이션을 배포하는 배포 서버에서 수행될 수 있다.
여기에서, 상기 스텁 파일은, 안드로이드 어플리케이션에 대한 실행 시에 가장 먼저 실행되도록 설정될 수 있다.
여기에서, 상기 스텁 파일은, 액티비티(Activity), 서비스(Service), 컨텐츠 프로바이더(Content Provider) 및 브로드캐스트 리시버(Broadcast Receiver) 중 어떤 컴포넌트가 실행되더라도 가장 먼저 실행될 수 있다.
여기에서, 상기 스텁 파일은, 안드로이드 매니페스트(Android Manifest) 파일의 설정에 따라 가장 먼저 실행될 수 있다.
여기에서, 상기 스텁 파일은, 암호화된 실행 파일이 복호화되어 생성된 원본 실행 파일을 위한 진입점 변환에 따른 실행 흐름 변경이 수행되도록 설정할 수 있다.
여기에서, 상기 실행 흐름 변경은, 스텁 파일의 설정에 따라 안드로이드 런타임(Android Runtime)에서 수행될 수 있다.
여기에서, 상기 실행 흐름 변경은, 안드로이드 런타임에서 사용할 원본 실행 파일의 진입점 컴포넌트를 초기화함으로써 수행될 수 있다.
여기에서, 상기 실행 파일은, Classes.dex 파일일 수 있다.
상기 목적을 달성하기 위한 본 발명의 다른 측면에 따른 안드로이드 어플리케이션의 역공학 방지 방법은, 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 패키징된 안드로이드 어플리케이션을 수신하는 단계와; 패키징된 안드로이드 어플리케이션에 포함된 스텁 파일을 이용하여 상기 암호화된 실행 파일을 복호화하는 단계를 포함하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어한다.
여기에서, 상기 안드로이드 어플리케이션의 역공학 방지 방법은, 안드로이드 어플리케이션을 실행하는 사용자 단말에서 수행될 수 있다.
상기 목적을 달성하기 위한 본 발명의 또 다른 측면에 따른 안드로이드 어플리케이션의 역공학 방지를 수행하는 장치는, 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하고, 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 안드로이드 어플리케이션을 패키징하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어한다.
상기 목적을 달성하기 위한 본 발명의 또 다른 측면에 따른 안드로이드 어플리케이션의 역공학 방지를 수행하는 장치는, 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 패키징된 안드로이드 어플리케이션을 수신하고, 패키징된 안드로이드 어플리케이션에 포함된 스텁 파일을 이용하여 암호화된 실행 파일을 복호화하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어한다.
상기 목적을 달성하기 위한 본 발명의 또 다른 측면에 따른 컴퓨터로 판독 가능한 기록 매체는, 안드로이드 어플리케이션의 역공학 방지 방법을 수행하는 컴퓨터 프로그램을 저장한다.
상기와 같은 본 발명에 따른 안드로이드 어플리케이션의 역공학 방지 방법 및 장치는, 진입점 변환 기법을 스텁 파일에 적용함으로써 안드로이드 패키지의 정적 역공학 공격을 효율적으로 방지할 수 있다.
또한, 본 발명의 실시예는 스텁 DEX를 통한 복호화 및 동적 로딩을 위해, 관리자 권한의 Starter 앱이 별도로 필요로 하지 않는 장점이 있다.
또한, 본 발명의 실시예는 어플리케이션에 대한 진입점이 액티비티(Activity)부터 시작하지 않는 경우에도 적용할 수 있으며, 시스템 레벨에서의 별도의 설정 및 설치 등이 필요하지 않다.
도 1은 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법을 설명하기 위한 개념도이다.
도 2는 본 발명의 실시예에 따라 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 패키징하는 방법을 설명하기 위한 흐름도이다.
도 3은 본 발명의 실시예에 따라 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 실행시키는 방법을 설명하기 위한 흐름도이다.
도 4는 본 발명의 실시예에 따라 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 실행시키는 방법을 설명하기 위한 예시도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
먼저, 본 발명을 설명하기 위한 기본적인 용어를 설명하면 다음과 같다.
하나의 안드로이드 어플리케이션(Android Application)은 여러 컴포넌트들의 집합으로 구성이 된다. 컴포넌트는 액티비티(Activity), 서비스 (Service), 컨텐츠 프로바이더(Content Provider), 브로드캐스트 리시버(Broadcast Receiver)와 같이 구분될 수 있다.
액티비티(Activity)는 안드로이드 어플리케이션 상에서 UI의 기능을 담당하는 컴포넌트이다. 일반적으로 하나의 액티비티는 하나의 화면을 정의한다.
서비스 (Service)는 백그라운드에서 동작하는 컴포넌트이다. 서비스는 다른 컴포넌트와 bind를 통하여 연결이 되며, 다른 컴포넌트들은 binder라는 객체를 통하여 연결된 서비스가 제공하는 기능을 이용할 수 있다. 서비스는 같은 어플리케이션에서만 접근이 가능한 로컬 서비스(Local Service)와 다른 어플리케이션(다른 프로세스)에서 접근이 가능한 원격 서비스(Remote Service)가 있다.
컨텐츠 프로바이더(Content Provider)는 어플리케이션에서 사용되는 데이터를 여러 어플리케이션에서 공유하기 위한 기능을 하는 컴포넌트이다. 일반적으로 한 어플리케이션은 다른 어플리케이션이 가지는 데이터 저장소에 직접적으로 접근을 할 수 없다. 하지만 한 어플리케이션이 컨텐츠 프로바이더를 이용하여 데이터를 제공 한다면, 다른 어플리케이션은 컨텐츠 리졸버(Content Resolver)를 통하여 데이터에 접근이 가능하다.
브로드캐스트 리시버(Broadcast Receiver)는 여러 어플리케이션을 대상으로 보낸 인텐트를 받는 컴포넌트이다. 액티비티나 서비스와는 다르게 이 컴포넌트는 짧은 시간 동안 존재한다. 일반적으로 브로드캐스트된 인텐트를 받아 그에 대한 처리를 수행한 후 소멸될 수 있다.
어플리케이션 컴포넌트는 실제 구현 상에서 안드로이드 API에서 정의한 컴포넌트들의 클래스(Activity, Service, Content Provider, Broadcast Receiver)를 상속하여, 해당 컴포넌트의 라이프사이클에 따라 실행되는 메소드와 이벤트 발생에 따라 처리하는 메서드들을 오버라이드(Override)함으로 구현될 수 있다.
안드로이드 어플리케이션은 다른 어플리케이션 자체를 실행하거나 다른 어플리케이션에 정의된 원격 서비스를 바인드 하거나, 컨텐츠 리졸버를 통하여 명령을 전달하거나, 다른 어플리케이션이 전달하는 브로드캐스트를 받음으로 다른 어플리케이션의 자원에 접근한다. 이를 컴포넌트간의 통신으로 정의한다. 컨텐츠 프로바이더를 제외한 컴포넌트간의 정보를 교환하기 위해서는 인텐트와 인텐트 필터를 이용한다.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법을 설명하기 위한 개념도이다.
도 1을 참조하면, 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공방 방지는 개발자 단말(10), 마켓 서버(20) 및 사용자 단말(30) 간의 연동으로 설명될 수 있다.
개발자 단말(10)을 통하여 생성된 안드로이드 어플리케이션(또는 앱)은 마켓 서버(20)를 통하여 사용자 단말(30)로 제공될 수 있다. 즉, 개발자 단말(10)에서 생성된 안드로이드 어플리케이션은 마켓 서버(20)에 등록되고, 마켓 서버(20)에 등록된 안드로이드 어플리케이션은 사용자 단말(30)로 다운로드될 수 있다. 이 때, 안드로이드 어플리케이션은 역공학 공격으로부터 보호하기 위하여 실행 코드를 암호화하여 배포될 수 있다.
예를 들어, 개발자 단말(10) 또는 마켓 서버(20)는 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화할 수 있다. 또한, 개발자 단말(10) 또는 마켓 서버(20)는 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(Stub) 파일이 포함되도록 안드로이드 어플리케이션을 패키징할 수 있다. 여기서, 실행 파일은 DEX 파일을 의미하고, 스텁 파일은 스텁 DEX 파일을 의미할 수 있다.
보다 상세하게는, 어플리케이션에 대한 위변조를 방지하기 위해, 실행 파일에 대한 암호화 기법을 제공할 수 있다. 어플리케이션의 실행 코드를 역공학 공격으로부터 보호하기 위하여 실행 파일인 classes.dex 파일만을 암호화하여 배포할 수 있고, 이후 정상 실행을 위해 암호화된 실행 파일을 복호화하여 동적 로딩(dynamic loading)하는 스텁(stub) 방식을 적용할 수 있다.
특히, 본 발명의 실시예에 따르면 AndroidManifest.xml에 Application element를 정의하고 있는 경우에도, 스텁 파일을 우선적으로 실행시켜 암호화된 실행 파일을 복호화하여 동적으로 로딩할 수 있는 진입점(entry point) 변환 기법을 적용할 수 있다. 즉, 본 발명의 실시예에 따른 스텁 파일은 진입점 변환 기법에 기반하여 암호화된 실행 파일을 복호화하여 실행시키도록 설정될 수 있다. 여기서, Application element는 Application class를 의미할 수 있다.
사용자 단말(30)은 스텁 파일과 함께 패키징된 안드로이드 어플리케이션을 다운로드할 수 있다. 또한, 사용자 단말(30)은 암호화된 실행 파일을 스텁 파일에 기반하여 복호화하고, 복호화된 원본 실행 파일로 실행 흐름을 변경하는 동적 로딩을 수행할 수 있다.
여기서, 사용자 단말(30)은 통신이 가능한 데스크탑 컴퓨터(desktop computer), 랩탑 컴퓨터(laptop computer), 태블릿(tablet) PC, 무선전화기(wireless phone), 모바일폰(mobile phone), 스마트 폰(smart phone), 스마트 워치(smart watch), 스마트 글래스(smart glass), e-book 리더기, PMP(portable multimedia player), 휴대용 게임기, 네비게이션(navigation) 장치, 디지털 카메라(digital camera), DMB (digital multimedia broadcasting) 재생기, 디지털 음성 녹음기(digital audio recorder), 디지털 음성 재생기(digital audio player), 디지털 영상 녹화기(digital picture recorder), 디지털 영상 재생기(digital picture player), 디지털 동영상 녹화기(digital video recorder), 디지털 동영상 재생기(digital video player) 등이 될 수 있다.
도 2는 본 발명의 실시예에 따라 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 패키징하는 방법을 설명하기 위한 흐름도이다.
도 2를 참조하면, 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법은, 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하는 단계(S210)와; 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 안드로이드 어플리케이션을 패키징하는 단계(S220)와; 패키징된 안드로이드 어플리케이션을 전송하는 단계(S230)를 포함한다.
도 2는 패키징된 안드로이드 어플리케이션을 생성하여 전송하는 방법을 설명하기 위한 것으로 도 1에서 상술한 개발자 단말(10) 또는 배포 서버(예를 들어, 마켓 서버(20))에서 수행될 수 있다.
안드로이드 어플리케이션은 실행 파일뿐 아니라 여러 이미지, 멀티미디어 등의 부가적인 정보를 포함하고 있어, 전체 어플리케이션 패키지를 암호화할 경우 암호화 및 복호화 성능이 떨어지게 된다. 따라서, 본 발명의 실시예에 따르면 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화할 수 있다. 또한, 효과적이고 안전한 암호화 및 복호화 키 관리를 위해 암 및 복호화 키는 앱을 고유 식별할 수 있도록 특징점을 기반으로 생성하여 사용될 수 있다.
보다 상세하게는, 안드로이드 어플리케이션의 실행 파일인 DEX 파일을 패키지에서 추출하여 암호화하고(S210), 암호화된 DEX 파일과 스텁 DEX가 포함하도록 안드로이드 어플리케이션을 패키징할 수 있다(S220).
여기서, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어하도록 설정될 수 있다. 즉, 스텁 파일은, 실행 파일이 암호화된 어플리케이션의 실행 시 스텁 DEX가 암호화된 DEX 파일을 복호화한 후 진입전 변환 기법을 이용하여 원본 실행 파일로 실행 흐름을 변경할 수 있도록 한다.
또한, 스텁 파일은, 안드로이드 어플리케이션에 대한 실행 시에 가장 먼저 실행되도록 설정될 수 있다. 즉, 스텁 파일은, 안드로이드 매니페스트(Android Manifest) 파일의 설정에 따라 가장 먼저 실행될 수 있다. 예를 들어, 스텁 파일은, 액티비티(Activity), 서비스(Service), 컨텐츠 프로바이더(Content Provider) 및 브로드캐스트 리시버(Broadcast Receiver) 중 어떤 컴포넌트가 실행되더라도 가장 먼저 실행될 수 있다.
특히, 본 발명의 실시예에 따르면 AndroidManifest.xml에 Application element를 정의하고 있는 경우도, 진입점 변환 기법의 적용을 통하여 역공학을 효과적으로 방지할 수 있다.
보다 상세하게는, 일반적인 어플리케이션 실행 순서는 “런타임(Runtime) -> (Optional) 어플리케이션 엘리멘트(Application element) -> 스타트 컴포넌트(Start component)”와 같다. 즉, AndroidManifest.xml에 Application element를 정의하는 것을 선택적인 문제이지만, AndroidManifest.xml에 Application element를 정의하고 있는 경우에는 암호화된 실행 파일을 포함하여 패키징된 안드로이드 어플리케이션을 스텁 파일을 이용하여 효과적으로 복호화하고 실행하는데 문제가 발생할 수 있다. 여기서, Application element는 Application class를 의미할 수 있다.
따라서, 이에 본 발명의 실시예에 따른 어플리케이션 실행 순서는 “런타임(Runtime) -> 스텁 어플리케이션 엘리멘트(Stub Application element)(진입점 변환 기능 추가) -> (Optional) 원본 어플리케이션 엘리먼트 (Original Application element) -> 스타트 컴포넌트(Start component)”와 같이 될 수 있다.
이에 본 발명의 실시예에 따른 스텁 파일은, 암호화된 실행 파일이 복호화되어 생성된 원본 실행 파일을 위한 진입점 변환에 따른 실행 흐름 변경이 수행되도록 설정될 수 있다. 즉, 실행 흐름 변경은, 스텁 파일의 설정에 따라 안드로이드 런타임(Android Runtime)에서 수행될 수 있다. 예를 들어, 실행 흐름 변경은, 안드로이드 런타임에서 사용할 원본 실행 파일의 진입점 컴포넌트를 초기화함으로써 수행될 수 있다.
예를 들어, 역공학 공격 방지 기법을 적용하지 않은 앱에 대해, 앱 패키지 내의 DEX 파일을 추출하여 버스마크를 기반으로 암호화하고, 스텁 DEX를 추가하여 패키징할 수 있다. 따라서, 역공학 공격을 수행하더라도 원본 앱의 DEX 파일은 암호화되어 있어, 원본 앱의 버스마크 정보가 없기 때문에 역공학 공격이 불가능하게 된다. 여기서, 버스마크는 어플리케이션 또는 실행 파일의 고유 식별정보를 의미할 수 있다.
또한, 본 발명의 실시예에 따르면, 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하고, 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 상기 안드로이드 어플리케이션을 패키징하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 상기 암호화된 실행 파일이 복호화되어 실행되도록 제어하는 것을 특징으로 하는, 안드로이드 어플리케이션의 역공학 방지를 수행하는 장치를 제공할 수 있으며, 이러한 장치는 도 1에서 상술한 개발자 단말(10) 또는 마켓 서버(20)에 장착될 수 있다.
따라서, 본 발명의 실시예에 따르면, 안드로이드 플랫폼 버전에 관계없이 역공학 공격 방지 기법을 적용할 수 있다. 즉, 플랫폼을 수정하여 재빌드할 필요가 없이 안드로이드 패키지의 정적 역공학 공격을 효율적으로 방지할 수 있다.
더 나아가, 본 발명의 실시예에 따르면, 역공학이 좀 더 어려운 형태로 스텁 파일을 생성할 수 있다. 예를 들어, java로 작성된 Dex file이 아닌 C로 작성된 Native 언어로 스텁 파일을 생성할 수 있다.
도 3은 본 발명의 실시예에 따라 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 실행시키는 방법을 설명하기 위한 흐름도이고, 도 4는 본 발명의 실시예에 따라 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 실행시키는 방법을 설명하기 위한 예시도이다.
도 3을 참조하면, 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법은, 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 패키징된 안드로이드 어플리케이션을 수신하는 단계(S310)와; 패키징된 안드로이드 어플리케이션에 포함된 스텁 파일을 이용하여 암호화된 실행 파일을 복호화하는 단계(S320)를 포함한다.
또한, 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법은, 암호화된 실행 파일이 복호화되어 생성된 원본 실행 파일을 위한 진입점 변환을 통하여 실행 흐름 변경을 수행하는 단계(S330)와; 변경된 실행 흐름에 따라 원본 실행 파일을 실행하는 단계(S340)를 포함한다.
도 3은 역공학 방지를 위해 진입점 변환 기법에 기반하여 안드로이드 어플리케이션을 실행시키는 방법을 설명하기 위한 것으로, 도 1에서 상술한 사용자 단말(30)에서 수행될 수 있다.
도 3에 따르면, 암호화된 실행 파일에 대한 복호화 시에 진입점 변환 기법을 통해 다양한 안드로이드 환경에서 원본 앱의 DEX 파일을 임의 수정하지 않고도 안전한 암호화 기법을 적용할 수 있다.
이를 위해 우선, 패키징한 앱 실행 시 스텁 파일이 가장 먼저 실행되도록 한다. 즉, 스텁 파일은, 안드로이드 어플리케이션에 대한 실행 시에 가장 먼저 실행되도록 설정될 수 있다. 예를 들어, 스텁 파일은, 액티비티(Activity), 서비스(Service), 컨텐츠 프로바이더(Content Provider) 및 브로드캐스트 리시버(Broadcast Receiver) 중 어떤 컴포넌트가 실행되더라도 가장 먼저 실행될 수 있고, 이를 통하여 원본 실행 파일을 복호화하고 메모리에 원본 실행 파일을 로드할 수 있다.
도 3 및 도 4를 참조하면, 스텁 파일은 안드로이드 매니페스트(Android Manifest) 파일의 설정에 따라 안드로이드 런타임에 의해 가장 먼저 실행될 수 있다(S410).
이 후, 안드로이드 런타임에서 사용할 원본 실행 파일의 진입점 컨포넌트를 식별하고 사용할 진입점 컨포넌트를 새로 생성하여 초기화한 후(S420), 진입점 변환 기법을 적용하여 안드로이드 런타임에서 원본 실행 파일을 통해 안드로이드 어플리케이션이 실행되도록 할 수 있다(S430).
따라서, 암호화된 실행 파일이 복호화되어 생성된 원본 실행 파일을 위한 진입점 변환에 따른 실행 흐름 변경이 수행되도록 설정된 스텁 파일은, 안드로이드 런타임(Android Runtime)에서 실행 흐름 변경을 수행하도록 한다. 예를 들어, 실행 흐름 변경은, 안드로이드 런타임에서 사용할 원본 실행 파일의 진입점 컴포넌트를 초기화함으로써 수행될 수 있다.
예를 들어, 스텁 파일에 “This -> parent -> application = OrigApplication()”와 같은 코드를 추가하여 메모리에 원본 실행 파일을 로드하여 실행시킬 수 있다.
또한, 본 발명의 실시예에 따르면, 암호화된 실행 파일과 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 패키징된 안드로이드 어플리케이션을 수신하고, 패키징된 상기 안드로이드 어플리케이션에 포함된 스텁 파일을 이용하여 암호화된 실행 파일을 복호화하되, 스텁 파일은, 진입점(entry point) 변환 기법에 기반하여 암호화된 실행 파일이 복호화되어 실행되도록 제어하는 것을 특징으로 하는, 안드로이드 어플리케이션의 역공학 방지를 수행하는 장치를 제공할 수 있으며, 이러한 장치는 도 1에서 상술한 사용자 단말(30)에 장착될 수 있다.
더 나아가, 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법의 동작은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 프로그램 또는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의해 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터로 읽을 수 있는 프로그램 또는 코드가 저장되고 실행될 수 있다.
컴퓨터 판독 가능 매체는 롬(rom), 램(ram), 플래시 메모리(flash memory) 등과 같이 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치를 포함할 수 있다. 프로그램 명령은 컴파일러(compiler)에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터(interpreter) 등을 사용해서 컴퓨터에 의해 실행될 수 있는 고급 언어 코드를 포함할 수 있다. 하드웨어 장치는 본 실시예의 이항 혼합 모델 기반 비임의결측 데이터 분석 방법을 수행하기 위하여 적어도 하나의 소프트웨어 모듈로 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
상술한 바와 같은 본 발명의 실시예에 따른 안드로이드 어플리케이션의 역공학 방지 방법 및 장치는, 진입점 변환 기법을 스텁 파일에 적용함으로써 안드로이드 패키지의 정적 역공학 공격을 효율적으로 방지할 수 있다.
또한, 본 발명의 실시예는 스텁 DEX를 통한 복호화 및 동적 로딩을 위해, 관리자 권한의 Starter 앱이 별도로 필요로 하지 않는 장점이 있다.
또한, 본 발명의 실시예는 어플리케이션에 대한 진입점이 액티비티(Activity)부터 시작하지 않는 경우에도 적용할 수 있으며, 시스템 레벨에서의 별도의 설정 및 설치 등을 최소화할 수 있다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
10: 개발자 단말 20: 마켓 서버
30: 사용자 단말

Claims (20)

  1. 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하는 단계; 및
    상기 암호화된 실행 파일과 상기 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 상기 안드로이드 어플리케이션을 패키징하는 단계를 포함하되,
    상기 스텁 파일은,
    진입점(entry point) 변환 기법에 기반하여 상기 암호화된 실행 파일이 복호화되어 실행되도록 제어하는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  2. 청구항 1에 있어서,
    상기 안드로이드 어플리케이션의 역공학 방지 방법은,
    상기 안드로이드 어플리케이션을 개발하는 개발자 단말 또는 상기 안드로이드 어플리케이션을 배포하는 배포 서버에서 수행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  3. 청구항 1에 있어서,
    상기 스텁 파일은,
    상기 안드로이드 어플리케이션에 대한 실행 시에 가장 먼저 실행되도록 설정된 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  4. 청구항 3에 있어서,
    상기 스텁 파일은,
    액티비티(Activity), 서비스(Service), 컨텐츠 프로바이더(Content Provider) 및 브로드캐스트 리시버(Broadcast Receiver) 중 어떤 컴포넌트가 실행되더라도 가장 먼저 실행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  5. 청구항 3에 있어서,
    상기 스텁 파일은,
    안드로이드 매니페스트(Android Manifest) 파일의 설정에 따라 가장 먼저 실행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  6. 청구항 1에 있어서,
    상기 스텁 파일은,
    상기 암호화된 실행 파일이 복호화되어 생성된 원본 실행 파일을 위한 진입점 변환에 따른 실행 흐름 변경이 수행되도록 설정하는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  7. 청구항 6에 있어서,
    상기 실행 흐름 변경은,
    상기 스텁 파일의 설정에 따라 안드로이드 런타임(Android Runtime)에서 수행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  8. 청구항 7에 있어서,
    상기 실행 흐름 변경은,
    상기 안드로이드 런타임에서 사용할 상기 원본 실행 파일의 진입점 컴포넌트를 초기화함으로써 수행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  9. 청구항 1에 있어서,
    상기 실행 파일은,
    Classes.dex 파일인 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  10. 암호화된 실행 파일과 상기 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 패키징된 안드로이드 어플리케이션을 수신하는 단계; 및
    패키징된 상기 안드로이드 어플리케이션에 포함된 상기 스텁 파일을 이용하여 상기 암호화된 실행 파일을 복호화하는 단계를 포함하되,
    상기 스텁 파일은,
    진입점(entry point) 변환 기법에 기반하여 상기 암호화된 실행 파일이 복호화되어 실행되도록 제어하는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  11. 청구항 10에 있어서,
    상기 안드로이드 어플리케이션의 역공학 방지 방법은,
    상기 안드로이드 어플리케이션을 실행하는 사용자 단말에서 수행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  12. 청구항 10에 있어서,
    상기 스텁 파일은,
    상기 안드로이드 어플리케이션에 대한 실행 시에 가장 먼저 실행되도록 설정된 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  13. 청구항 12에 있어서,
    상기 스텁 파일은,
    액티비티(Activity), 서비스(Service), 컨텐츠 프로바이더(Content Provider) 및 브로드캐스트 리시버(Broadcast Receiver) 중 어떤 컴포넌트가 실행되더라도 가장 먼저 실행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  14. 청구항 12에 있어서,
    상기 스텁 파일은,
    안드로이드 매니페스트(Android Manifest) 파일의 설정에 따라 가장 먼저 실행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  15. 청구항 10에 있어서,
    상기 스텁 파일은,
    상기 암호화된 실행 파일이 복호화되어 생성된 원본 실행 파일을 위한 진입점 변환에 따른 실행 흐름 변경이 수행되도록 설정하는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  16. 청구항 15에 있어서,
    상기 실행 흐름 변경은,
    상기 스텁 파일의 설정에 따라 안드로이드 런타임(Android Runtime)에서 수행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  17. 청구항 16에 있어서,
    상기 실행 흐름 변경은,
    상기 안드로이드 런타임에서 사용할 상기 원본 실행 파일의 진입점 컴포넌트를 초기화함으로써 수행되는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지 방법.
  18. 안드로이드 어플리케이션의 실행 파일을 추출하여 암호화하고, 상기 암호화된 실행 파일과 상기 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 상기 안드로이드 어플리케이션을 패키징하되,
    상기 스텁 파일은,
    진입점(entry point) 변환 기법에 기반하여 상기 암호화된 실행 파일이 복호화되어 실행되도록 제어하는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지를 수행하는 장치.
  19. 암호화된 실행 파일과 상기 암호화된 실행 파일을 복호화하는 스텁(stub) 파일이 포함되도록 패키징된 안드로이드 어플리케이션을 수신하고, 패키징된 상기 안드로이드 어플리케이션에 포함된 상기 스텁 파일을 이용하여 상기 암호화된 실행 파일을 복호화하되,
    상기 스텁 파일은,
    진입점(entry point) 변환 기법에 기반하여 상기 암호화된 실행 파일이 복호화되어 실행되도록 제어하는 것을 특징으로 하는,
    안드로이드 어플리케이션의 역공학 방지를 수행하는 장치.
  20. 컴퓨터에서 수행될 때, 청구항 1 내지 9에 따른 방법 중 어느 하나를 수행하는 컴퓨터 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체.
KR1020150102380A 2015-03-19 2015-07-20 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치 KR101734663B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20150038409 2015-03-19
KR1020150038409 2015-03-19

Publications (2)

Publication Number Publication Date
KR20160112904A true KR20160112904A (ko) 2016-09-28
KR101734663B1 KR101734663B1 (ko) 2017-05-24

Family

ID=57101910

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150102380A KR101734663B1 (ko) 2015-03-19 2015-07-20 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치

Country Status (1)

Country Link
KR (1) KR101734663B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210133353A (ko) * 2020-04-28 2021-11-08 주식회사 락인컴퍼니 프로그램 보안 적용방법

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102028091B1 (ko) 2017-10-19 2019-10-02 한국전자통신연구원 덱스 파일의 메모리 적재 장치 및 방법
KR20210083780A (ko) 2019-12-27 2021-07-07 주식회사 린아레나 Dex 파일 분할 및 난독화를 통한 안드로이드 앱 보안성 향상 방법 및 시스템
KR102326100B1 (ko) 2020-01-06 2021-11-17 한국전자통신연구원 안전한 안드로이드 앱 생성 및 안드로이드 플랫폼에서의 앱 설치/실행을 위한 시스템 및 방법
KR102482880B1 (ko) * 2022-09-05 2022-12-29 한화시스템(주) 무기체계 임베디드 sw 보호를 위한 역공학 방지 시스템 및 그 방법

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101415786B1 (ko) 2013-01-18 2014-08-06 건국대학교 산학협력단 온라인 실행 코드 기술과 암호화 기반 불법 복제 방지 시스템 및 그 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210133353A (ko) * 2020-04-28 2021-11-08 주식회사 락인컴퍼니 프로그램 보안 적용방법

Also Published As

Publication number Publication date
KR101734663B1 (ko) 2017-05-24

Similar Documents

Publication Publication Date Title
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
KR101734663B1 (ko) 안드로이드 어플리케이션의 역공학 방지 방법 및 이를 수행하는 장치
EP2803009B1 (en) Virtual machine device having key driven obfuscation and method
CN111143869B (zh) 应用程序包处理方法、装置、电子设备及存储介质
US9524391B2 (en) Apparatus and method of portable terminal for application data protection
CN106599629B (zh) 一种安卓应用程序加固方法及装置
CN104239757A (zh) 应用程序防止逆向的方法及装置、运行方法及终端
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
US10296728B2 (en) Method and system for providing cloud-based application security service
CN104408337A (zh) 一种apk文件防逆向的加固方法
JP6815386B2 (ja) アプリケーションのコードを保護するためのシステム、方法およびプログラム
US20180067777A1 (en) Application protection method, server, and terminal
CN114547558B (zh) 授权方法、授权控制方法及装置、设备和介质
US10867017B2 (en) Apparatus and method of providing security and apparatus and method of executing security for common intermediate language
CN103282913A (zh) 用于加载至少一个软件模块的代码的方法
CN104506504A (zh) 一种无卡终端涉密信息的安全机制及安全装置
JP2007233426A (ja) アプリケーション実行装置
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
KR20160117183A (ko) Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체
KR20170069337A (ko) 애플리케이션 보호를 위한 암호화 처리 방법, 이에 의해 생성된 프로그램 및 이를 위한 장치
KR101749209B1 (ko) 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치
KR101638257B1 (ko) 애플리케이션의 소스 코드 보호 방법 및 이를 수행하는 장치
KR20140139392A (ko) 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치
KR101667774B1 (ko) 스크립트 프로그램을 위한 보안 제공 장치 및 방법
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置

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