KR20200076915A - 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치 - Google Patents

안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치 Download PDF

Info

Publication number
KR20200076915A
KR20200076915A KR1020180165891A KR20180165891A KR20200076915A KR 20200076915 A KR20200076915 A KR 20200076915A KR 1020180165891 A KR1020180165891 A KR 1020180165891A KR 20180165891 A KR20180165891 A KR 20180165891A KR 20200076915 A KR20200076915 A KR 20200076915A
Authority
KR
South Korea
Prior art keywords
register
instruction
next register
instruction address
target program
Prior art date
Application number
KR1020180165891A
Other languages
English (en)
Other versions
KR102225838B1 (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 KR1020180165891A priority Critical patent/KR102225838B1/ko
Publication of KR20200076915A publication Critical patent/KR20200076915A/ko
Application granted granted Critical
Publication of KR102225838B1 publication Critical patent/KR102225838B1/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/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

본 발명은 캐시 구조의 차이를 이용하여 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치에 관한 것으로, 대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장하는 단계, 상기 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장하는 단계, 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어를 상기 제2 다음 레지스터의 명령어 주소에 오버라이트(overwrite)하는 단계 및 상기 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 단계를 포함한다.

Description

안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치{ANTI-EMULATION METHOD AND APPARATUS FOR PROTECTING ANDROID APPLICATIONS}
본 발명은 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치에 관한 것으로, 보다 상세하게는 캐시 구조의 차이를 이용하여 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 안티 에뮬레이션 방법 및 장치에 관한 것이다.
안드로이드 소프트웨어는 손쉽게 다운 및 분석이 가능하다. 이러한 특징으로 인해 악성 소프트웨어 개발자 또는 해커들은 보안기술을 적용한 소프트웨어를 분석하여 취약점 또는 공격 가능한 지점을 찾아 공격하는 방식으로 악성 행위에 이용한다.
해커 기술에는 의미 없는 코드 입력을 통해 분석 시간을 지연시키거나, 프로그램을 역공격하여 혼란스럽게 하는 기법이 있다. 이는 정적 분석을 방어하는 기법이며, 동적 분석을 방어하는 기법으로는 안티 루팅, 안티 디버깅과 안티 에뮬레이터가 있다.
에뮬레이터 기법은 PC에서 가상 휴대폰을 실행하고, 그 가상 안드로이드 환경에서 어플리케이션을 동적 실행하면서 내부에 필요한 정보를 뽑아내는 방식을 사용한다. 특히, 레지스터 정보 등 정적 분석으로 분석하기 힘든 정보들은 동적 분석에 약하다. 예를 들면, 에뮬레이터 기법은 휴대폰 번호, CPU 정보 및 build.prop 파일을 읽어서 bandwidth 정보, wifi 모듈, Bluetooth 모듈을 확인하고, 배터리 용량 변화를 감지하거나, 스크린 터치를 감지한다.
기존의 안티 에뮬레이터 기술은 안티 루팅 기술과 함께 적용해야 한다는 한계가 존재한다. 또한, 휴대폰이 루팅되어 있는 상태라면, 휴대폰 번호, cpu, build.prop의 정보를 수정할 수 있으므로, 쉽게 안티 에뮬레이터의 탐지를 회피할 수 있다.
또한, 기존의 안티 에뮬레이터 기술은 ARM 32 bit 아키텍쳐(Architecture)에만 고려한 것이므로, AArch64 아키텍쳐는 고려하지 않아 현재 대부분의 기기에서 실행할 수 없다는 문제가 있다.
본 발명의 목적은 명령어와 데이터를 분리하여 처리하는 복수의 캐시를 사용하는 리얼머신(AArch64)과 단수의 캐시를 사용하는 가상머신(x86)의 구조적인 특징을 이용하여 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하고자 한다.
본 발명의 실시예에 따른 안드로이드 앱(Application; App) 보호를 위한 동적 보호 알고리즘을 이용하여 가상머신과 리얼머신을 구분하는 안티 에뮬레이션 방법에 있어서, 대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장하는 단계, 상기 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장하는 단계, 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어를 상기 제2 다음 레지스터의 명령어 주소에 오버라이트(overwrite)하는 단계 및 상기 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 단계를 포함한다.
상기 제1 다음 레지스터의 명령어 주소를 저장하는 단계는 상기 대상 프로그램에서 실행되는 상기 제1 레지스터에 상수 1을 추가한 상기 제1 다음 레지스터의 명령어를 실행하고, 상기 제1 다음 레지스터의 명령어 주소를 메모리에 저장할 수 있다.
상기 제2 다음 레지스터의 명령어 주소를 저장하는 단계는 상기 대상 프로그램에서 실행되는 상기 제2 레지스터에 상수 1을 추가한 상기 제2 다음 레지스터의 명령어를 실행하고, 상기 제2 다음 레지스터의 명령어 주소를 메모리에 저장할 수 있다.
상기 오버라이트하는 단계는 상기 제2 다음 레지스터의 명령어 주소에 저장된 상기 제2 다음 레지스터의 명령어를 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어로 오버라이트할 수 있다.
상기 리얼머신은 코드 캐시(I-Cache) 및 데이터 캐시(D-Cache)를 포함하여 캐시를 명령어와 데이터로 분리하여 처리하고, 상기 가상머신은 단일의 캐시를 이용하여 처리하며, 상기 판단하는 단계는 상기 가상머신과 상기 리얼머신의 캐시 구조 차이에 기반하여 상기 제1 레지스터와 상기 제2 레지스터의 시간에 따른 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단할 수 있다.
상기 판단하는 단계는 상기 명령어 주소의 오버라이트에 따라, 상기 제2 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 리얼머신으로 판단하고, 상기 제1 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 가상머신으로 판단할 수 있다.
본 발명의 실시예에 따른 안드로이드 앱(Application; App) 보호를 위한 동적 보호 알고리즘을 이용하여 가상머신과 리얼머신을 구분하는 안티 에뮬레이션 장치에 있어서, 대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장하고, 상기 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장하는 저장부, 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어를 상기 제2 다음 레지스터의 명령어 주소에 오버라이트(overwrite)하는 처리부 및 상기 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 판단부를 포함한다.
상기 저장부는 상기 대상 프로그램에서 실행되는 상기 제1 레지스터에 상수 1을 추가한 상기 제1 다음 레지스터의 명령어를 실행하고, 상기 제1 다음 레지스터의 명령어 주소를 메모리에 저장할 수 있다.
상기 저장부는 상기 대상 프로그램에서 실행되는 상기 제2 레지스터에 상수 1을 추가한 상기 제2 다음 레지스터의 명령어를 실행하고, 상기 제2 다음 레지스터의 명령어 주소를 메모리에 저장할 수 있다.
상기 처리부는 상기 제2 다음 레지스터의 명령어 주소에 저장된 상기 제2 다음 레지스터의 명령어를 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어로 오버라이트할 수 있다.
상기 판단부는 상기 명령어 주소의 오버라이트에 따라, 상기 제2 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 리얼머신으로 판단하고, 상기 제1 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 가상머신으로 판단할 수 있다.
본 발명의 실시예에 따르면, 명령어와 데이터를 분리하여 처리하는 복수의 캐시를 사용하는 리얼머신(AArch64)과 단수의 캐시를 사용하는 가상머신(x86)의 구조적인 특징을 이용한 AArch64 아키텍쳐와 x86 아키텍쳐의 차이로 인해 대상 프로그램에 대한 리얼머신 또는 가상머신을 판단할 수 있다. 나아가, 본 발명은 정적 보호 기법을 통한 난독화 기술을 적용하는 동시에 동적 보호 기법으로 안티 에뮬레이터 기법을 적용하여 안드로이드 앱(Application; App)을 보다 효과적으로 보호할 수 있다.
도 1은 가상머신 및 리얼머신의 캐시 구조를 설명하기 위해 도시한 것이다.
도 2는 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법의 흐름도를 도시한 것이다.
도 3a 내지 도 3d는 본 발명의 실시예에 따른 리얼머신에서 명령어 및 데이터를 처리/갱신하는 과정을 설명하기 위한 개략도를 도시한 것이다.
도 4는 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치의 세부 구성을 블록도로 도시한 것이다.
이하, 본 발명에 따른 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 그러나 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 또한, 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
본 발명의 실시예들은 명령어와 데이터를 분리하여 처리하는 복수의 캐시를 사용하는 리얼머신(AArch64)과 단수의 캐시를 사용하는 가상머신(x86)의 구조적인 특징을 이용한 AArch64 아키텍쳐와 x86 아키텍쳐의 차이로 인해 대상 프로그램에 대한 리얼머신 또는 가상머신을 판단하는 것을 그 요지로 한다.
종래 기술은 ARM 32 bit 아키텍쳐(Architecture)만을 고려하고, AArch64 아키텍쳐는 고려하지 않아 현재 대부분의 기기에서 실행할 수 없다는 문제가 있다.
이를 위해, 본 발명의 실시예들은 대다수 안드로이드 폰에서 사용되는 AArch64 아키텍쳐를 대상으로 하여 AArch64 명령어를 구현한다. 예를 들면, 본 발명의 실시예들은 캐시 플러시(Cache Flush)를 방지하기 위한 후킹 함수를 같이 구현함으로써, 캐시 플러시 함수를 호출하는 경우, 후킹 함수를 실행하고, 실제 캐시 플러시 함수를 수행하지 않으므로, 가상머신 또는 리얼머신의 판단이 가능하다.
이하에서는, 도 1 내지 도 4를 참조하여 본 발명에 대해 보다 상세히 설명하고자 한다.
도 1은 가상머신 및 리얼머신의 캐시 구조를 설명하기 위해 도시한 것이다.
도 1(a)에 도시된 리얼머신(AArch64)은 캐시를 코드 캐시(I-Cache)와 데이터 캐시(D-Cache)로 명령어와 데이터를 분리하여 처리하는 구조이며, 도 1(b)에 도시된 가상머신(x86)은 하나의 캐시(L1-Cache)를 포함하는 구조이다.
리얼머신(AArch64)은 RISC 명령어 세트를 사용하는 하버드 아키텍쳐(Harvard Architecture)에 포함되며, 가상머신(x86)은 CISC 명령어 세트를 사용하는 폰 노이만 아키텍쳐(von Neumann Architecture)에 포함될 수 있다.
도 1을 참조하면, 리얼머신(AArch64 or ARM)의 하버드 아키텍쳐(a)는 코드 및 데이터 캐시 메모리를 위해 물리적으로 분리된 신호 및 저장 장치를 포함하여 프로그램 메모리와 데이터 메모리를 동시에 액세스할 수 있다. 일반적으로, 코드 캐시(I-Cache)는 읽기 전용이며, 데이터 캐시(D-Cache)는 읽기/쓰기 전용이다.
가상머신(x86)의 폰 노이만 아키텍쳐(b)는 코드와 데이터를 공유하는 신호와 캐시를 포함하며, 프로그램은 읽기/쓰기 캐시 메모리에 저장되므로, 쉽게 수정이 가능하다.
도 2는 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법의 흐름도를 도시한 것이다.
도 2를 참조하면, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장한다(단계 110, 120).
예를 들면, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 대상 프로그램에서 실행되는 제1 레지스터(또는 레지스터 a라 칭함)에 상수 1을 추가한 제1 다음 레지스터(a+1)의 명령어를 실행하고, 제1 다음 레지스터(a+1)의 명령어 주소(addr(a))를 메모리에 저장할 수 있다.
이후에, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 상수 1에서 상수 10까지 반복문을 수행할 수 있다.
단계 110 및 단계 120와 마찬가지로, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장한다(단계 130, 140).
예를 들면, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 반복문을 기반으로, 대상 프로그램에서 실행되는 제2 레지스터(또는 레지스터 b라 칭함)에 상수 1을 추가한 제2 다음 레지스터(b+1)의 명령어를 실행하고, 제2 다음 레지스터(b+1)의 명령어 주소(addr(b))를 메모리에 저장할 수 있다.
단계 150에서, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 제1 다음 레지스터의 명령어 주소(addr(a))에 저장된 제1 다음 레지스터(a+1)의 명령어를 제2 다음 레지스터의 명령어 주소(addr(b))에 오버라이트(overwrite)한다.
단계 150은 제2 다음 레지스터의 명령어 주소에 저장된 제2 다음 레지스터(b+1)의 명령어를 제1 다음 레지스터의 명령어 주소에 저장된 제1 다음 레지스터(a+1)의 명령어로 대체할 수 있다.
이후에, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 비교문으로 제2 레지스터와 10을 비교하고, 제1 레지스터와 10을 비교하여 비교문을 종료할 수 있다(단계 160, 170).
단계 180에서, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법은 단계 150에 의한 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단한다. 이 때, 단계 150은 비교문으로 인한 제1 레지스터 및 레2 레지스터의 수치값 변화에 따라 가상머신 또는 리얼머신을 판단할 수 있다.
리얼머신(AArch64)은 코드 캐시(I-Cache) 및 데이터 캐시(D-Cache)를 포함하여 캐시를 명령어와 데이터로 분리하여 처리하고, 가상머신(x86)은 단일의 캐시를 이용하여 처리하므로, 단계 180은 가상머신과 리얼머신의 캐시 구조 차이에 기반하여 제1 레지스터와 제2 레지스터의 시간에 따른 증가 변화로부터 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단할 수 있다.
보다 상세하게는, 프로그램을 실행하는 과정에서 다른 주소의 명령어로 현 주소의 명령어를 수정하게 되면, 가상머신(x86)은 수정된 명령어를 바로 캐시(cache)에 저장하고, 다음 실행할 때, 수정된 명령어를 실행하게 된다. 반면에, 리얼머신(AArch64)은 프로그램 스스로 명령어를 수정하지 않는다. 리얼머신(AArch64)은 데이터의 수정이 발생되면, 코드 캐시(I-Cache)에 갱신하는 것이 아니라, 데이터 캐시(D-Cache)에 수정된 명령어를 갱신하고, 다음 실행할 때, 수정되지 않은 이전 명령어를 실행하게 되며, 일정 시간이 지난 후에야 수정된 명령어를 코드 캐시(I-Cache)에 저장하여 이후부터 수정된 명령어를 실행하게 된다.
이에 따라서, 단계 150에 의한 오버라이트가 발생한 후, 리얼머신(AArch64)의 하버드 아키텍쳐에서 제1 레지스터의 값은 일정 시간이 지난 후에 증가되고, 제2 레지스터의 값이 우선 증가하게 된다. 반면에, 가상머신(x86)의 폰 노이만 아키텍쳐(b)는 단계 150에 의한 오버라이트가 발생한 후, 캐시(cache)에 바로 수정된 사항이 반영되므로, 제2 레지스터가 아닌 오버라이트된 제1 레지스터의 값이 증가하게 된다.
전술한 바에 의해, 단계 180은 단계 150에 의한 명령어 주소의 오버라이트에 따라, 제2 레지스터의 값이 증가하는 경우, 대상 프로그램을 리얼머신으로 판단하고, 제1 레지스터의 값이 증가하는 경우, 대상 프로그램을 가상머신으로 판단할 수 있다.
도 3a 내지 도 3d는 본 발명의 실시예에 따른 리얼머신에서 명령어 및 데이터를 처리/갱신하는 과정을 설명하기 위한 개략도를 도시한 것이다.
도 3a 내지 도 3d는 제1 다음 레지스터의 명령어 주소(addr(a))에 저장된 제1 다음 레지스터(a+1)의 명령어를 제2 다음 레지스터의 명령어 주소(addr(b))에 오버라이트(overwrite)하는 경우, 리얼머신(AArch64)의 하버드 아키텍쳐에서 진행되는 과정을 설명하기 위한 개략도를 나타낸다.
리얼머신(AArch64 or ARM)의 하버드 아키텍쳐는 물리적으로 분리된 코드 캐시(I-Cache) 및 데이터 캐시(D-Cache)를 포함하며, 코드 캐시(I-Cache)는 읽기 전용이고, 데이터 캐시(D-Cache)는 읽기/쓰기 전용이다.
도 3a를 참조하면, 코드 캐시(I-Cache) 및 메모리(Memory)는 이전 명령어를 포함한다.
이후에, 오버라이트에 의해 새로운 명령어가 작성되는 경우, 도 3b에 도시된 바와 같이, 데이터 캐시(D-Cache)에 새로운 명령어가 저장된다. 다만, 이때에도 메모리(Memory)와 코드 캐시(I-Cache)는 이전 명령어를 보유하고 있으며, 데이터 캐시(D-Cache)만 새로운 명령어를 저장하는 것을 알 수 있다.
이 때, 지시(instructions)가 발생되는 경우, 이전 명령어가 실행된다.
도 3c를 참조하면, 메모리(Memory)는 데이터 캐시(D-Cache)에 저장된 새로운 명령어를 포함한다. 다만, 이때에도 코드 캐시(I-Cache)는 이전 명령어를 보유하는 것을 알 수 있다. 이러한 코드 캐시(I-Cache)와 메모리(Memory)의 차이로 인해, 프로세서는 새로운 명령어를 실행할 때, 새로운 명령어를 유효하지 않게 설정할 수 있다.
이로 인하여, 도 3d에 도시된 바와 같이, 새로운 명령어를 실행하는 경우, 코드 캐시(I-Cache)의 누락이 발생되고, 메모리(Memory)에서 새로운 명령어를 읽을 수 있게 된다.
즉, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치는 이전 명령어 주소에 새로운 명령어를 오버라이트하여 실행하는 경우, 위치의 명령어가 즉시 재작성되는지 여부를 판단하여 대상 프로그램에 대한 가상머신(x86) 또는 리얼머신(AArch64)을 판단할 수 있다.
예를 들면, 리얼머신(AArch64)의 경우에는 일정 시간이 지난 후에야 새로운 명령어를 실행할 수 있으나, 가상머신(x86)의 경우에는 오버라이트된 즉시 새로운 명령어를 실행할 수 있으므로, 본 발명은 새로운 명령어의 실행 시간 차이로 인해 가상머신(x86) 또는 리얼머신(AArch64)을 판단할 수 있다.
도 4는 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치의 세부 구성을 블록도로 도시한 것이다.
도 4를 참조하면, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치는 캐시 구조의 차이를 이용하여 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단한다.
이를 위해, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치(400)는 저장부(410), 처리부(420) 및 판단부(430)를 포함한다.
저장부(410)는 대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장하고, 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장한다.
보다 상세하게는, 저장부(410)는 대상 프로그램에서 실행되는 제1 레지스터(또는 레지스터 a라 칭함)에 상수 1을 추가한 제1 다음 레지스터(a+1)의 명령어를 실행하고, 제1 다음 레지스터(a+1)의 명령어 주소(addr(a))를 메모리에 저장할 수 있다. 이 때, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치(400)는 상수 1에서 상수 10까지 반복문을 수행할 수 있다.
이후에, 저장부(410)는 반복문을 기반으로, 대상 프로그램에서 실행되는 제2 레지스터(또는 레지스터 b라 칭함)에 상수 1을 추가한 제2 다음 레지스터(b+1)의 명령어를 실행하고, 제2 다음 레지스터(b+1)의 명령어 주소(addr(b))를 메모리에 저장할 수 있다.
처리부(420)는 제1 다음 레지스터의 명령어 주소(addr(a))에 저장된 제1 다음 레지스터(a+1)의 명령어를 제2 다음 레지스터의 명령어 주소(addr(b))에 오버라이트(overwrite)한다.
처리부(420)는 제2 다음 레지스터의 명령어 주소에 저장된 제2 다음 레지스터(b+1)의 명령어를 제1 다음 레지스터의 명령어 주소에 저장된 제1 다음 레지스터(a+1)의 명령어로 대체할 수 있다.
여기서, 본 발명의 실시예에 따른 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치(400)는 비교문으로 제2 레지스터와 10을 비교하고, 제1 레지스터와 10을 비교하여 비교문을 종료할 수 있다.
판단부(430)는 처리부(420)에 의한 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단한다. 이 때, 판단부(430)는 비교문으로 인한 제1 레지스터 및 레2 레지스터의 수치값 변화에 따라 가상머신 또는 리얼머신을 판단할 수 있다.
리얼머신(AArch64)은 코드 캐시(I-Cache) 및 데이터 캐시(D-Cache)를 포함하여 캐시를 명령어와 데이터로 분리하여 처리하고, 가상머신(x86)은 단일의 캐시를 이용하여 처리하므로, 판단부(430)는 가상머신과 리얼머신의 캐시 구조 차이에 기반하여 제1 레지스터와 제2 레지스터의 시간에 따른 증가 변화로부터 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단할 수 있다.
보다 상세하게는, 프로그램을 실행하는 과정에서 다른 주소의 명령어로 현 주소의 명령어를 수정하게 되면, 가상머신(x86)은 수정된 명령어를 바로 캐시(cache)에 저장하고, 다음 실행할 때, 수정된 명령어를 실행하게 된다. 반면에, 리얼머신(AArch64)은 프로그램 스스로 명령어를 수정하지 않는다. 리얼머신(AArch64)은 데이터의 수정이 발생되면, 코드 캐시(I-Cache)에 갱신하는 것이 아니라, 데이터 캐시(D-Cache)에 수정된 명령어를 갱신하고, 다음 실행할 때, 수정되지 않은 이전 명령어를 실행하게 되며, 일정 시간이 지난 후에야 수정된 명령어를 코드 캐시(I-Cache)에 저장하여 이후부터 수정된 명령어를 실행하게 된다.
이에 따라서, 처리부(420)에 의한 오버라이트가 발생한 후, 리얼머신(AArch64)의 하버드 아키텍쳐에서 제1 레지스터의 값은 일정 시간이 지난 후에 증가되고, 제2 레지스터의 값이 우선 증가하게 된다. 반면에, 가상머신(x86)의 폰 노이만 아키텍쳐(b)는 처리부(420)에 의한 오버라이트가 발생한 후, 캐시(cache)에 바로 수정된 사항이 반영되므로, 제2 레지스터가 아닌 오버라이트된 제1 레지스터의 값이 증가하게 된다.
전술한 바에 의해, 판단부(430)는 명령어 주소의 오버라이트에 따라, 제2 레지스터의 값이 증가하는 경우, 대상 프로그램을 리얼머신으로 판단하고, 제1 레지스터의 값이 증가하는 경우, 대상 프로그램을 가상머신으로 판단할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPA(field programmable array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 어플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (11)

  1. 안드로이드 앱(Application; App) 보호를 위한 동적 보호 알고리즘을 이용하여 가상머신과 리얼머신을 구분하는 안티 에뮬레이션 방법에 있어서,
    대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장하는 단계;
    상기 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장하는 단계;
    상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어를 상기 제2 다음 레지스터의 명령어 주소에 오버라이트(overwrite)하는 단계; 및
    상기 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 단계
    를 포함하는 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법.
  2. 제1항에 있어서,
    상기 제1 다음 레지스터의 명령어 주소를 저장하는 단계는
    상기 대상 프로그램에서 실행되는 상기 제1 레지스터에 상수 1을 추가한 상기 제1 다음 레지스터의 명령어를 실행하고, 상기 제1 다음 레지스터의 명령어 주소를 메모리에 저장하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법.
  3. 제1항에 있어서,
    상기 제2 다음 레지스터의 명령어 주소를 저장하는 단계는
    상기 대상 프로그램에서 실행되는 상기 제2 레지스터에 상수 1을 추가한 상기 제2 다음 레지스터의 명령어를 실행하고, 상기 제2 다음 레지스터의 명령어 주소를 메모리에 저장하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법.
  4. 제1항에 있어서,
    상기 오버라이트하는 단계는
    상기 제2 다음 레지스터의 명령어 주소에 저장된 상기 제2 다음 레지스터의 명령어를 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어로 오버라이트하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법.
  5. 제4항에 있어서,
    상기 리얼머신은 코드 캐시(I-Cache) 및 데이터 캐시(D-Cache)를 포함하여 캐시를 명령어와 데이터로 분리하여 처리하고, 상기 가상머신은 단일의 캐시를 이용하여 처리하며,
    상기 판단하는 단계는
    상기 가상머신과 상기 리얼머신의 캐시 구조 차이에 기반하여 상기 제1 레지스터와 상기 제2 레지스터의 시간에 따른 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 것을 특징으로 하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법.
  6. 제5항에 있어서,
    상기 판단하는 단계는
    상기 명령어 주소의 오버라이트에 따라, 상기 제2 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 리얼머신으로 판단하고, 상기 제1 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 가상머신으로 판단하는 것을 특징으로 하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법.
  7. 안드로이드 앱(Application; App) 보호를 위한 동적 보호 알고리즘을 이용하여 가상머신과 리얼머신을 구분하는 안티 에뮬레이션 장치에 있어서,
    대상 프로그램에 대한 제1 다음 레지스터의 명령어를 실행하며, 제1 다음 레지스터의 명령어 주소를 저장하고, 상기 대상 프로그램에 대한 제2 다음 레지스터의 명령어를 실행하며, 제2 다음 레지스터의 명령어 주소를 저장하는 저장부;
    상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어를 상기 제2 다음 레지스터의 명령어 주소에 오버라이트(overwrite)하는 처리부; 및
    상기 명령어 주소의 오버라이트에 따라, 제1 레지스터 또는 제2 레지스터 값의 증가 변화로부터 상기 대상 프로그램에 대한 가상머신 또는 리얼머신을 판단하는 판단부
    를 포함하는 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치.
  8. 제7항에 있어서,
    상기 저장부는
    상기 대상 프로그램에서 실행되는 상기 제1 레지스터에 상수 1을 추가한 상기 제1 다음 레지스터의 명령어를 실행하고, 상기 제1 다음 레지스터의 명령어 주소를 메모리에 저장하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치.
  9. 제7항에 있어서,
    상기 저장부는
    상기 대상 프로그램에서 실행되는 상기 제2 레지스터에 상수 1을 추가한 상기 제2 다음 레지스터의 명령어를 실행하고, 상기 제2 다음 레지스터의 명령어 주소를 메모리에 저장하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치.
  10. 제7항에 있어서,
    상기 처리부는
    상기 제2 다음 레지스터의 명령어 주소에 저장된 상기 제2 다음 레지스터의 명령어를 상기 제1 다음 레지스터의 명령어 주소에 저장된 상기 제1 다음 레지스터의 명령어로 오버라이트하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치.
  11. 제10항에 있어서,
    상기 판단부는
    상기 명령어 주소의 오버라이트에 따라, 상기 제2 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 리얼머신으로 판단하고, 상기 제1 레지스터의 값이 증가하는 경우, 상기 대상 프로그램을 가상머신으로 판단하는 것을 특징으로 하는, 안드로이드 앱 보호를 위한 안티 에뮬레이션 장치.
KR1020180165891A 2018-12-20 2018-12-20 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치 KR102225838B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180165891A KR102225838B1 (ko) 2018-12-20 2018-12-20 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180165891A KR102225838B1 (ko) 2018-12-20 2018-12-20 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20200076915A true KR20200076915A (ko) 2020-06-30
KR102225838B1 KR102225838B1 (ko) 2021-03-09

Family

ID=71121070

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180165891A KR102225838B1 (ko) 2018-12-20 2018-12-20 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102225838B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040005927A (ko) * 2001-05-21 2004-01-16 에이알엠 리미티드 데이터 처리장치에서의 소스 레지스터 록킹
KR100974401B1 (ko) * 2002-05-01 2010-08-05 아나로그 디바이시즈 인코포레이티드 주소 레지스터의 내용을 스와핑하기 위한 방법 및 장치
KR101081090B1 (ko) * 2006-10-16 2011-11-07 인터내셔널 비지네스 머신즈 코포레이션 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화
KR20150062877A (ko) * 2013-11-29 2015-06-08 삼성전자주식회사 재구성 가능 프로세서의 레지스터를 제어하는 방법 및 장치와 재구성 가능 프로세서의 레지스터를 제어하는 명령어를 생성하는 방법 및 장치

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20040005927A (ko) * 2001-05-21 2004-01-16 에이알엠 리미티드 데이터 처리장치에서의 소스 레지스터 록킹
KR100974401B1 (ko) * 2002-05-01 2010-08-05 아나로그 디바이시즈 인코포레이티드 주소 레지스터의 내용을 스와핑하기 위한 방법 및 장치
KR101081090B1 (ko) * 2006-10-16 2011-11-07 인터내셔널 비지네스 머신즈 코포레이션 명령어 스트림의 효율적인 에뮬레이션을 가능하게 하기 위한 레지스터 기반의 명령어 최적화
KR20150062877A (ko) * 2013-11-29 2015-06-08 삼성전자주식회사 재구성 가능 프로세서의 레지스터를 제어하는 방법 및 장치와 재구성 가능 프로세서의 레지스터를 제어하는 명령어를 생성하는 방법 및 장치

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Bluebox Security, "Android Emulator Detection by Observing Low-level Caching Behavior"(2014.02.) *

Also Published As

Publication number Publication date
KR102225838B1 (ko) 2021-03-09

Similar Documents

Publication Publication Date Title
US10055585B2 (en) Hardware and software execution profiling
US9747447B2 (en) Suspicious program detection
US11822654B2 (en) System and method for runtime detection, analysis and signature determination of obfuscated malicious code
US20150332043A1 (en) Application analysis system for electronic devices
US9811663B2 (en) Generic unpacking of applications for malware detection
JP6791134B2 (ja) 分析システム、分析方法、分析装置及び、コンピュータ・プログラム
US9740864B2 (en) System and method for emulation of files using multiple images of the emulator state
KR101715759B1 (ko) 멀티코어 환경에서의 악성코드 분석 장치 및 방법
CN102651061A (zh) 用于检测复杂恶意软件的系统和方法
JP2019502197A (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
US10210331B2 (en) Executing full logical paths for malware detection
US20230185902A1 (en) Undetectable sandbox for malware
Otsuki et al. Building stack traces from memory dump of Windows x64
CN108319850B (zh) 沙箱检测的方法、沙箱系统和沙箱设备
CN110516445B (zh) 反检测恶意代码的识别方法、装置及存储介质
WO2016126206A1 (en) Method for obfuscation of code using return oriented programming
KR102225838B1 (ko) 안드로이드 앱 보호를 위한 안티 에뮬레이션 방법 및 장치
EP4160455A1 (en) Behavior analysis based on finite-state machine for malware detection
US20190102279A1 (en) Generating an instrumented software package and executing an instance thereof
KR102111886B1 (ko) Arm 아키텍쳐 상의 동적 프로그램 수정 탐지 기술
KR102104198B1 (ko) 느긋한 심볼화를 활용한 바이너리 재조립 기술의 정확도 향상 기술 및 도구
KR102466000B1 (ko) 메모리 페이지 보호 속성을 이용한 범용 언패킹 방법 및 컴퓨팅 장치
EP4332805A1 (en) Emulation-based malware detection
CN111159663B (zh) 指令定位方法和装置
CN116975869A (zh) 基于地址处理的攻击防御方法、装置、电子设备及介质

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant