본문 바로가기

보안/안드로이드

com.devuni.flashlight v5.1.5 안드로이드 어플리케이션 분석

얼마 전에 flash light가 개인정보를 수집한다는 기사가 나왔다. 

분석을 한번 해볼까 하는 생각에 지금과 같은 포스팅을 하게 되었다.

소스 분석 전 앱의 정보는 다음과 같다.


1. 어플리케이션 기본 정보

 이름 : 플래시라이트

 버전 : 5.1.5

 패키지 이름 : com.devuni.flashlight

 설치 SDK 버전 : 21


2. 시그니처 정보

 CN : Nikolay Ananiev

 timeFrom : 090525191210  (Tue Nov 14 02:53:11 KST 1972)

 timeTo : 20590513191210  (Fri Jun 28 11:59:51 KST 2622)


3. 해쉬 값

 SHA256 : 60f323cbe7d1f9d75a372759f99bea39b48ab323dd6ec8bf14ea38d03989fa48

 MD5 :  366ac7e04f7ec92c29462417e5fc1fbe


4. 퍼미션 정보

1) android.permission.CAMERA

 - 어플리케이션에서 언제든 카메라를 사용하여 사진과 동영상을 촬영하는 것을 허용합니다.

2) android.permission.FLASHLIGHT

 - 어플리케이션에서 플래시를 조절하는 것을 허용합니다.

3) android.permission.WAKE_LOCK

 - 어플리케이션이 휴대폰이 잠자기 모드로 전환하지 않게 설정할 수 있도록 허용합니다.

4) android.permission.VIBRATE

 - 어플리케이션에서 진동을 조절하는 것을 허용합니다. 

5) android.permission.INTERNET

 - 어플리케이션에서 네트워크 소켓을 추가하는 것을 허용합니다. 

6) android.permission.ACCESS_NETWORK_STATE

 - 어플리케이션에서 모든 네트워크의 상태를 볼 수 있도록 허용합니다.

7) com.devuni.flashlight.CONTROL_LIGHT

 - 작동하지 않아도 자동으로 카메라 라이트를 시작/정지시키는 어플리케이션을 허용합니다.


5. Activity

1) com.devuni.flashlight.MainActivity

2) com.devuni.flashlight.WidgetConfigure

3) com.devuni.light.LightActivity

4) com.google.android.gms.ads.AdActivity

5) com.millennialmedia.android.MMActivity


6. Service

 com.devuni.light.LightService


7.  Receiver

1) com.devuni.flashlight.receivers.PackageReceiver

2) com.devuni.flashlight.receivers.WidgetProvider

3) com.devuni.flashlight.receivers.RestrictedProfilesReceiver

4) com.devuni.flashlight.receivers.APIReceiver


8. So 파일 

arm64-v8a/libnative.so

armeabi/libnative.so

armeabi-v7a/libnative.so

mips/libnative.so

mips64/libnative.so

x86/libnative.so

x86_64/libnative.so

so 파일 분석 실력은 아직 안 되므로 Pass!


9. 소스 분석 (분석 tool : jd-gui)

일단 보시는 것과 같이 난독화가 되어 있는 상태이다. 

우선 인터넷 퍼미션을 사용하므로 관련 API를 호출하는 자바 클래스를 찾기로 했다.

대표적인 인터넷 관련 API는

java.net

org.apache.http

이다.

이 API를 가지고 있으면서 한번이라도 호출되는 클래스는 2개가 있었다.


파일이름

com.devuni.moreapps.c.java

 사용 API

android.content.Context 

android.content.pm.PackageInfo 

android.content.pm.PackageManager 

android.content.pm.PackageManager.NameNotFoundException 

android.net.ConnectivityManager 

android.net.NetworkInfo  

android.os.Build android.os.Build.VERSION  

android.os.Message 

java.io.File  

java.io.FileInputStream 

ava.io.FileOutputStream 

java.io.InputStream 

java.io.InputStreamReader 

java.lang.reflect.Field 

java.util.ArrayList 

java.util.Collections  

java.util.Comparator 

java.util.Iterator 

java.util.Locale 

org.apache.http.message.BasicNameValuePair 

org.json.JSONObject 

 분석결과

 난독화가 제대로 되어 있다.


 하지만 내용을 보면 개인정보를 빼가는 찾을 수 없었다. 


 파일이름

com.millennialmedia.android.dt.java

 사용 API

android.app.AlertDialog 

android.app.AlertDialog.Builder 

android.content.ComponentName 

android.content.Context 

android.content.Intent 

android.content.IntentFilter 

android.content.pm.PackageManager

android.content.pm.PackageManager.NameNotFoundException 

android.content.res.Configuration 

android.content.res.Resources 

android.location.Location 

android.media.AudioManager 

android.net.ConnectivityManager 

android.net.NetworkInfo 

android.os.Build  

android.os.Build.VERSION 

android.os.Environment 

android.os.Handler 

android.os.Looper

android.os.StatFs 

android.provider.Settings.System 

android.telephony.TelephonyManager 

android.text.TextUtils 

android.util.DisplayMetrics 

com.google.android.gms.ads.identifier.AdvertisingIdClient 

com.google.android.gms.ads.identifier.AdvertisingIdClient.Info 

com.google.android.gms.common.e 

com.google.android.gms.common.f 

com.google.android.gms.common.g 

java.io.File

java.io.IOException 

java.net.InetAddress 

java.net.NetworkInterface 

java.net.URLEncoder 

java.util.Enumeration 

java.util.Locale 

java.util.Map 

org.apache.http.conn.util.InetAddressUtils  

 분석결과

광고에 관한 클래스이다.

인터넷 찾아보니 외국에서 유명한 광고업체이다.

참 많은 정보를 가져간다.

얼핏 살펴보면....

1. 마이크가 있는지 여부

2. 안드로이드 디바이스 정보

3. 네트워크 사업자 정보

4. 배터리 충전량

와 같은 정보를 가져간다.


유일하게 이 클래스를 호출하는 곳이 

com.devuni.ads.MMedia.java 이다.

유일하게 쓰는 부분이 this.b.setId(dt.a());

이 부분인데...

개인정보를 빼가는 함수 이름은  

static void a(Context paramContext, Map paramMap) 이다.

따라서 정작 이 함수를 호출하는 클래스는 없었다.(난독화 되서 안보일 수도 있다.)


 



10. 기타

얼마전에 MBC에서 Flashlight에 관련해서 뉴스에 보도된적이 있다.

이 관련된 코드로 들어가보았지만 절대 유출을 할 수 없는 코드였다. 왜냐하면? 퍼미션이 없기 때문에..


도대체 무엇을 보고 이런 기사가 나갔을까 싶다. 이 어플리케이션은 ACCESS_FINE_LOCATION 을 등록하지 않았다. 따라서 이 저 조건문은 빠져나가게 되어있다. 물론 이 광고 라이브러리를 사용한 다른 어플리케이션이 사용한다면 유출했을지 모르지만.. 이 어플리케이션은 유출할 수 가 없다.



그러므로 이 기사는 잘못된 기사이다.