연구 목적 : 내부 값 난독화 목적

결과 : 값 난독화에는 의미가 적음 // 자체제작 라이브러리 난독화에는 의미가 있음(C++)

- 값은 되도록 서버에 저장

- proguard를 이용

 

여러 사이트를 참고하여 ndk를 이용한 키 난독화 작업을 테스트 해보았음.

다만 구글링으로 구성하려고 하면 쉽지 않다.

오히려 안드로이드스튜디오의 템플레이트로 연습해보는 것이 좋다.

 

Native C++ 프로젝트를 열어보면

아래와 같이 cpp 폴더와 함께 CMake 관련 파일들이 생성된다.

 

native-lib.cpp 파일을 보면

Hello from C++을 리턴하게 되어있다.

 

MainActivity를 열어보면 스태틱으로 네이티브 라이브러리와 함수를 로드하게 되어있고

빌드후 실행해보면 Hello from C++가 나오는 간단한 프로젝트이다.

 

 

난독화로서 의미가 적은 이유

apk파일로 만들고 툴을 이용하여 디컴파일 해보면

아래와 같은 파일들이 만들어진다. (jniLibs)

 

위의 예제와 같은 이름의 프로젝트를 만들고 

Project구조로 변경한뒤 

main 폴더 안에 jniLibs라는 폴더를 만들고 그안에 위 파일들을 넣어준다.

그러고난 뒤 메인액티비티의 xml과 클래스파일을 예제 프로젝트와 똑같이 만든 후

빌드 실행 해보면 함수가 호출되어 같은 값이 출력된다.

(큰 의미 없다는 것)

 

jniLibs에 들어간 것은 so 파일인데

c파일은 so파일로 만들어져도 아래 사이트에 업로드해보면 대충 값을 확인할 수 있다.

onlinedisassembler.com/odaweb/

 

ODA - The Online Disassembler

You need to upgrade your browser or enable javascript to view this site!

onlinedisassembler.com

 

cpp파일은 so파일로 만들어지면 위 사이트로 열어봐도 보기 어렵다.

즉 내부코드를 확인하기는 쉽지 않다는 뜻이다. (코드 보안에는 좋을듯 함)

하지만 apk를 디컴파일하여 해당라이브러리를 사용하는 코드를 확인하여 작동해보면 값은 가져올 수 있다.

 

추가로 proguard 로 앱자체를 난독화하여 찾기 어렵게 만들어도 디컴파일 툴을 이용하면

아래와 같이 큰 힘을 들이지 않아도 찾아 낼 수 있다.

 

아이디어라면 라이브러리 이름과 매서드를 한글자(a 등)로 하여 분석하기 매우 힘들게는 가능 할 것 같다.

 

 

사용한 툴

안드로이드 스튜디오
sublimetext
apktool
dex2jar
jd-gui

 

ndk cmark 사용법 관련 주소

(다시 말씀드리지만 ndk cmark 연습은 샘플프로젝트를 이용하는 것이 가장 빠름)

developer.android.com/studio/projects/install-ndk?hl=ko

 

NDK 및 CMake 설치 및 구성  |  Android 개발자  |  Android Developers

앱의 네이티브 코드를 컴파일하고 디버그하려면 다음 구성요소가 필요합니다. Android 네이티브 개발 키트(NDK): Android에서 C 및 C++ 코드를 사용할 수 있도록 해주는 도구 모음입니다. CMake: Gradle과

developer.android.com

 

developer.android.com/studio/projects/add-native-code?hl=ko

 

C 및 C++ 코드를 프로젝트에 추가  |  Android 개발자  |  Android Developers

C 및 C++ 코드를 Android 프로젝트에 추가하는 방법을 알아보세요.

developer.android.com

 

developer.android.com/ndk/samples/sample_hellojni

 

샘플: hello-jni  |  Android NDK  |  Android Developers

이 샘플에서는 NDK로 빌드한 작은 C/C++ 애플리케이션인 hello-jni를 살펴봅니다. 이 샘플은 android-mk 분기 내 ndk-samples 저장소의 hello-jni 디렉터리에 있습니다. Android.mk 다음 두 줄은 네이티브 소스 파

developer.android.com

 

medium.com/programming-lite/securing-api-keys-in-android-app-using-ndk-native-development-kit-7aaa6c0176be

 

Securing API Keys in Android App using NDK (Native Development Kit)

Securing API keys in Android application has become a challenging by traditional methods (storing them in strings.xml or in Gradle etc.)…

medium.com

 

thepassion.tistory.com/332

 

[Android] ndk-build를 이용한 Native Code 빌드 및 사용방법

ndk-build를 이용한 Native Code 빌드 및 사용방법 다음과 같은 이유로 Android App에서 Native Code(C/C++등)로 코드를 작성하여 사용해야 할 경우가 존재합니다. 처리 속도 및 성능향상 C/C++로 만들어진 코드.

thepassion.tistory.com

 

medium.com/@abhi007tyagi/storing-api-keys-using-android-ndk-6abb0adcadad

 

Securing API Keys using Android NDK

Today there are thousands of third-party libraries and APIs available to developers for creating cool, amazing mobile apps. These APIs are…

medium.com

 

blog.mindorks.com/securing-api-keys-using-android-ndk

 

Securing API Keys using Android NDK (Native Development Kit)

In this blog, we will learn how to secure our API Keys that are used in Android applications using the Android NDK (Native Development Kit). We have created a detailed blog of securing the API Keys.

blog.mindorks.com

 

yoo-hyeok.tistory.com/72

 

[Android] NDK를 이용한 C/C++ 연동 개발

NDK란 무엇인가? Android NDK는 C와 C++ 같은 네이티브 코드 언어를 사용하여 앱의 일부를 구현하는 도구모음입니다. 어떤 유형의 앱에서는 네이티브 코드 언어로 작성된 코드 라이브러리를 재사용하

yoo-hyeok.tistory.com

 

 

+ Recent posts