KR101861341B1 - 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 - Google Patents

애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 Download PDF

Info

Publication number
KR101861341B1
KR101861341B1 KR1020170066824A KR20170066824A KR101861341B1 KR 101861341 B1 KR101861341 B1 KR 101861341B1 KR 1020170066824 A KR1020170066824 A KR 1020170066824A KR 20170066824 A KR20170066824 A KR 20170066824A KR 101861341 B1 KR101861341 B1 KR 101861341B1
Authority
KR
South Korea
Prior art keywords
code
information
list
application
api
Prior art date
Application number
KR1020170066824A
Other languages
English (en)
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 KR1020170066824A priority Critical patent/KR101861341B1/ko
Application granted granted Critical
Publication of KR101861341B1 publication Critical patent/KR101861341B1/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

Abstract

애플리케이션 코드의 역난독화 장치는 코드 추출부, 추출 코드 파서, 실행 파일 파서, 맵핑기 및 재작성기를 포함한다. 코드 추출부는 난독화된 애플리케이션 코드를 실행하여 코드를 추출한다. 추출 코드 파서는 코드 추출부에 의해 추출된 코드를 기초로 애플리케이션 코드 내에서 암호화된 문자열의 복호화 문자열 정보 및 애플리케이션 코드 내에서 호출하는 API (Application programming interface) 정보를 포함하는 제1 리스트를 생성한다. 실행 파일 파서는 난독화된 애플리케이션 코드를 디컴파일하여 제2 리스트를 생성한다. 맵핑기는 제1 리스트의 코드 및 제2 리스트의 코드를 비교하여 복호화 문자열 정보 및 API 정보가 삽입될 위치를 판단한다. 재작성기는 제2 리스트의 코드의 복호화 문자열 정보 및 API 정보가 삽입될 위치에 복호화 문자열 정보 및 API 정보를 삽입한다.

Description

