KR20180028666A - 역공학 방지 방법 및 장치 - Google Patents

역공학 방지 방법 및 장치 Download PDF

Info

Publication number
KR20180028666A
KR20180028666A KR1020160116269A KR20160116269A KR20180028666A KR 20180028666 A KR20180028666 A KR 20180028666A KR 1020160116269 A KR1020160116269 A KR 1020160116269A KR 20160116269 A KR20160116269 A KR 20160116269A KR 20180028666 A KR20180028666 A KR 20180028666A
Authority
KR
South Korea
Prior art keywords
file
dex
architecture
reverse engineering
apk
Prior art date
Application number
KR1020160116269A
Other languages
English (en)
Other versions
KR101863325B1 (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 단국대학교 산학협력단
Priority to KR1020160116269A priority Critical patent/KR101863325B1/ko
Publication of KR20180028666A publication Critical patent/KR20180028666A/ko
Application granted granted Critical
Publication of KR101863325B1 publication Critical patent/KR101863325B1/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/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/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (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

본 발명은 역공학 방지 방법 및 장치에 관한 것이다. 안드로이드 애플리케이션에서 암호화된 dex 파일의 복호화 시에 필요한 so 파일을 컴파일 할 때에 라이브러리 디렉토리에서 아키텍처 정보를 확인한 결과를 기반으로 하여 컴파일 함으로써, 적어도 애플리케이션을 빌드할 때에 이용된 아키텍처에 대해서는 so 파일이 정상적으로 실행될 수 있도록 하며, 나아가, 모든 아키텍처에 대해서 so 파일이 정상적으로 실행될 수 있도록 한다. 아울러, APK 파일에 두 개 이상의 dex 파일들이 있는 multidex 애플리케이션에도 역공학 방지를 적용할 수 있도록 하는 이점이 있다.

Description

역공학 방지 방법 및 장치{METHOD AND APPARATUS FOR PREVENTING REVERSE ENGINEERING}
역공학 방지 방법 및 장치에 관한 것이다. 더욱 상세하게는 안드로이드 애플리케이션의 역공학을 방지하는 방법과 이를 수행할 수 있는 장치에 관한 것이다.
최근 스마트폰 및 다양한 모바일 기기의 사용량이 증가하면서 안드로이드 기반의 애플리케이션 수가 증가하고 있으며, 대부분의 안드로이드 애플리케이션은 자바로 개발되었다. 자바는 컴파일을 할 경우 바이트 코드 형태로 변환되며, 이러한 바이트 코드는 디컴파일에 취약한 단점이 있다.
이러한 취약점 때문에 안드로이드 애플리케이션의 원본 소스 코드 노출이 발생하고 있으며, 개발자들은 디컴파일 된 소스 코드의 분석을 지연시키기 위해 난독화 기법을 적용하게 되었다. 난독화 기법은 기존 자바 난독화 기술인 식별자 난독화(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 애플리케이션에는 적용할 수 없는 문제점이 있었다.
한국등록특허 제10-1518420호, 등록일 2015년 04월 30일.
실시예에 따르면, 안드로이드 애플리케이션에서 암호화된 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 파일의 저장 위치를 보인 디렉토리 구조도이다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
본 발명의 실시예들을 설명함에 있어서 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략할 것이다. 그리고 후술되는 용어들은 본 발명의 실시예에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다.
이하, 첨부된 도면들을 참조하여 본 발명의 실시예들에 대해 살펴보기로 한다.
도 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 : 패키징부

Claims (10)

  1. 역공학 방지 장치에서 수행되는 역공학 방지 방법으로서,
    안드로이드 애플리케이션의 APK 파일 내에서 원본 dex 파일을 확인하는 단계와,
    상기 원본 dex 파일을 암호화한 암호화 dex 파일을 상기 APK 파일 내의 특정 서브 디렉토리에 저장하는 단계와,
    상기 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 상기 원본 dex 파일이 있던 위치에 저장하는 단계와,
    상기 APK 파일 내의 라이브러리 디렉토리에서 하위 디렉토리의 아키텍처 정보를 확인하는 단계와,
    상기 암호화 dex 파일의 복호화에 필요한 so 파일을 상기 아키텍처 정보에 따라 아키텍처별로 컴파일하여 상기 라이브러리 디렉토리에 저장하는 단계와,
    상기 stub dex 파일 및 상기 so 파일이 포함된 상기 APK 파일을 리패키징하는 단계를 포함하는
    역공학 방지 방법.
  2. 제 1 항에 있어서,
    상기 APK 파일 내에 상기 라이브러리 디렉토리가 존재하지 않으면 신규로 라이브러리 디렉토리를 생성하고, 기 설정된 아키텍처별로 상기 so 파일을 컴파일하여 신규로 생성한 라이브러리 디렉토리에 저장하는 단계를 더 포함하는
    역공학 방지 방법.
  3. 제 2 항에 있어서,
    상기 기 설정된 아키텍처는 안드로이드 플랫폼에서 지원하는 모든 아키텍처를 포함하는
    역공학 방지 방법.
  4. 제 1 항에 있어서,
    상기 APK 파일 내에서 N개(단, N은 2이상의 자연수)의 상기 원본 dex 파일이 확인된 경우에, 상기 암호화를 N회에 걸쳐서 수행하여 N개의 상기 암호화 dex 파일을 상기 특정 서브 디렉토리에 저장하는
    역공학 방지 방법.
  5. 제 1 항 내지 제 4 항 중 어느 한 항의 역공학 방지 방법을 프로세서가 수행하도록 하기 위하여
    컴퓨터 판독 가능한 기록매체에 저장된 컴퓨터 프로그램.
  6. 제 1 항 내지 제 4 항 중 어느 한 항의 역공학 방지 방법을 프로세서가 수행하도록 하는
    컴퓨터 프로그램이 저장된 컴퓨터 판독 가능한 기록매체.
  7. 안드로이드 애플리케이션의 APK 파일을 읽어들여 원본 dex 파일을 확인하는 파일 리더부와,
    상기 원본 dex 파일을 암호화한 암호화 dex 파일을 상기 APK 파일 내의 특정 서브 디렉토리에 저장하는 암호화부와,
    상기 암호화 dex 파일의 위치 정보를 포함하는 stub dex 파일을 생성하여 상기 원본 dex 파일이 있던 위치에 저장하는 파일 생성부와,
    상기 APK 파일 내의 라이브러리 디렉토리에서 하위 디렉토리의 아키텍처를 확인하는 아키텍처 확인부와,
    상기 암호화 dex 파일의 복호화에 필요한 so 파일을 상기 아키텍처 정보에 따라 아키텍처별로 컴파일하여 상기 라이브러리 디렉토리에 저장하는 컴파일부와,
    상기 stub dex 파일 및 상기 so 파일이 포함된 상기 APK 파일을 리패키징하는 패키징부를 포함하는
    역공학 방지 장치.
  8. 제 7 항에 있어서,
    상기 컴파일부는, 상기 APK 파일 내에 상기 라이브러리 디렉토리가 존재하지 않으면 신규로 라이브러리 디렉토리를 생성하고, 기 설정된 아키텍처별로 상기 so 파일을 컴파일하여 신규로 생성한 라이브러리 디렉토리에 저장하는
    역공학 방지 장치.
  9. 제 8 항에 있어서,
    상기 기 설정된 아키텍처는 안드로이드 플랫폼에서 지원하는 모든 아키텍처를 포함하는
    역공학 방지 장치.
  10. 제 7 항에 있어서,
    상기 암호화부는, 상기 APK 파일 내에서 N개(단, N은 2이상의 자연수)의 상기 원본 dex 파일이 확인된 경우에, 상기 암호화를 N회에 걸쳐서 수행하여 N개의 상기 암호화 dex 파일을 상기 특정 서브 디렉토리에 저장하는
    역공학 방지 장치.

KR1020160116269A 2016-09-09 2016-09-09 역공학 방지 방법 및 장치 KR101863325B1 (ko)

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 true KR20180028666A (ko) 2018-03-19
KR101863325B1 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)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109271758A (zh) * 2018-08-24 2019-01-25 广州优视网络科技有限公司 防止So文件被盗用的方法、设备、装置及服务器
CN111597514A (zh) * 2020-04-15 2020-08-28 卓望数码技术(深圳)有限公司 安卓源代码保护方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101518420B1 (ko) 2014-11-11 2015-05-07 주식회사 에스이웍스 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
KR20150134254A (ko) * 2014-05-21 2015-12-01 단국대학교 산학협력단 서버 및 휴대용 단말의 에플리케이션 보호방법 및 장치
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150134254A (ko) * 2014-05-21 2015-12-01 단국대학교 산학협력단 서버 및 휴대용 단말의 에플리케이션 보호방법 및 장치
KR101518420B1 (ko) 2014-11-11 2015-05-07 주식회사 에스이웍스 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
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

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109271758A (zh) * 2018-08-24 2019-01-25 广州优视网络科技有限公司 防止So文件被盗用的方法、设备、装置及服务器
CN111597514A (zh) * 2020-04-15 2020-08-28 卓望数码技术(深圳)有限公司 安卓源代码保护方法和装置
CN111597514B (zh) * 2020-04-15 2023-10-13 卓望数码技术(深圳)有限公司 安卓源代码保护方法和装置

Also Published As

Publication number Publication date
KR101863325B1 (ko) 2018-06-01

Similar Documents

Publication Publication Date Title
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN108229112B (zh) 一种保护应用程序、应用程序的运行方法以及装置
JP5990654B2 (ja) アプリケーションコード難読化装置及びその方法
KR101518420B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
JP5996810B2 (ja) 自己書換え基盤のアプリケーションコード難読化装置及びその方法
KR101503785B1 (ko) 동적 라이브러리를 보호하는 방법 및 장치
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
US20170024230A1 (en) Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine
WO2016078130A1 (zh) 一种防逆向apk文件的动态加载方法
KR101695639B1 (ko) 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템
CN104408337A (zh) 一种apk文件防逆向的加固方法
US20150095653A1 (en) Method and apparatus of creating application package, method and apparatus of executing application package, and recording medium storing application package
WO2015192637A1 (zh) 软件安装包的加固保护方法和装置
CN108399319B (zh) 源代码保护方法、应用服务器及计算机可读存储介质
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
CN104866739A (zh) 安卓系统中应用程序加密方法及系统
CN106228041B (zh) 一种针对Android预编译的代码保护方法
US20180067777A1 (en) Application protection method, server, and terminal
CN110309630B (zh) 一种Java代码加密方法及装置
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
KR101863325B1 (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