KR101562282B1 - 오덱스 무결성 검증 시스템 및 방법 - Google Patents

오덱스 무결성 검증 시스템 및 방법 Download PDF

Info

Publication number
KR101562282B1
KR101562282B1 KR1020130155526A KR20130155526A KR101562282B1 KR 101562282 B1 KR101562282 B1 KR 101562282B1 KR 1020130155526 A KR1020130155526 A KR 1020130155526A KR 20130155526 A KR20130155526 A KR 20130155526A KR 101562282 B1 KR101562282 B1 KR 101562282B1
Authority
KR
South Korea
Prior art keywords
odex
cache
real
time
file
Prior art date
Application number
KR1020130155526A
Other languages
English (en)
Other versions
KR20150069279A (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 KR1020130155526A priority Critical patent/KR101562282B1/ko
Publication of KR20150069279A publication Critical patent/KR20150069279A/ko
Application granted granted Critical
Publication of KR101562282B1 publication Critical patent/KR101562282B1/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

이 발명은 안드로이드 계열 스마트폰의 메모리에 로딩된 어플리케이션 실행 오덱스 로딩영역 데이터의 위변조 여부를 검출하여 무결성을 검증하는 시스템 및 방법에 관한 것이다.
이 발명에 따른 오덱스 무결성 검증 시스템은, 가상머신에 의해 캐시된 캐시 오덱스(ODEX)가 메모리에 로딩된 캐시 ODEX 로딩영역의 무결성을 검증하는 오덱스 무결성 검증 시스템에 있어서, 상기 캐시 ODEX에 대응되는 컨테이너 파일로부터 실시간으로 실시간 ODEX 파일을 생성하여 상기 캐시 ODEX 로딩영역과는 다른 영역의 메모리에 로딩하는 실시간 ODEX 로딩부와, 상기 실시간 ODEX 로딩부에서 메모리에 로딩된 실시간 ODEX 로딩영역 정보를 추출하는 실시간 ODEX 로딩영역 정보 추출부와, 상기 캐시 ODEX 로딩영역 정보를 추출하는 캐시 ODEX 로딩영역 정보 추출부와, 상기 실시간 ODEX 로딩영역으로부터 실시간 ODEX 데이터를 추출하는 실시간 ODEX 데이터 추출부와, 상기 캐시 ODEX 로딩영역으로부터 캐시 ODEX 데이터를 추출하는 캐시 ODEX 데이터 추출부와, 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터를 비교하여 상기 캐시 ODEX 데이터의 무결성을 검증하는 비교부를 포함한 것을 특징으로 한다.

Description

오덱스 무결성 검증 시스템 및 방법{System and Method for Verifying Integrity of an ODEX }
이 발명은 오덱스 무결성 검증 시스템 및 방법에 관한 것으로서, 보다 상세하게는 안드로이드 계열 스마트폰의 메모리에 로딩된 어플리케이션 실행 오덱스 로딩영역의 위변조 여부를 검출하여 무결성을 검증하는 시스템 및 방법에 관한 것이다.
현재 모바일 장치에서 사용되고 있는 가상 머신으로는 자바 가상 머신을 비롯해 안드로이드(Android)의 달빅(Dalvik), 애플(Apple) IOS에서 사용되는 LLVM 등이 있다. 가상 머신은 아무 플랫폼에서나 같은 방식으로 실행하는 프로그램을 허용하고 기초가 되는 하드웨어나 운영체제의 상세한 부분을 가져오는 독립 프로그래밍 환경을 제공하기 위함을 목적으로 한다. 가상 머신은 하드웨어나 운영체제의 제약으로부터 벗어나기 위하여 바이트 코드로 컴파일하고 실제로 어플리케이션 동작 시 중간 코드인 바이트 코드를 해석해서 어플리케이션을 실행한다.
안드로이드 계열의 스마트폰에서 어플리케이션은 APK(Android PacKage) 파일 또는 JAR(Java ARchiver) 파일 등과 같은 컨테이너 파일 형태로 스마트폰에 다운로드되어 설치된다. APK 파일 및 JAR 파일은 통상 덱스(DEX) 파일, 리소스(resources), 라이브러리(library)가 패키징되어 구성된다. 사용자가 임의의 어플리케이션을 스마트폰에 다운로드하고 실행시키면, 달빅 가상머신에 의해 컨테이너 파일을 구성하는 DEX 파일의 실행을 최적화한 ODEX(Optimizing DEX) 파일이 생성되어 메모리에 로딩된다. 해당 어플리케이션이 종료되면 이 ODEX 파일이 캐시(cache)되고, 이후 해당 어플리케이션이 다시 실행되면 이 캐시된(cached) ODEX 파일이 스마트폰의 메모리에 로딩되며, 메모리에 로딩된 캐시 ODEX 로딩영역의 코드가 실행된다.
통상적으로 스마트폰에 설치된 백신 어플리케이션은 DEX 파일이 포함된 APK 파일 또는 JAR 파일의 위변조만을 검사하기 때문에 메모리에 실제 로딩되어 수행되는 ODEX 로딩영역의 위변조를 검출할 수 없는 문제점이 있다.
이에, 대한민국 등록특허 제1299099호, "임베디드 시스템에서 최적화된 가상화 모듈을 관리하는 장치 및 방법"에서는, ODEX 파일의 변경 여부를 확인하는 기술이 개시된다.
이 선행특허는, 어플리케이션을 식별하기 위한 식별정보와, APK 파일의 저장 경로를 나타내는 이름, 및 ODEX 파일의 변경 유무를 확인하기 위한 검증 데이터를 포함하는 검증 테이블을 통해 구현된다. 선행특허는 어플리케이션의 설치 또는 업데이트시, 해당 어플리케이션의 ODEX 파일로부터 검증 데이터를 생성하여 검증테이블에 저장하고 아울러 ODEX 파일에 포함하여 저장시킨다. 이후, 어플리케이션의 실행시 검증테이블에 기저장된 검증 데이터와 ODEX 파일에 기저장된 검증 데이터를 비교하여 그 변경 여부를 검증함으로써, ODEX 파일의 무결성을 검증한다.
그러나, 상술한 선행특허는 APK 파일이 업데이트될 때마다 DEX 파일로부터 ODEX 파일의 검증 데이터를 생성하여 검증 테이블을 업데이트하여야 하는 문제점이 있다. 또한, 검증 테이블에 기저장된 검증 데이터와 ODEX 파일에 기저장된 검증 데이터를 비교하여 무결성을 검증하기 때문에 검증 테이블의 검증 데이터와 ODEX 파일의 검증 데이터가 모두 변조될 경우에는 해당 ODEX 파일의 무결성을 검증할 수 없는 문제점이 있다. 또한, 무결성 검증에 사용되는 두 검증 데이터가 모두 스마트폰에 저장되어 있으므로, 두 검증 데이터가 위변조될 가능성이 있어 보안의 허점이 있다.
상술한 종래기술의 문제점을 충족시키기 위하여 안출된 이 발명의 목적은, 어플리케이션 실행 이벤트 발생시 무결성이 검증된 컨테이너 파일(APK 파일, JAR 파일 등)로부터 메모리에 실시간으로 로딩되는 실시간 ODEX 로딩영역과, ODEX 파일로 캐시되었다가 상기 어플리케이션 실행 이벤트에 의해 메모리에 로딩되는 캐시 ODEX 로딩영역을 비교함으로써, 캐시 ODEX 로딩영역의 무결성을 검증하는 시스템 및 방법을 제공하기 위한 것이다.
상술한 목적을 달성하기 위한 이 발명에 따른 오덱스 무결성 검증 시스템은, 가상머신에 의해 캐시된 캐시 오덱스(ODEX)가 메모리에 로딩된 캐시 ODEX 로딩영역의 무결성을 검증하는 오덱스 무결성 검증 시스템에 있어서, 상기 캐시 ODEX에 대응되는 컨테이너 파일로부터 실시간으로 실시간 ODEX 파일을 생성하여 상기 캐시 ODEX 로딩영역과는 다른 영역의 메모리에 로딩하는 실시간 ODEX 로딩부와, 상기 실시간 ODEX 로딩부에서 메모리에 로딩된 실시간 ODEX 로딩영역 정보를 추출하는 실시간 ODEX 로딩영역 정보 추출부와, 상기 캐시 ODEX 로딩영역 정보를 추출하는 캐시 ODEX 로딩영역 정보 추출부와, 상기 실시간 ODEX 로딩영역으로부터 실시간 ODEX 데이터를 추출하는 실시간 ODEX 데이터 추출부와, 상기 캐시 ODEX 로딩영역으로부터 캐시 ODEX 데이터를 추출하는 캐시 ODEX 데이터 추출부와, 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터를 비교하여 상기 캐시 ODEX 데이터의 무결성을 검증하는 비교부를 포함한 것을 특징으로 한다.
또한, 이 발명에 따른 오덱스 무결성 검증 방법은, 가상머신에 의해 캐시된 캐시 오덱스(ODEX)가 메모리에 로딩된 캐시 ODEX 로딩영역의 무결성을 검증하는 오덱스 무결성 검증 시스템에서의 오덱스 무결성 검증 방법에 있어서, 상기 오덱스 무결성 검증 시스템이 상기 캐시 ODEX에 대응되는 컨테이너 파일로부터 실시간으로 실시간 ODEX 파일을 생성하여 상기 캐시 ODEX 로딩영역과는 다른 영역의 메모리에 로딩하는 제1단계와, 상기 오덱스 무결성 검증 시스템이 상기 제1단계에서 로딩된 실시간 ODEX 로딩영역 정보를 추출하는 제2단계와, 상기 오덱스 무결성 검증 시스템이 상기 캐시 ODEX 로딩영역 정보를 추출하는 제3단계와, 상기 오덱스 무결성 검증 시스템이 상기 실시간 ODEX 로딩영역으로부터 실시간 ODEX 데이터를 추출하는 제4단계와, 상기 오덱스 무결성 검증 시스템이 상기 캐시 ODEX 로딩영역으로부터 캐시 ODEX 데이터를 추출하는 제5단계와, 상기 오덱스 무결성 검증 시스템이 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터를 비교하여 상기 캐시 ODEX 데이터의 무결성을 검증하는 제6단계를 포함한 것을 특징으로 한다.
이상과 같이 이 발명에 따르면, 어플리케이션이 업데이트될 때마다 검증 데이터를 새롭게 생성하여 검증 테이블을 갱신하지 않아도 되고, 단말 내에 별도의 검증 데이터를 저장하지 않으면서, 어플리케이션 실행 이벤트가 발생될 때 무결성이 검증된 컨테이너 파일을 이용함으로써, 캐시 ODEX 로딩영역의 위변조 여부 및 무결성을 정확하게 검증할 수 있는 잇점이 있다.
도 1은 이 발명이 적용되는 일반적인 안드로이드(Android) 구조를 간략하게 도시한 도면이다.
도 2는 이 발명에 따른 오덱스 무결성 검증 시스템을 도시한 구성 블록도이다.
도 3은 이 발명에 따른 오덱스 무결성 검증 방법을 도시한 동작 흐름도이다.
이하, 첨부된 도면을 참조하며 이 발명의 실시예에 따른 오덱스 무결성 검증 시스템 및 방법을 보다 상세하게 설명한다.
도 1은 이 발명이 적용되는 일반적인 안드로이드(Android) 구조를 간략하게 도시한 도면이다.
안드로이드 운영체제(OS)(11)는 리눅스 커널(12) 위에서 동작하며, 다양한 안드로이드 시스템 구성요소에서 사용되는 C/C++ 라이브러리들을 포함한다. 안드로이드 운영체제(11)는 휴대 전화를 비롯한 휴대용 장치를 위한 운영 체제와 미들웨어, 사용자 인터페이스, 그리고 표준 어플리케이션(웹 브라우저, 이메일 클라이언트, 단문 메시지 서비스(SMS), 멀티미디어 메시지 서비스(MMS) 등)을 포함하고 있는 소프트웨어 스택이자 모바일 운영 체제이다. 리눅스 커널(12)은 메모리, 네트워크, 보안, 드라이버와 관련된 코어 시스템 서비스를 관리한다.
안드로이드 운영체제(11)는 개발자들이 자바 언어로 어플리케이션을 작성할 수 있게 하였으며, 컴파일된 바이트코드를 구동할 수 있는 안드로이드 런타임(13)을 제공한다. 또한 안드로이드 소프트웨어 개발 키트(SDK)를 통해 애플케이션을 개발하기 위해 필요한 각종 도구들과 API를 제공한다. 안드로이드 런타임(13)은 자바 프로그래밍의 기능을 사용해서 어플리케이션 동작을 처리한다.
안드로이드 운영체제(11)는 달빅 가상머신(Davic Virtual Machine)(14)을 통해 자바로 작성된 어플리케이션(15)을 별도의 프로세스에서 실행하는 구조로 되어 있다. 달빅 가상머신(14)은 레지스터 머신 형태의 가상 머신으로서, 모든 안드로이드 어플리케이션(15)은 달빅 가상머신(14) 내에서 자신의 인스턴스를 가지고 자신의 프로세스 내에서 동작하며, 자신에게 할당된 영역 이외의 자원 영역으로는 접근 자체가 제한된다. 이러한 달빅 가상머신(14)은 임베디드 단말에 최적화된 가상머신(VM)으로서, 메모리 보호(Memory Protection), 가비지 컬렉션(Garbage-collection), 라이프 사이클 관리 등을 수행한다.
달빅 가상머신(14)은 각각의 가비지콜렉터를 사용하여 각 어플리케이션(15)에 할당된 메모리를 해제하거나, 메모리가 부족할 때에는 가비지콜렉션을 실행시켜 어플리케이션에서 더 이상 참조하지 않는 오브젝트가 점유하고 있는 메모리를 회수하여 할당가능한 상태로 확보한다.
달빅 가상머신(14)은 어플리케이션(15)의 설치와 실행시 하드웨어가 인식할 수 있도록 컴파일과 해석을 수행한다. 달빅 가상머신(14)은 어플리케이션 컨테이너 파일(APK 파일, JAR 파일 등)에 포함된 DEX 파일을 최적화해서 ODEX 파일을 생성하고, 한번 실행된 ODEX 파일을 캐시하며, 해당 어플리케이션의 다음 실행 이벤트 발생시 캐시된 ODEX 파일을 메모리에 로딩한다. 캐시된 ODEX 파일이 메모리에 로딩되면, 그 캐시 ODEX 로딩영역의 코드가 실행되어 해당 어플리케이션의 기능이 수행된다.
도 2는 이 발명의 제1실시예에 따른 오덱스 무결성 검증 시스템을 도시한 구성 블록도이다.
안드로이드 단말에서 어플리케이션 설치 이벤트 발생시, 달빅 가상머신(14)은 컨테이너 파일에 포함된 DEX 파일을 최적화해서 ODEX 파일을 생성하고, 한번 실행된 ODEX를 캐시하여 캐시 ODEX 파일을 저장한다. 이후, 해당 어플리케이션의 실행 이벤트 발생시, 달빅 가상머신(14)은 캐시 ODEX 파일을 메모리에 로딩한다. 이 캐시 ODEX 파일이 메모리에 로딩된 영역, 즉 캐시 ODEX 로딩영역의 코드가 실제로 실행된다. 이때, 캐시 ODEX 파일 자체, 또는 캐시 ODEX 파일이 로딩되는 과정, 또는 캐시 ODEX 로딩영역의 코드가 위변조될 경우, 해당 캐시 ODEX 로딩영역의 코드가 실행되어 악의적으로 동작할 수 있다. 따라서, 실제로 코드가 실행되는 영역인 캐시 ODEX 로딩영역의 무결성을 검증하는 것이 중요하다.
이 발명에 따른 오덱스 무결성 검증 시스템은, 캐시 ODEX 파일이 메모리에 로딩되어 실제로 실행되는 영역, 즉 캐시 ODEX 로딩영역의 위변조 여부를 검출하여 무결성을 검증한다. 이 발명에 따른 오덱스 무결성 검증 시스템 및 방법은 어플리케이션 내에 내장되어 구동되는 것이 바람직하다.
안드로이드 단말에서 어플리케이션 실행 이벤트가 발생할 때, 이 발명에 따른 오덱스 무결성 검증 시스템이 실행되는 것이 바람직하다.
이 발명에 따른 오덱스 무결성 검증 시스템은, 컨테이너 파일 저장부(20)에 저장된 어플리케이션 APK 파일 또는 JAR 파일에 포함된 덱스(DEX) 파일을 실시간으로 추출하여 ODEX 파일로 변환하고 메모리에 로딩하는 실시간 ODEX 로딩부(21)와, 상기 실시간 ODEX 로딩부(21)에서 메모리에 로딩된 실시간 ODEX 로딩영역 정보를 추출하는 실시간 ODEX 로딩영역 정보 추출부(22)와, 상기 캐시 ODEX 파일이 메모리에 로딩된 캐시 ODEX 로딩영역 정보를 추출하는 캐시 ODEX 로딩영역 정보 추출부(23)와, 상기 실시간 ODEX 로딩영역으로부터 실시간 ODEX 데이터를 추출하는 실시간 ODEX 데이터 추출부(24)와, 상기 캐시 ODEX 로딩영역으로부터 캐시 ODEX 데이터를 추출하는 캐시 ODEX 데이터 추출부(25)와, 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터를 비교하여 상기 캐시 ODEX 데이터의 무결성을 검증하는 비교부(26)를 포함한다.
상기 오덱스 무결성 검증 시스템은 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터가 동일하면, 상기 캐시 ODEX 로딩영역의 코드를 실행하는 캐시 ODEX 실행부(27)를 더 포함한다.
상기 실시간 ODEX 로딩부(21)의 제1실시예로서, 상기 컨테이너 파일로부터 DEX 파일을 추출하고 추출된 DEX 파일을 복사하여 상기 컨테이너 파일의 전체경로명(fullpath, 경로와 파일명이 포함)과는 다른 전체경로명의 복사 DEX 파일을 생성한다. 즉, DEX 파일을 그의 경로와 파일명 중 적어도 하나를 변경하면서 복사하여 DEX 파일의 전체경로명과 복사 DEX 파일의 전체경로명이 달라지도록 한다. 이후, 상기 복사 DEX 파일을 메모리에 로딩하고, 상기 복사 DEX 파일의 클래스를 추출하여 상기 추출된 클래스를 호출한다. 상기 복사 DEX 파일을 메모리에 로딩할 때, 임의의 명령어 그룹으로 구현할 수 있다. 상기 복사 DEX 파일의 클래스는 캐시 ODEX 또는 DEX 파일의 클래스 부분을 파싱하여 추출할 수도 있고, 미리 약속되어 있는 클래스 이름을 사용할 수도 있다. 상기 실시간 ODEX 로딩부(21)가 상기 컨테이너 파일로부터 DEX 파일을 추출하기에 앞서, 통상의 모바일 백신 어플리케이션이 상기 컨테이너 파일 및 DEX 파일의 위변조 여부를 검증하는 것이 바람직하다. 상기 실시간 ODEX 로딩부(21)는 추출된 DEX 파일을 복사한 후 실시간 ODEX를 메모리에 로딩하였으나, 이 발명은 이에 한정되지 아니하며 추출된 DEX 파일을 메모리에 직접 로딩하고, 그 DEX 로딩영역으로부터 실시간 ODEX를 로딩할 수도 있다.
상기 실시간 ODEX 로딩부(21)의 또 다른 실시예로서, 덱스 로딩 함수(예컨대, DexClassLoader API 등)를 사용하여 실시간으로 ODEX를 메모리에 로딩한다. 이 DexClassLoader API는 어플리케이션 컨테이너 파일(APK 파일, JAR 파일 등)로부터 DEX 파일을 추출하고 ODEX로 변환하여 메모리에 로딩하는 기능을 수행하는 API 함수이다. 덱스 로딩 함수는 상술한 DexClassLoader API 외에 다른 API 함수 또는 임의의 명령어 그룹으로 구현할 수도 있다.
DexClassLoader API을 이용하면 제1실시예와 같이 어플리케이션 컨테이너 파일로부터 DEX 파일을 추출하여 다른 전체경로명으로 복사할 필요가 없어진다. 하지만, DexClassLoader API를 사용하더라도 실시간 ODEX 로딩영역과 캐시 ODEX 로딩영역이 서로 다르게 되도록 설정하는 것이 중요하다. 임의의 컨테이너 파일에 대해 DexClassLoader API를 적용할 경우, 적용대상인 컨테이너 파일의 전체경로명(경로 및 파일명 포함)과, DexClassLoader API 적용 결과물인 출력 ODEX의 전체경로명(경로 및 파일명 포함)을 설정해야 한다.
다른 실시예로서, 제2실시예에 따른 실시간 ODEX 로딩부(21)는 상기 컨테이너 파일을 상기 컨테이너 파일과는 다른 전체경로명으로 복사하고, 복사된 컨테이너 파일에 대해 DexClassLoader API를 적용한다. 또 다른 실시예로서, 제3실시예에 따른 실시간 ODEX 로딩부(21)는 상기 컨테이너 파일에 대해 직접 DexClassLoader API를 적용하면서 출력 ODEX의 전체경로명을 상기 컨테이너 파일의 전체경로명과는 다르게 설정한다. 즉, 컨테이너 파일의 경로와 파일명 중 적어도 하나가 변경된 상태로 컨테이너 파일이 복사되어 DexClassLoader API에 적용되거나, 컨테이너 파일의 경로와 파일명 중 적어도 하나가 변경된 전체경로명으로 DexClassLoader API의 적용 결과물인 ODEX가 출력되도록 한다.
실시간 ODEX 로딩영역 정보 추출부(22)와 캐시 ODEX 로딩영역 정보 추출부(23)는 논리 디렉토리 맵스(maps)정보를 사용하여 실시간 ODEX 로딩영역과 캐시 ODEX 로딩영역 정보를 각각 추출한다.
논리 디렉토리 맵스 정보를 이용하는 방법을 설명한다. 일반적으로 /proc/self/maps 파일에는 해당 어플리케이션 프로세스에 관련된 모든 파일들에 대해 그 전체경로명(경로 및 파일명 포함)을 색인으로 하여 저장영역 정보가 기록된다. 즉, 이 발명에 따른 어플리케이션의 경우, APK 파일의 저장영역 정보, 캐시 ODEX 파일의 저장영역 정보, 라이브러리 저장영역 정보, 및 캐시 ODEX 로딩영역 정보 및 실시간 ODEX 로딩영역 정보가 모두 기록된다.
따라서, 실시간 ODEX 로딩영역 정보 추출부(22)는 논리 디렉토리 맵스 파일에 저장된 저장영역 정보 중 실시간 ODEX 파일의 전체경로명을 기준으로 실시간 ODEX 로딩영역 정보를 추출한다. 또한, 캐시 ODEX 로딩영역 정보 추출부(23)는 논리 디렉토리 맵스 파일에 저장된 저장영역 정보 중 캐시 ODEX 파일의 전체경로명을 기준으로 캐시 ODEX 로딩영역 정보를 추출한다. 통상적으로 캐시 ODEX 파일의 전체경로명은 원(original) 컨테이너 파일의 전체경로명에 의해 결정된다. 한편, 이 발명에 따른 상기 실시간 ODEX의 전체경로명은 실시간 ODEX 로딩부(21)에 의해 저장되는 복사 DEX 파일의 전체경로명, 복사 컨테이너 파일의 전체경로명, 또는 DexClassLoader API 적용시 설정된 출력 ODEX의 전체경로명 등에 의해 결정된다.
실시간 ODEX 데이터 추출부(24)는 실시간 ODEX 로딩영역 정보 추출부(22)에서 추출된 실시간 ODEX 로딩영역에 저장된 실시간 ODEX 데이터를 추출한다. 캐시 ODEX 데이터 추출부(25)는 캐시 ODEX 로딩영역 정보 추출부(23)에서 추출된 캐시 ODEX 로딩영역에 저장된 캐시 ODEX 데이터를 추출한다. 비교부(26)는 실시간 ODEX 데이터와 캐시 ODEX 데이터를 비교하여, 캐시 ODEX 로딩영역에 저장된 캐시 ODEX 데이터의 무결성을 검증한다.
비교부(26)의 비교 결과, 실시간 ODEX 데이터와 캐시 ODEX 데이터가 동일하면 캐시 ODEX 데이터가 위변조되지 않은 것으로 판단하고, 캐시 ODEX 실행부(27)는 캐시 ODEX 로딩영역의 코드가 계속하여 실행되도록 한다. 그러나, 비교부(26)의 비교 결과, 실시간 ODEX 데이터와 캐시 ODEX 데이터가 동일하지 않으면, 캐시 ODEX 데이터가 위변조된 것으로 판단하고, 캐시 ODEX 실행부(27)는 캐시 ODEX 로딩영역의 코드가 실행되지 못하도록 차단한다.
도 3은 이 발명에 따른 오덱스 무결성 검증 방법을 도시한 동작 흐름도이다.
이 발명은 어플리케이션의 실행 이벤트가 발생되면, 캐시 ODEX 파일이 메모리에 로딩된 캐시 ODEX 데이터와, 컨테이너 파일 또는 DEX 파일을 기반으로 상기 캐시 ODEX 파일과 다른 경로로 로딩시킨 실시간 ODEX 데이터를 비교하여, 캐시 ODEX 로딩영역 데이터의 무결성을 검증한 후 그 계속적인 실행을 허용 또는 차단한다.
이 발명에 따른 오덱스 무결성 검증 시스템은, 컨테이너 파일 저장부(20)에 저장된 컨테이너 파일에 포함된 덱스(DEX) 파일을 실시간 ODEX 파일로 변환하여 메모리에 로딩한다(S31). 단계 S31 수행 전, 통상적인 모바일 백신 어플리케이션이 컨테이너 파일 파일 및 덱스 파일의 무결성을 검증하는 것이 바람직하다.
단계 S31의 제1실시예는, 상기 컨테이너 파일로부터 DEX 파일을 추출하고 추출된 DEX 파일을 복사하여 상기 컨테이너 파일과는 다른 전체경로명의 복사 DEX 파일을 생성하고, 상기 복사 DEX 파일을 메모리에 로딩하고, 상기 복사 DEX 파일의 클래스를 추출하여 상기 추출된 클래스를 호출한다. 단계 S31의 제2실시예는, 상기 컨테이너 파일을 상기 컨테이너 파일과는 다른 전체경로명으로 복사하고, 복사된 컨테이너 파일에 대해 DexClassLoader API를 적용한다. 단계 S31의 제3실시예는, 상기 컨테이너 파일에 대해 직접 DexClassLoader API를 적용하면서 출력 ODEX의 전체경로명을 상기 컨테이너 파일의 전체경로명과는 다르게 설정한다.
다음, 상기 캐시 ODEX 파일이 메모리에 로딩된 캐시 ODEX 로딩영역 정보와 상기 실시간 ODEX 파일이 메모리에 로딩된 실시간 ODEX 로딩영역 정보를 추출하고(S32), 상기 각각의 로딩영역에서 캐시 ODEX 데이터와 실시간 ODEX 데이터를 추출한다(S33).
다음, 추출된 캐시 ODEX 데이터와 추출된 실시간 ODEX 데이터를 비교한다(S34).
단계 S34의 비교 결과, 캐시 ODEX 데이터와 실시간 ODEX 데이터가 일치하면(S35), 캐시 ODEX 로딩영역의 코드의 실행이 계속되도록 허용한다(S36). 그러나, 캐시 ODEX 데이터와 실시간 ODEX 데이터가 일치하지 않으면(S35), 캐시 ODEX 로딩영역의 코드가 실행되지 못하도록 차단한다(S37).
이상에서 본 발명에 대한 기술사상을 첨부도면과 함께 서술하였지만, 이는 본 발명의 가장 양호한 실시예를 예시적으로 설명한 것이지 본 발명을 한정하는 것은 아니다. 또한, 이 기술분야의 통상의 지식을 가진 자라면 누구나 본 발명의 기술사상의 범주를 이탈하지 않는 범위 내에서 다양한 변형 및 모방이 가능함은 명백한 사실이다.
11 : 안드로이드 운영체제 12 : 리눅스 커널
13 : 안드로이드 런타임 14 : 달빅 가상머신
15 : 어플리케이션 20 : 컨테이너 파일 저장부
21 : 실시간 ODEX 로딩부
22 : 실시간 ODEX 로딩영역 정보 추출부
23 : 캐시 ODEX 로딩영역 정보 추출부
24 : 실시간 ODEX 데이터 추출부 25 : 캐시 ODEX 데이터 추출부
26 : 비교부 27 : 캐시 ODEX 실행부

Claims (12)

  1. 가상머신에 의해 캐시된 캐시 오덱스(ODEX)가 메모리에 로딩된 캐시 ODEX 로딩영역의 무결성을 검증하는 오덱스 무결성 검증 시스템에 있어서,
    상기 캐시 ODEX에 대응되는 컨테이너 파일로부터 상기 컨테이너 파일의 전체경로명과 다른 전체경로명으로 실시간 ODEX 파일을 생성하여 상기 실시간 ODEX 파일이 상기 캐시 ODEX 로딩영역과는 다른 영역의 메모리에 로딩되도록 하는 실시간 ODEX 로딩부와,
    상기 실시간 ODEX 로딩부에서 메모리에 로딩된 실시간 ODEX 로딩영역 정보를 추출하는 실시간 ODEX 로딩영역 정보 추출부와,
    상기 캐시 ODEX 로딩영역 정보를 추출하는 캐시 ODEX 로딩영역 정보 추출부와,
    상기 실시간 ODEX 로딩영역으로부터 실시간 ODEX 데이터를 추출하는 실시간 ODEX 데이터 추출부와,
    상기 캐시 ODEX 로딩영역으로부터 캐시 ODEX 데이터를 추출하는 캐시 ODEX 데이터 추출부와,
    상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터를 비교하여 상기 캐시 ODEX 데이터의 무결성을 검증하는 비교부를 포함한 것을 특징으로 하는 오덱스 무결성 검증 시스템.
  2. 제 1 항에 있어서, 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터가 동일하지 않으면 상기 캐시 ODEX 로딩영역의 코드가 실행되지 못하도록 차단하는 캐시 ODEX 실행부를 더 포함한 것을 특징으로 하는 오덱스 무결성 검증 시스템.
  3. 제 1 항에 있어서, 상기 실시간 ODEX 로딩부는 상기 컨테이너 파일로부터 DEX 파일을 추출하고, 상기 DEX 파일을 복사하여 상기 컨테이너 파일과는 다른 전체경로명의 복사 DEX 파일을 생성하고, 상기 복사 DEX 파일을 상기 메모리에 로딩하고, 상기 복사 DEX 파일의 클래스를 호출하는 것을 특징으로 하는 오덱스 무결성 검증 시스템.
  4. 제 1 항에 있어서, 상기 실시간 ODEX 로딩부는 상기 컨테이너 파일을 상기 컨테이너 파일과는 다른 전체경로명으로 복사하고, 복사된 컨테이너 파일에 대해 덱스 로딩 함수를 적용하는 것을 특징으로 하는 오덱스 무결성 검증 시스템.
  5. 제 1 항에 있어서, 상기 실시간 ODEX 로딩부는 상기 컨테이너 파일에 대해 덱스 로딩 함수를 적용하면서 출력 ODEX의 전체경로명을 상기 컨테이너 파일의 전체경로명과는 다르게 설정하는 것을 특징으로 하는 오덱스 무결성 검증 시스템.
  6. 제 1 항에 있어서, 상기 실시간 ODEX 로딩영역 정보 추출부와 상기 캐시 ODEX 로딩영역 정보 추출부는 논리 디렉토리 맵스(maps) 정보를 사용하여 상기 실시간 ODEX 로딩영역 정보와 상기 캐시 ODEX 로딩영역 정보를 추출하는 것을 특징으로 하는 오덱스 무결성 검증 시스템.
  7. 가상머신에 의해 캐시된 캐시 오덱스(ODEX)가 메모리에 로딩된 캐시 ODEX 로딩영역의 무결성을 검증하는 오덱스 무결성 검증 시스템에서의 오덱스 무결성 검증 방법에 있어서,
    상기 오덱스 무결성 검증 시스템이 상기 캐시 ODEX에 대응되는 컨테이너 파일로부터 상기 컨테이너 파일의 전체경로명과 다른 전체경로명으로 실시간 ODEX 파일을 생성하여 상기 실시간 ODEX 파일이 상기 캐시 ODEX 로딩영역과는 다른 영역의 메모리에 로딩되도록 하는 제1단계와,
    상기 오덱스 무결성 검증 시스템이 상기 제1단계에서 로딩된 실시간 ODEX 로딩영역 정보를 추출하는 제2단계와,
    상기 오덱스 무결성 검증 시스템이 상기 캐시 ODEX 로딩영역 정보를 추출하는 제3단계와,
    상기 오덱스 무결성 검증 시스템이 상기 실시간 ODEX 로딩영역으로부터 실시간 ODEX 데이터를 추출하는 제4단계와,
    상기 오덱스 무결성 검증 시스템이 상기 캐시 ODEX 로딩영역으로부터 캐시 ODEX 데이터를 추출하는 제5단계와,
    상기 오덱스 무결성 검증 시스템이 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터를 비교하여 상기 캐시 ODEX 데이터의 무결성을 검증하는 제6단계를 포함한 것을 특징으로 하는 오덱스 무결성 검증 방법.
  8. 제 7 항에 있어서, 상기 실시간 ODEX 데이터와 상기 캐시 ODEX 데이터가 동일하지 않으면 상기 캐시 ODEX 로딩영역의 코드가 실행되지 못하도록 차단하는 제7단계를 더 포함한 것을 특징으로 하는 오덱스 무결성 검증 방법.
  9. 제 7 항에 있어서, 상기 제1단계는 상기 컨테이너 파일로부터 DEX 파일을 추출하고, 상기 DEX 파일을 복사하여 상기 컨테이너 파일과는 다른 전체경로명의 복사 DEX 파일을 생성하고, 상기 복사 DEX 파일을 상기 메모리에 로딩하고, 상기 복사 DEX 파일의 클래스를 호출하는 것을 특징으로 하는 오덱스 무결성 검증 방법.
  10. 제 7 항에 있어서, 상기 제1단계는 상기 컨테이너 파일을 상기 컨테이너 파일과는 다른 전체경로명으로 복사하고, 복사된 컨테이너 파일에 대해 덱스 로딩 함수를 적용하는 것을 특징으로 하는 오덱스 무결성 검증 방법.
  11. 제 7 항에 있어서, 상기 제1단계는 상기 컨테이너 파일에 대해 덱스 로딩 함수를 적용하면서 출력 ODEX의 전체경로명을 상기 컨테이너 파일의 전체경로명과는 다르게 설정하는 것을 특징으로 하는 오덱스 무결성 검증 방법.
  12. 제 7 항에 있어서, 상기 제2단계와 상기 제3단계는 논리 디렉토리 맵스(maps) 정보를 사용하여 상기 실시간 ODEX 로딩영역 정보와 상기 캐시 ODEX 로딩영역 정보를 추출하는 것을 특징으로 하는 오덱스 무결성 검증 방법.
KR1020130155526A 2013-12-13 2013-12-13 오덱스 무결성 검증 시스템 및 방법 KR101562282B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130155526A KR101562282B1 (ko) 2013-12-13 2013-12-13 오덱스 무결성 검증 시스템 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130155526A KR101562282B1 (ko) 2013-12-13 2013-12-13 오덱스 무결성 검증 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20150069279A KR20150069279A (ko) 2015-06-23
KR101562282B1 true KR101562282B1 (ko) 2015-10-21

Family

ID=53516445

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130155526A KR101562282B1 (ko) 2013-12-13 2013-12-13 오덱스 무결성 검증 시스템 및 방법

Country Status (1)

Country Link
KR (1) KR101562282B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180025380A (ko) 2016-08-30 2018-03-09 한남대학교 산학협력단 Apk 파일 동적로딩 기법을 이용한 뱅킹 어플리케이션 무결성 검증 시스템 및 무결성 검증방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180025380A (ko) 2016-08-30 2018-03-09 한남대학교 산학협력단 Apk 파일 동적로딩 기법을 이용한 뱅킹 어플리케이션 무결성 검증 시스템 및 무결성 검증방법

Also Published As

Publication number Publication date
KR20150069279A (ko) 2015-06-23

Similar Documents

Publication Publication Date Title
KR101966754B1 (ko) 소프트웨어 코드의 생성 및 캐싱 기법
CN108027722B (zh) 在编译和部署中动态更新应用
Sen et al. Jalangi: A selective record-replay and dynamic analysis framework for JavaScript
US11507669B1 (en) Characterizing, detecting and healing vulnerabilities in computer code
CN107506221B (zh) 应用程序升级方法、装置及设备
CN102521081B (zh) 修复遭破坏的软件
CN105786538B (zh) 基于安卓系统的软件升级方法和装置
US20160378989A1 (en) Apparatus and method for monitoring android platform-based application
US7913265B2 (en) Method of loading software with an intermediate object oriented language in a portable device
CN102473223B (zh) 信息处理装置以及信息处理方法
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
CN108229148A (zh) 一种基于Android虚拟机的沙箱脱壳方法及系统
EP3113019A1 (en) Policy-based compression of machine code generated by a virtual machine
CN106897607A (zh) 一种应用程序监控方法及装置
CN112099880B (zh) 场景驱动的应用程序约减方法和系统
CN111880804A (zh) 应用程序代码的处理方法及装置
KR102173151B1 (ko) 원본코드 자동추출장치 및 원본코드 자동추출방법
CN114371859A (zh) 应用软件rasp程序更新方法、服务器、电子设备及存储介质
KR101562282B1 (ko) 오덱스 무결성 검증 시스템 및 방법
CN109408073B (zh) 一种Android非侵入式应用重打包方法
CN111625296A (zh) 一种通过构建代码副本保护程序的方法
CN103885875A (zh) 脚本验证装置及方法
US20220308991A1 (en) Test processing method and information processing apparatus
CN106778270B (zh) 一种恶意应用程序的检测方法及系统
KR101530530B1 (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: 20181015

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191015

Year of fee payment: 5