애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 {DEOBFUSCATION APPARATUS OF APPLICATION CODE AND METHOD OF DEOBFUSCATING APPLICATION CODE USING THE SAME}
본 발명은 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법에 관한 것으로, 보다 구체적으로 역난독화의 정확성 및 속도가 향상된 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법에 관한 것이다.
애플리케이션 시장 성장과 함께 악성 애플리케이션 시장도 크게 성장하고 있으며, 악성 애플리케이션에 모바일 코드 보호기법인 난독화 기술들이 악용되고 있다.
이렇게 난독화가 적용된 악성 애플리케이션의 분석을 위해서는 먼저 난독화를 해제하는 기술인 역난독화 기술이 필요하다. 종래의 역난독화 방법은 분석가의 역량과 노하우에 의존적이고 수동으로 역난독화가 이루어지기 때문에 난독화 기법 별로 새로운 지식의 습득을 필요로 하는 등 많은 시간과 노력이 필요하다. 예를 들어, 한 달에도 수만 건에 이르는 악성 애플리케이션에 대한 빠른 대응을 불가능하게 하기 때문에, 분석가의 역량과 노하우에 의존하는 기존의 방법이 아닌 자동으로 역난독화를 수행하는 기술이 필요하다.
종래의 역난독화 기법들은 난독화가 적용된 애플리케이션을 분석하여 역난독화를 수행한다. 이러한 방식으로 역난독화를 진행할 경우 특정 도구를 이용해, 혹은 특정 로직을 이용해 난독화를 적용해 놓은 경우 역난독화가 가능하지만 수많은 난독화 도구와 로직이 존재하는 만큼 각각의 도구별 로직과 특징을 모두 분석하는 것은 현실적으로 불가능할 수 있다. 그렇기 때문에 난독화가 적용된 애플리케이션의 케이스별 분석이 필요하기 때문에 분석에 드는 시간이 매우 오래 걸리게 된다. 이는 악성 애플리케이션으로부터 입는 피해에 대한 대응이 적절한 시기에 이루어지지 못하는 원인이 되기 때문에 문제가 될 수 있다.
본 발명은 종래 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법이 가지는 문제점들을 해결하기 위한 것으로, 본 발명이 이루고자 하는 목적은 정확성 및 속도가 향상된 애플리케이션 코드의 역난독화 장치를 제공하는 것이다.
본 발명이 이루고자 하는 다른 목적은 상기 애플리케이션 코드의 역난독화 장치를 이용하는 애플리케이션 코드의 역난독화 방법을 제공하는 것이다.
상기한 본 발명의 목적을 실현하기 위한 일 실시예에 따른 애플리케이션 코드의 역난독화 장치는 코드 추출부, 추출 코드 파서, 실행 파일 파서, 맵핑기 및 재작성기를 포함한다. 상기 코드 추출부는 난독화된 애플리케이션 코드를 실행하여 코드를 추출한다. 상기 추출 코드 파서는 상기 코드 추출부에 의해 추출된 코드를 기초로 상기 애플리케이션 코드 내에서 암호화된 문자열의 복호화 문자열 정보 및 상기 애플리케이션 코드 내에서 호출하는 API (Application programming interface) 정보를 포함하는 제1 리스트를 생성한다. 상기 실행 파일 파서는 상기 난독화된 애플리케이션 코드를 디컴파일하여 제2 리스트를 생성한다. 상기 맵핑기는 상기 제1 리스트의 코드 및 상기 제2 리스트의 코드를 비교하여 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치를 판단한다. 상기 재작성기는 상기 제2 리스트의 코드의 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치에 상기 복호화 문자열 정보 및 상기 API 정보를 삽입한다.
본 발명의 일 실시예에 있어서, 상기 코드 추출부는 상기 애플리케이션 코드를 실행하며 상기 애플리케이션 코드를 바이트 코드로 변환하는 인터프리터 및 상기 애플리케이션 코드의 상기 바이트 코드, 상기 복호화 문자열 정보 및 상기 API 정보를 출력하는 코드 추출기를 포함할 수 있다.
본 발명의 일 실시예에 있어서, 상기 코드 추출기는 바이트 코드 추출기, 복호화 문자열 추출기, API 호출 정보 추출기 및 코드 출력기를 포함할 수 있다. 상기 바이트 코드 추출기는 실행되고 있는 상기 애플리케이션 코드의 상기 바이트 코드를 추출할 수 있다. 상기 복호화 문자열 추출기는 상기 애플리케이션 코드 내에 암호화된 문자열이 상기 애플리케이션 코드의 실행 과정에서 복호화될 때 상기 복호화 문자열 정보를 추출할 수 있다. 상기 API 호출 정보 추출기는 상기 애플리케이션 코드의 실행 과정에서 네이티브 라이브러리에서 상기 API가 호출될 때, 상기 API 정보를 추출할 수 있다. 상기 코드 출력기는 상기 추출된 바이트 코드, 상기 복호화 문자열 정보 및 상기 API 정보를 하나의 파일 형태로 출력할 수 있다.
본 발명의 일 실시예에 있어서, 상기 코드 추출부는 코드 추출기 실행기를 더 포함할 수 있다. 상기 코드 추출기 실행기는 코드 추출기 설정파일을 기초로 상기 코드 추출기를 애플리케이션에 따라 선택적으로 실행할 수 있다.
본 발명의 일 실시예에 있어서, 상기 추출 코드 파서는 코드 블럭 생성기를 포함할 수 있다. 상기 코드 블럭 생성기는 상기 코드 추출부에 의해 추출된 코드를 바이트 코드 기준으로 복수의 블럭들로 만들고, 상기 블럭들을 리스트 형태로 자료구조화 시켜 제1 리스트를 생성할 수 있다.
본 발명의 일 실시예에 있어서, 상기 추출 코드 파서는 코드 파편화 조정기를 더 포함할 수 있다. 상기 코드 파편화 조정기는 상기 바이트 코드와 상기 복호화 문자열 정보의 순서가 뒤바뀌는 경우, 상기 바이트 코드와 상기 복호화 문자열 정보의 순서를 조정할 수 있다.
본 발명의 일 실시예에 있어서, 상기 실행 파일 파서는 리스트 생성기 및 해쉬맵 생성기를 포함할 수 있다. 상기 리스트 생성기는 상기 디컴파일된 애플리케이션 코드 내에 나열된 명령어들을 메소드 기준으로 리스트화하여 메소드 리스트를 생성하고, 상기 메소드 리스트를 클래스 기준으로 리스트화하여 제2 리스트를 생성할 수 있다. 상기 해쉬맵 생성기는 상기 메소드에 대응하는 해쉬 및 상기 클래스에 대응하는 해쉬를 포함하는 해쉬맵을 생성할 수 있다.
본 발명의 일 실시예에 있어서, 상기 맵핑기는 바이트 코드 비교기 및 분기문 처리기를 포함할 수 있다. 상기 바이트 코드 비교기는 상기 코드 블럭 생성기에 의해 생성된 상기 제1 리스트의 코드와 상기 리스트 생성기에 의해 생성된 상기 제2 리스트의 코드를 비교하여, 상기 복호화 문자열 정보 및 상기 API 정보가 포함되어 있는 경우 상기 복호화 문자열 정보 및 상기 API 정보에 대응하는 위치 정보를 저장할 수 있다. 상기 분기문 처리기는 애플리케이션의 실행 분기가 일어나는 경우, 분기된 다음 바이트 코드의 위치를 찾을 수 있다.
본 발명의 일 실시예에 있어서, 상기 재작성기는 명령어 생성기 및 명령어 삽입기를 포함할 수 있다. 상기 명령어 생성기는 상기 복호화 문자열 및 상기 API 정보를 상기 애플리케이션 코드 내에 삽입하기 위한 명령어를 생성할 수 있다. 상기 명령어 삽입기는 상기 명령어 생성기에 의해 생성된 명령어를 상기 바이트 코드 비교기에서 찾은 위치에 삽입할 수 있다.
본 발명의 일 실시예에 있어서, 상기 명령어 생성기는 상기 애플리케이션의 실행에 방해를 주지 않기 위해 데드코드 영역을 생성할 수 있다.
상기한 본 발명의 다른 목적을 실현하기 위한 일 실시예에 따른 애플리케이션 코드의 역난독화 방법은 난독화된 애플리케이션 코드를 실행하여 코드를 추출하는 단계, 상기 추출된 코드를 기초로 상기 애플리케이션 코드 내에서 암호화된 문자열의 복호화 문자열 정보 및 상기 애플리케이션 코드 내에서 호출하는 API (Application programming interface) 정보를 포함하는 제1 리스트를 생성하는 단계, 상기 난독화된 애플리케이션 코드를 디컴파일하여 제2 리스트를 생성하는 단계, 상기 제1 리스트의 코드 및 상기 제2 리스트의 코드를 비교하여 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치를 판단하는 단계 및 상기 제2 리스트의 코드의 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치에 상기 복호화 문자열 정보 및 상기 API 정보를 삽입하는 단계를 포함한다.
본 발명에 따른 애플리케이션 코드의 역난독화 장치 및 이를 이용하는 애플리케이션의 역난독화 방법은 난독화가 적용된 애플리케이션의 코드 추출 시에 복호화된 문자열 정보 및 네이티브 라이브러리에서 호출하는 API (Application programming interface) 호출 정보를 추출할 수 있다. 따라서, API 호출 정보를 은닉하는 Hide Access 기법을 적용한 애플리케이션의 분석이 가능하다.
또한, 추출한 코드를 애플리케이션의 실행 파일과의 맵핑을 통해 실행 파일의 정확한 위치에 상기 복호화된 문자열 정보 및 상기 API의 호출 정보를 삽입하여 역난독화된 실행 파일을 생성할 수 있다.
또한, 역난독화된 실행 파일은 실행이 가능한 형태이기 때문에 종래의 동적분석 기법을 활용하여 분석할 수 있다. 따라서, 난독화가 적용된 애플리케이션을 짧은 시간에 분석할 수 있다.
도 1은 본 발명의 일 실시예에 따른 애플리케이션 코드의 역난독화 방법을 나타내는 흐름도이다.
도 2는 본 발명의 일 실시예에 따른 애플리케이션 코드의 역난독화 장치의 코드 추출부를 나타내는 블록도이다.
도 3은 도 2의 코드 추출부를 포함하는 역난독화 장치를 나타내는 블록도이다.
도 4는 도 3의 덱스 리스트 생성기에 의해 생성되는 리스트를 나타내는 개념도이다.
도 5는 도 3의 해쉬맵 생성기에 의해 생성되는 해쉬맵을 나타내는 개념도이다.
도 6은 난독화된 실행 파일에 역난독화 정보가 삽입되는 과정을 나타내는 개념도이다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로 사용될 수 있다. 예를 들어, 본 발명의 권리 범위로부터 이탈되지 않은 채 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 설시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미이다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미인 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
한편, 어떤 실시예가 달리 구현 가능한 경우에 특정 블록 내에 명기된 기능 또는 동작이 순서도에 명기된 순서와 다르게 일어날 수도 있다. 예를 들어, 연속하는 두 블록이 실제로는 실질적으로 동시에 수행될 수도 있고, 관련된 기능 또는 동작에 따라서는 상기 블록들이 거꾸로 수행될 수도 있다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 본 발명의 일 실시예에 따른 애플리케이션 코드의 역난독화 방법을 나타내는 흐름도이다. 도 2는 본 발명의 일 실시예에 따른 애플리케이션 코드의 역난독화 장치(1000)의 코드 추출부(100)를 나타내는 블록도이다. 도 3은 도 2의 코드 추출부(100)를 포함하는 역난독화 장치(1000)를 나타내는 블록도이다.
도 1을 참조하면, 난독화된 애플리케이션 코드(CI)의 역난독화를 위해서는 난독화된 애플리케이션을 실행시켜 실행중인 소스 코드를 추출할 수 있다 (단계 S10). 예를 들어, 본 실시예에서 상기 난독화된 애플리케이션 코드(CI)는 달빅 실행 파일(Dalvik executable, dex, 덱스) 파일일 수 있다. 예를 들어, 상기 추출된 소스 코드는 달빅 가상 머신(Dalvik virtual machine)의 실행 코드인 바이트 코드 형태를 가질 수 있다.
본 실시예에서는 설명의 편의상 상기 애플리케이션 코드(CI)를 덱스 파일로 예시하고, 추출된 소스 코드를 바이트 코드로 예시하며, 일부 구성요소에 '덱스', '바이트'의 용어를 사용한다. 그러나, 본 발명은 이에 한정되지 않는다.
상기 추출된 코드를 파싱한다 (단계 S20). 상기 추출된 코드를 파싱하는 단계는 도 3을 참조하여 상세히 후술한다.
상기 난독화된 덱스 파일(CI)을 디컴파일한다 (단계 S30). 예를 들어, 디컴파일된 덱스 파일은 스말리(smali) 코드 형태를 가질 수 있다. 상기 스말리 코드는 달빅 가상 머신의 바이트 코드에 비해 로직을 분석하기에 용이한 형태를 가질 수 있다. 상기 난독화된 덱스 파일(CI)을 디컴파일하는 것과 상기 난독화된 덱스 파일(CI)을 파싱하는 것은 같은 의미를 가질 수 있다. 상기 난독화된 덱스 파일(CI)을 파싱하는 단계는 도 3을 참조하여 상세히 후술한다.
상기 추출되는 소스 코드에는 실행하고 있는 바이트 코드뿐만 아니라 문자열 난독화 기술에 의해 암호화된 문자열이 복호화된 원본 문자열 및 Hide Access 기법에 의해 은닉된 API의 호출 정보가 추출될 수 있다. 예를 들어, 상기 API는 네이티브 라이브러리에서 JNI(Java Native Interface)를 이용해 호출되는 자바 API일 수 있다.
이렇게 추출된 바이트 코드, 복호화 문자열 및 API 호출 정보는 애플리케이션의 실행 파일인 덱스 파일과의 맵핑(단계 S40)을 통해 덱스 파일 내에 삽입된다 (단계 S50).
상기 과정을 통해 애플리케이션의 실행 코드가 역난독화된다. 역난독화된 실행 코드(CO)는 난독화된 실행 코드(CI)와 동일한 형태를 가질 수 있다. 예를 들어, 상기 역난독화된 실행 코드(CO)는 달빅 실행 파일(Dalvik executable, dex, 덱스) 파일일 수 있다.
도 2 및 도 3을 참조하면, 상기 역난독화 장치(1000)는 코드 추출부(100)를 포함한다. 상기 코드 추출부(100)는 달빅 가상 머신 내에서 동작할 수 있다.
상기 코드 추출부(100)는 덱스 파일 로더기(10), 코드 추출기 실행기(20), 인터프리터(30) 및 코드 추출기(40)를 포함한다. 상기 덱스 파일 로더기(10)는 실행 파일 로더기로 명명할 수 있다.
상기 덱스 파일 로더기(10)는 상기 난독화된 실행 코드(CI)를 로딩한다.
상기 코드 추출기 실행기(20)는 상기 코드 추출기(40)를 실행한다. 예를 들어, 상기 코드 추출기 실행기(20)는 상기 코드 추출기(40)를 애플리케이션에 따라 선택적으로 실행할 수 있다. 상기 코드 추출기 실행기(20)는 코드 추출기 설정파일(CONF)을 기초로 상기 코드 추출기(40)의 실행여부를 결정할 수 있다. 상기 코드 추출기 설정파일(CONF)은 역난독화의 대상이 되는 애플리케이션 정보를 저장할 수 있고, 상기 코드 추출기 설정파일(CONF)은 해당 애플리케이션이 역난독화의 대상인 경우, 상기 코드 추출기 실행기(20)가 상기 코드 추출기(40)를 실행하도록 할 수 있다. 예를 들어, 애플리케이션 A가 난독화되어 있지 않아 역난독화가 불필요하거나, 안전한 애플리케이션으로 판단되는 경우, 상기 코드 추출기 설정파일(CONF)은 상기 코드 추출기 실행기(20)가 상기 애플리케이션 A에 대해 상기 코드 추출기(40)를 실행하지 않도록 할 수 있다. 예를 들어, 애플리케이션 B가 난독화되어 있어 역난독화가 필요하거나, 위험한 애플리케이션으로 의심되는 경우, 상기 코드 추출기 설정파일(CONF)은 상기 코드 추출기 실행기(20)가 상기 애플리케이션 B에 대해 상기 코드 추출기(40)를 실행하도록 할 수 있다.
상기 인터프리터(30)는 상기 애플리케이션 코드를 실행하며, 상기 덱스 파일을 바이트 코드로 변환한다. 상기 인터프리터(30)는 실행부(32) 및 바이트 코드 처리기(34)를 포함할 수 있다. 상기 실행부(32)는 상기 애플리케이션 코드를 실행할 수 있다. 상기 바이트 코드 처리기(34)는 상기 실행되는 상기 애플리케이션 코드를 기초로 상기 덱스 파일을 바이트 코드 형식으로 변환할 수 있다.
상기 코드 추출기(40)는 상기 애플리케이션의 바이트 코드, 복호화 문자열 및 API 호출 정보를 출력할 수 있다.
상기 코드 추출기(40)는 바이트 코드 추출기(42), 복호화 문자열 추출기(44), API 호출 정보 추출기(46) 및 코드 출력기(48)를 포함할 수 있다.
상기 바이트 코드 추출기(42)는 실행되고 있는 애플리케이션의 바이트 코드를 추출할 수 있다. 상기 바이트 코드 추출기(42)에 의해 추출되는 상기 바이트 코드는 달빅 가상 머신에서 실행되는 코드로 연산자와 피연산자를 포함한다.
상기 복호화 문자열 추출기(44)는 암호화된 문자열이 다시 복호화된 문자열을 추출한다. 정적 분석 저항성을 증가시키기 위해 애플리케이션 코드의 일부 문자열이 난독화될 수 있다. 상기 문자열의 난독화는 암호화 기법에 의해 수행될 수 있다. 문자열 난독화가 적용된 애플리케이션은 실행 중 난독화된 문자열을 사용하기 위해서 반드시 상기 난독화된 문자열을 복호화하여 읽을 수 있는 형태로 변환한 후 사용하게 된다. 상기 복호화 문자열 추출기(44)는 함수의 실행이 끝나고 함수를 호출한 콜러에게 제어가 넘어갈 때 반환하게 되는 문자열을 추출할 수 있다.
상기 API 호출 정보 추출기(46)는 네이티브 라이브러리에서 호출하는 API의 정보를 추출한다. 예를 들어, Hide Access가 적용된 경우 애플리케이션에서 자바 API를 호출할 때에는 네이티브 라이브러리에서 JNI를 이용해 자바의 API를 호출할 수 있다. 이때, 상기 API 호출 정보 추출기(46)는 네이티브 라이브러리에서 JNI를 이용하여 호출하는 자바 API의 정보를 추출할 수 있다.
상기 코드 출력기(48)는 상기 바이트 코드 추출기(42), 상기 복호화 문자열 추출기(44) 및 상기 API 호출 정보 추출기(46)에서 추출된 정보들을 하나의 파일 형태(CM)로 출력할 수 있다.
상기 역난독화 장치(1000)는 역난독화부를 더 포함한다. 상기 역난독화부는 추출 코드 파서(200), 덱스 파일 파서(300), 덱스-추출 코드 맵핑기(400) 및 재작성기(500)를 포함할 수 있다. 상기 덱스 파일 파서(300)는 실행 파일 파서(300)로 명명할 수 있다. 상기 덱스-추출 코드 맵핑기(400)는 맵핑기(400)로 명명할 수 있다.
상기 추출 코드 파서(200)는 상기 코드 추출기(40)로부터 추출된 코드(CM)를 수신한다. 상기 추출 코드 파서(200)는 상기 추출된 코드(CM)를 분석하여 코드 블럭으로 생성한다.
상기 추출 코드 파서(200)는 코드 블럭 생성기(220) 및 코드 파편화 조정기(240)를 포함할 수 있다.
상기 코드 추출기(40)를 이용해 추출된 코드(CM)는 각 명령에 해당하는 바이트 코드를 기준으로 스말리 코드와 복호화 문자열 정보 및 API 호출 정보가 순차적으로 출력된다. 상기 코드 블럭 생성기(220)는 상기 추출된 코드(CM)를 상기 바이트 코드 기준으로 복수의 블럭들로 만들고, 상기 블럭들을 리스트 형태로 자료구조화 시켜 제1 리스트를 형성한다.
코드 추출 시 실행 명령어가 순차적으로 바이트 코드 형태로 출력되는 것이 일반적이지만, 새로운 인터프리터의 실행 등 예외적인 상황으로 인해 바이트 코드와 복호화 문자열 정보 등이 비순차적으로 출력되는 경우가 발생할 수 있다. 상기 코드 파편화 조정기(240)는 비순차적으로 출력되는 상기 바이트 코드와 복호화 문자열 정보를 원래 순서에 맞도록 조정할 수 있다.
상기 덱스 파일 파서(300)는 애플리케이션의 실행 파일(CI)을 수신한다. 상기 덱스 파일 파서(300)는 상기 애플리케이션의 실행 파일(CI)을 디컴파일한다.
상기 덱스 파일 파서(300)는 덱스 리스트 생성기(320) 및 해쉬맵 생성기(340)를 포함할 수 있다. 상기 덱스 리스트 생성기(320)는 리스트 생성기로 명명할 수 있다.
애플리케이션의 실행 파일에 해당하는 덱스 파일의 코드는 바이너리 형태의 코드를 나열해 놓은 형태이다. 상기 덱스 리스트 생성기(300)는 이처럼 나열되어 있는 명령어들을 같은 메소드에 속하는 것들끼리 1차 리스트화한다. 상기 덱스 리스트 생성기(300)는 상기 메소드 리스트들을 다시 같은 클래스에 속한 것들끼리 묶어 2차 리스트화한다. 상기 덱스 리스트 생성기(300)가 형성한 리스트는 제2 리스트일 수 있다.
상기 해쉬맵 생성기(340)는 상기 덱스 리스트 생성기(320)에 의해 만들어진 상기 제2 리스트를 해쉬맵 형태로 저장할 수 있다. 상기 해쉬맵은 각 메소드에 대응하는 해쉬들 및 각 클래스에 대응하는 해쉬들을 포함할 수 있다. 상기 해쉬맵 생성기(340)에 의해 명령어의 리스트가 검색하기 용이한 형태로 변환될 수 있다.
도 4는 도 3의 덱스 리스트 생성기(320)에 의해 생성되는 리스트를 나타내는 개념도이다. 도 5는 도 3의 해쉬맵 생성기(340)에 의해 생성되는 해쉬맵을 나타내는 개념도이다.
도 4를 참조하면, 상기 덱스 리스트 생성기(320)에 의해 생성되는 리스트는 상기 실행 코드 내에 나열되어 있는 명령어를 메소드 단위로 리스트화한 후, 상기 메소드들을 다시 클래스 단위로 리스트화한다. 도 4의 리스트는 Class A가 Method A 및 Method B를 포함하는 것으로 예시하였고, Class B가 Method C 및 Method D를 포함하는 것으로 예시하였다.
도 5를 참조하면, 상기 해쉬맵 생성기(340)에 의해 생성되는 상기 해쉬맵은 클래스에 대응하는 해쉬들 및 메소드에 대응하는 해쉬들을 포함할 수 있다. 도 5에서 상기 해쉬맵은 Class A에 대응하는 hash01, Class B에 대응하는 hash02, Method A에 대응하는 hash03, Method B에 대응하는 hash04, Method C에 대응하는 hash05, Method D에 대응하는 hash06을 포함한다.
다시 도 3을 참조하면, 상기 덱스-추출 코드 맵핑기(400)는 상기 추출 코드 파서(200)에 의해 생성된 제1 리스트 및 상기 덱스 파일 파서(300)에 의해 생성된 제2 리스트를 비교한다.
상기 덱스-추출 코드 맵핑기(400)는 바이트 코드 비교기(420) 및 분기문 처리기(440)를 포함할 수 있다.
상기 바이트 코드 비교기(420)는 상기 코드 블럭 생성기(220)에 의해 생성된 제1 리스트의 코드와 덱스 리스트 생성기(320)에 의해 생성된 제2 리스트의 코드를 서로 비교한다. 상기 바이트 코드 비교기(420)는 상기 제1 리스트의 코드와 상기 제2 리스트의 코드가 서로 일치하는지를 체크하며, 상기 제1 리스트의 코드에 복호화 문자열 정보가 포함되어 있는 경우 해당 바이트 코드의 위치를 저장한다. 상기 바이트 코드 비교기(420)는 상기 제1 리스트의 코드와 상기 제2 리스트의 코드가 서로 일치하는지를 체크하며, 상기 제1 리스트의 코드에 API 호출 정보가 포함되어 있는 경우 해당 바이트 코드의 위치를 저장한다.
애플리케이션은 기본적으로 명령어들이 순서대로 실행되면서 동작하게 된다. 그러나, 필요에 따라서는 애플리케이션의 실행 분기가 일어날 수 있다. 상기 애플리케이션에 실행 분기가 일어나는 경우, 다음 비교해야 하는 코드는 현재 비교하고 있는 코드의 다음 코드가 아닌 분기가 일어난 뒤의 코드일 수 있다. 따라서, 상기 분기문 처리기(440)는 분기문이 있는 경우에서의 다음 바이트 코드의 위치를 찾는다. 상기 분기문 처리기(440)는 제1 리스트의 정보를 기초로 제2 리스트의 비교할 위치를 판단할 수 있다.
상기 재작성기(500)는 상기 난독화된 실행 코드에 복호화 문자열, API 호출 정보를 삽입하여 역난독화된 실행 코드(CO)를 생성한다.
상기 재작성기(500)는 명령어 생성기(520) 및 명령어 삽입기(540)를 포함할 수 있다.
상기 명령어 생성기(520)는 상기 복호화 문자열 및 상기 API 호출 정보를 삽입하기 위한 명령어를 생성한다. 상기 복호화 문자열 및 상기 API 호출 정보는 const-string 명령어로 삽입되는데, 이때 애플리케이션 실행에 방해를 주지 않기 위해 goto 명령어를 이용해 데드코드 영역을 생성할 수 있다.
상기 명령어 삽입기(540)는 상기 명령어 생성기에 의해 생성된 명령어들을 상기 난독화된 실행 코드의 상기 바이트 코드 비교기(420)에서 찾은 위치에 삽입한다.
도 6은 난독화된 실행 파일에 역난독화 정보가 삽입되는 과정을 나타내는 개념도이다.
도 1 내지 도 6을 참조하면, 상기 덱스 파일 파서(300)에 의해 디컴파일을 마친 덱스 파일과 상기 추출 코드 파서(200)에 의해 파싱을 마친 추출된 코드는 서로 바이트 코드를 비교하게 된다. 서로의 바이트 코드를 순서대로 비교하다가 추출된 코드에서 return 명령어를 만나고 문자열이 반환된 경우, 상기 덱스 파일의 위치와 반환되는 문자열을 저장한다. 이렇게 저장된 위치 정보를 이용해 덱스 파일에 복호화된 문자열이 삽입된다.
또한, 맵핑을 진행하는 중에 메소드를 호출하는 기능을 하는 바이트 코드를 맵핑하고, 네이티브 라이브러리에서 API를 호출하는 정보가 있을 경우, 덱스 파일의 위치와 네이티브 라이브러리에서 호출하는 API 정보를 저장한다. 이렇게 저장된 위치 정보를 이용해 덱스 파일에 API 정보가 삽입된다.
이와 같이 명령어 삽입이 모두 완료되면, 난독화가 적용된 덱스 파일(CI)에 복호화 문자열과 네이티브 라이브러리에서 호출하는 자바 API 호출 정보가 추가되며, 결과적으로 역난독화된 덱스 파일(CO)을 획득할 수 있다.
본 실시예에 따르면, 애플리케이션의 역난독화 방법은 난독화가 적용된 애플리케이션의 코드 추출 시에 복호화된 문자열 정보 및 네이티브 라이브러리에서 호출하는 API 호출 정보를 추출할 수 있다. 따라서, API 호출 정보를 은닉하는 Hide Access 기법을 적용한 애플리케이션의 분석이 가능하다.
또한, 추출한 코드를 애플리케이션의 실행 파일과의 맵핑을 통해 실행 파일의 정확한 위치에 상기 복호화된 문자열 정보 및 상기 API의 호출 정보를 삽입하여 역난독화된 실행 파일을 생성할 수 있다.
또한, 역난독화된 실행 파일은 실행이 가능한 형태이기 때문에 종래의 동적분석 기법을 활용하여 분석할 수 있다. 따라서, 난독화가 적용된 애플리케이션을 짧은 시간에 분석할 수 있다.
본 발명은 난독화된 애플리케이션 코드의 역난독화를 수행하는 임의의 전자 장치에 적용될 수 있다. 상기 전자 장치는 휴대 전화, 스마트 폰, 노트북 컴퓨터, 태블릿 컴퓨터, 디지털 방송 단말, PDA, PMP, 네비게이션 장치 디지털 카메라, 캠코더, 디지털 TV, 셋-탑 박스, 음악 재생기, 휴대용 게임 콘솔, 스마트 카드, 프린터 등을 포함할 수 있다.
상기에서는 본 발명의 바람직한 실시예를 참조하여 설명하였지만, 해당 기술분야의 숙련된 당업자는 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 것이다.
10: 덱스 파일 로더기 20: 코드 추출기 실행기
30: 인터프리터 32: 실행부
34: 바이트 코드 처리기 40: 코드 추출기
42: 바이트 코드 추출기 44: 복호화 문자열 추출기
46: API 호출 정보 추출기 48: 코드 출력기
100: 코드 추출부 200: 추출 코드 파서
220: 코드 블럭 생성기 240: 코드 파편화 조정기
300: 덱스 파일 파서 320: 덱스 리스트 생성기
340: 해쉬맵 생성기 400: 덱스-추출 코드 맵핑기
420: 바이트 코드 비교기 440: 분기문 처리기
500: 재작성기 520: 명령어 생성기
540: 명령어 삽입기 1000: 역난독화 장치

Claims (11)

  1. 난독화된 애플리케이션 코드를 실행하여 코드를 추출하는 코드 추출부;
    상기 코드 추출부에 의해 추출된 코드를 기초로 상기 애플리케이션 코드 내에서 암호화된 문자열의 복호화 문자열 정보 및 상기 애플리케이션 코드 내에서 호출하는 API (Application programming interface) 정보를 포함하는 제1 리스트를 생성하는 추출 코드 파서;
    상기 난독화된 애플리케이션 코드를 디컴파일하여 제2 리스트를 생성하는 실행 파일 파서;
    상기 제1 리스트의 코드 및 상기 제2 리스트의 코드를 비교하여 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치를 판단하는 맵핑기; 및
    상기 제2 리스트의 코드의 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치에 상기 복호화 문자열 정보 및 상기 API 정보를 삽입하는 재작성기를 포함하는 애플리케이션 코드의 역난독화 장치.
  2. 제1항에 있어서, 상기 코드 추출부는
    상기 애플리케이션 코드를 실행하며 상기 애플리케이션 코드를 바이트 코드로 변환하는 인터프리터; 및
    상기 애플리케이션 코드의 상기 바이트 코드, 상기 복호화 문자열 정보 및 상기 API 정보를 출력하는 코드 추출기를 포함하는 것을 특징으로 하는 역난독화 장치.
  3. 제2항에 있어서, 상기 코드 추출기는 바이트 코드 추출기, 복호화 문자열 추출기, API 호출 정보 추출기 및 코드 출력기를 포함하고,
    상기 바이트 코드 추출기는 실행되고 있는 상기 애플리케이션 코드의 상기 바이트 코드를 추출하며,
    상기 복호화 문자열 추출기는 상기 애플리케이션 코드 내에 암호화된 문자열이 상기 애플리케이션 코드의 실행 과정에서 복호화될 때 상기 복호화 문자열 정보를 추출하고,
    상기 API 호출 정보 추출기는 상기 애플리케이션 코드의 실행 과정에서 네이티브 라이브러리에서 상기 API가 호출될 때, 상기 API 정보를 추출하며,
    상기 코드 출력기는 상기 추출된 바이트 코드, 상기 복호화 문자열 정보 및 상기 API 정보를 하나의 파일 형태로 출력하는 것을 특징으로 하는 역난독화 장치.
  4. 제2항에 있어서, 상기 코드 추출부는 코드 추출기 실행기를 더 포함하며,
    상기 코드 추출기 실행기는 코드 추출기 설정파일을 기초로 상기 코드 추출기를 애플리케이션에 따라 선택적으로 실행하는 것을 특징으로 하는 역난독화 장치.
  5. 제1항에 있어서, 상기 추출 코드 파서는 코드 블럭 생성기를 포함하고,
    상기 코드 블럭 생성기는 상기 코드 추출부에 의해 추출된 코드를 바이트 코드 기준으로 복수의 블럭들로 만들고, 상기 블럭들을 리스트 형태로 자료구조화 시켜 제1 리스트를 생성하는 것을 특징으로 하는 역난독화 장치.
  6. 제5항에 있어서, 상기 추출 코드 파서는 코드 파편화 조정기를 더 포함하고,
    상기 코드 파편화 조정기는 상기 바이트 코드와 상기 복호화 문자열 정보의 순서가 뒤바뀌는 경우, 상기 바이트 코드와 상기 복호화 문자열 정보의 순서를 조정하는 것을 특징으로 하는 역난독화 장치.
  7. 제5항에 있어서, 상기 실행 파일 파서는 리스트 생성기 및 해쉬맵 생성기를 포함하고,
    상기 리스트 생성기는 상기 디컴파일된 애플리케이션 코드 내에 나열된 명령어들을 메소드 기준으로 리스트화하여 메소드 리스트를 생성하고, 상기 메소드 리스트를 클래스 기준으로 리스트화하여 제2 리스트를 생성하며,
    상기 해쉬맵 생성기는 상기 메소드에 대응하는 해쉬 및 상기 클래스에 대응하는 해쉬를 포함하는 해쉬맵을 생성하는 것을 특징으로 하는 역난독화 장치.
  8. 제7항에 있어서, 상기 맵핑기는 바이트 코드 비교기 및 분기문 처리기를 포함하고,
    상기 바이트 코드 비교기는 상기 코드 블럭 생성기에 의해 생성된 상기 제1 리스트의 코드와 상기 리스트 생성기에 의해 생성된 상기 제2 리스트의 코드를 비교하여, 상기 복호화 문자열 정보 및 상기 API 정보가 포함되어 있는 경우 상기 복호화 문자열 정보 및 상기 API 정보에 대응하는 위치 정보를 저장하며,
    상기 분기문 처리기는 애플리케이션의 실행 분기가 일어나는 경우, 분기된 다음 바이트 코드의 위치를 찾는 것을 특징으로 하는 역난독화 장치.
  9. 제8항에 있어서, 상기 재작성기는 명령어 생성기 및 명령어 삽입기를 포함하고,
    상기 명령어 생성기는 상기 복호화 문자열 및 상기 API 정보를 상기 애플리케이션 코드 내에 삽입하기 위한 명령어를 생성하며,
    상기 명령어 삽입기는 상기 명령어 생성기에 의해 생성된 명령어를 상기 바이트 코드 비교기에서 찾은 위치에 삽입하는 것을 특징으로 하는 역난독화 장치.
  10. 제9항에 있어서, 상기 명령어 생성기는 상기 애플리케이션의 실행에 방해를 주지 않기 위해 데드코드 영역을 생성하는 것을 특징으로 하는 역난독화 장치.
  11. 난독화된 애플리케이션 코드를 역난독화하는 역난독화 장치를 이용한 애플리케이션 코드의 역난독화 방법에 있어서,
    코드 추출부를 이용하여, 상기 난독화된 애플리케이션 코드를 실행하여 코드를 추출하는 단계;
    추출 코드 파서를 이용하여, 상기 코드 추출부에 의해 추출된 코드를 기초로 상기 애플리케이션 코드 내에서 암호화된 문자열의 복호화 문자열 정보 및 상기 애플리케이션 코드 내에서 호출하는 API (Application programming interface) 정보를 포함하는 제1 리스트를 생성하는 단계;
    실행 파일 파서를 이용하여, 상기 난독화된 애플리케이션 코드를 디컴파일하여 제2 리스트를 생성하는 단계;
    맵핑기를 이용하여, 상기 제1 리스트의 코드 및 상기 제2 리스트의 코드를 비교하여 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치를 판단하는 단계; 및
    재작성기를 이용하여, 상기 제2 리스트의 코드의 상기 복호화 문자열 정보 및 상기 API 정보가 삽입될 위치에 상기 복호화 문자열 정보 및 상기 API 정보를 삽입하는 단계를 포함하는 애플리케이션 코드의 역난독화 방법.
KR1020170066824A 2017-05-30 2017-05-30 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 KR101861341B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170066824A KR101861341B1 (ko) 2017-05-30 2017-05-30 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170066824A KR101861341B1 (ko) 2017-05-30 2017-05-30 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법

Publications (1)

Publication Number Publication Date
KR101861341B1 true KR101861341B1 (ko) 2018-05-28

Family

ID=62451453

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170066824A KR101861341B1 (ko) 2017-05-30 2017-05-30 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법

Country Status (1)

Country Link
KR (1) KR101861341B1 (ko)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489130A (zh) * 2018-05-31 2019-11-22 北京数聚鑫云信息技术有限公司 一种基于客户端的业务数据提取方法及装置
CN111967032A (zh) * 2020-08-27 2020-11-20 长城计算机软件与系统有限公司 基于混淆处理的文件加密方法及解密方法
KR20200131383A (ko) 2019-05-13 2020-11-24 고려대학교 산학협력단 역난독화 장치 및 방법
CN113779932A (zh) * 2021-08-24 2021-12-10 深圳市明源云科技有限公司 数字格式化方法、装置、终端设备及存储介质
WO2022107957A1 (ko) * 2020-11-18 2022-05-27 숭실대학교 산학협력단 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치
KR102514888B1 (ko) * 2022-03-18 2023-03-27 숭실대학교 산학협력단 난독화된 애플리케이션의 데이터 흐름 분석을 위한 역난독화 장치 및 그 방법
CN117573142B (zh) * 2024-01-15 2024-04-23 广州大学 基于模拟执行的java代码反混淆器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101428915B1 (ko) 2013-02-22 2014-08-11 한양대학교 산학협력단 안드로이드 보안을 위한 피드백 기반 어플리케이션 재가공 프레임워크 방법과 그 시스템
KR101557455B1 (ko) 2015-04-21 2015-10-07 숭실대학교산학협력단 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법
KR101710796B1 (ko) 2015-08-24 2017-02-28 숭실대학교산학협력단 난독화된 모바일 애플리케이션의 식별자 역난독화 장치 및 그 방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101428915B1 (ko) 2013-02-22 2014-08-11 한양대학교 산학협력단 안드로이드 보안을 위한 피드백 기반 어플리케이션 재가공 프레임워크 방법과 그 시스템
KR101557455B1 (ko) 2015-04-21 2015-10-07 숭실대학교산학협력단 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법
KR101710796B1 (ko) 2015-08-24 2017-02-28 숭실대학교산학협력단 난독화된 모바일 애플리케이션의 식별자 역난독화 장치 및 그 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
이세영외 4인, ‘APK에 적용된 난독화 기법 역난독화 방안 연구 및 자동화 분석 도구 구현’, Journal of The Korea Institute Information Security & Cryptology Vol.25, No.5 Oct. 2015.

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110489130A (zh) * 2018-05-31 2019-11-22 北京数聚鑫云信息技术有限公司 一种基于客户端的业务数据提取方法及装置
CN110489130B (zh) * 2018-05-31 2021-01-08 北京数聚鑫云信息技术有限公司 一种基于客户端的业务数据提取方法及装置
KR20200131383A (ko) 2019-05-13 2020-11-24 고려대학교 산학협력단 역난독화 장치 및 방법
CN111967032A (zh) * 2020-08-27 2020-11-20 长城计算机软件与系统有限公司 基于混淆处理的文件加密方法及解密方法
CN111967032B (zh) * 2020-08-27 2023-08-25 长城计算机软件与系统有限公司 基于混淆处理的文件加密方法及解密方法
WO2022107957A1 (ko) * 2020-11-18 2022-05-27 숭실대학교 산학협력단 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치
CN113779932A (zh) * 2021-08-24 2021-12-10 深圳市明源云科技有限公司 数字格式化方法、装置、终端设备及存储介质
KR102514888B1 (ko) * 2022-03-18 2023-03-27 숭실대학교 산학협력단 난독화된 애플리케이션의 데이터 흐름 분석을 위한 역난독화 장치 및 그 방법
WO2023177020A1 (ko) * 2022-03-18 2023-09-21 숭실대학교 산학협력단 난독화된 애플리케이션의 데이터 흐름 분석을 위한 역난독화 장치 및 그 방법
CN117573142B (zh) * 2024-01-15 2024-04-23 广州大学 基于模拟执行的java代码反混淆器

Similar Documents

Publication Publication Date Title
KR101861341B1 (ko) 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법
EP2897073B1 (en) Device for obfuscating application code and method for same
CN108733988B (zh) 安卓平台上可执行程序的保护方法
CN108932406B (zh) 虚拟化软件保护方法和装置
EP2897074B1 (en) Application code obfuscation device based on self-conversion and method therefor
EP2897072B1 (en) Device for obfuscating code and method for same
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
US20160203087A1 (en) Method for providing security for common intermediate language-based program
KR101521765B1 (ko) 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
US10878086B2 (en) Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus
KR102433011B1 (ko) Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
CN108491235B (zh) 结合动态加载和函数Native化的DEX保护方法
CN108363911B (zh) 一种Python脚本混淆、水印的方法及装置
CN104091100A (zh) 一种基于编译中间结果的软件保护方法
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
CN105022936A (zh) 一种类class文件加密解密方法和装置
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
CN106548046B (zh) 一种保护代码的装置和方法
CN103413073A (zh) 一种保护java可执行程序的方法及设备
KR101926142B1 (ko) 프로그램 분석 장치 및 방법
KR101536920B1 (ko) Arm 프로세서 기반의 파일 난독화 방법
KR101557455B1 (ko) 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법
CN113626773B (zh) 一种基于中间语言的代码保护方法
CN112214736A (zh) 一种代码加密方法及相关组件

Legal Events

Date Code Title Description
GRNT Written decision to grant