2012/01/13

アプリでもワンクリックでOK

と言っても詐欺の話です。

ワンクリック詐欺っていうのは、日本のお家芸なんですかね。海外の事例を聞いたことがありません。 該当のMalwareを捕獲したので解析してみました。

まずは定番のAndroidManifest.xmlです。

<?xml version="1.0" encoding="utf-8"?> <manifest  xmlns:android="http://schemas.android.com/apk/res/android"  package="com.example.android.service"  >  <uses-permission   android:name="android.permission.GET_ACCOUNTS"   >  </uses-permission>  <uses-permission   android:name="android.permission.INTERNET"   >  </uses-permission>  <uses-permission   android:name="android.permission.ACCESS_FINE_LOCATION"   >  </uses-permission>  <uses-permission   android:name="android.permission.RECEIVE_BOOT_COMPLETED"   >  </uses-permission>

パーミッションは、GET_ACCOUNTS、INTERNET、ACCESS_FINE_LOCATION、RECEIVE_BOOT_COMPLETEDの4つ。 GET_ACCOUNTSはおそらくユーザを脅迫するために電話番号やメールアドレスを取得する目的ですね。 ACCESS_FINE_LOCATIONもでしょうか? INTERNETは、取得した情報をサイトに送信するために必要でしょう。 RECEIVE_BOOT_COMPLETEDは、サービスを自動起動するために使用しているみたいですね。

:   <service    android:name=".KitchenTimerService"    android:enabled="true"    >   </service>
駄目もとでDr.Googleに聞いてみました。 すると、

ほうほう、サンプルのコードを見るとタイマーの実装をしてるあたり、今回のMalwareの実装に似てますね。 このページのサンプルソース(zip)を見てみるとずいぶん類似する点があります。

1.パッケージ構成

入門サイトのサンプル
#ls -l src/com/example/android/service total 8 -rwx------+ 1 users None 2303 May 31 2009 KitchenTimerService.java -rwx------+ 1 users None 2889 May 31 2009 Main.java #
Malware
#ls -l com/example/android/service total 82 -rwxr-xr-x 1 users None 1521 Jan 13 11:50 KitchenTimerService$1.smali -rwxr-xr-x 1 users None 1498 Jan 13 11:50 KitchenTimerService$2.smali -rwxr-xr-x 1 users None 1266 Jan 13 11:50 KitchenTimerService$KitchenTimerBinder.smali -rwxr-xr-x 1 users None 4833 Jan 13 11:50 KitchenTimerService.smali -rwxr-xr-x 1 users None 2171 Jan 13 11:50 Main$1.smali -rwxr-xr-x 1 users None 10884 Jan 13 11:50 Main$KitchenTimerReceiver.smali -rwxr-xr-x 1 users None 18493 Jan 13 11:50 Main.smali -rwxr-xr-x 1 users None 548 Jan 13 11:50 R$attr.smali -rwxr-xr-x 1 users None 625 Jan 13 11:50 R$drawable.smali -rwxr-xr-x 1 users None 618 Jan 13 11:50 R$id.smali -rwxr-xr-x 1 users None 621 Jan 13 11:50 R$layout.smali -rwxr-xr-x 1 users None 616 Jan 13 11:50 R$raw.smali -rwxr-xr-x 1 users None 625 Jan 13 11:50 R$string.smali -rwxr-xr-x 1 users None 692 Jan 13 11:50 R.smali -rwxr-xr-x 1 users None 1246 Jan 13 11:50 SampleReceiver.smali #

そっくりです。

2.クラス構造

2-1.KitchenTimerService

2-1-1.クラスの文頭 入門ページのサンプル
public class KitchenTimerService extends Service {
 class KitchenTimerBinder extends Binder {
  KitchenTimerService getService() {    return KitchenTimerService.this;   }  }
Malware
.class public Lcom/example/android/service/KitchenTimerService; .super Landroid/app/Service; .source "KitchenTimerService.java"
# annotations .annotation system Ldalvik/annotation/MemberClasses;  value = {   Lcom/example/android/service/KitchenTimerService$KitchenTimerBinder;  } .end annotation

同じ。

2-1-2.フィールド定義 入門ページのサンプル
 public static final String ACTION = "Kitchen Timer Service";  private Timer timer;
Malware
# static fields .field public static final ACTION:Ljava/lang/String; = "Kitchen Timer Service"
# instance fields .field private timer:Ljava/util/Timer;

同じ

2-1-3.onBindメソッド 入門ページのサンプル
 @Override  public IBinder onBind(Intent intent) {   Toast toast = Toast.makeText(getApplicationContext(), "onBind()", Toast.LENGTH_SHORT);   toast.show();   return new KitchenTimerBinder();  }
Malware
# virtual methods .method public onBind(Landroid/content/Intent;)Landroid/os/IBinder;  .registers 3  .parameter "intent"
 .prologue  .line 61  new-instance v0, Lcom/example/android/service/KitchenTimerService$KitchenTimerBinder;
 invoke-direct {v0, p0}, Lcom/example/android/service/KitchenTimerService$KitchenTimerBinder;->(Lcom/example/an droid/service/KitchenTimerService;)V
 return-object v0 .end method
入門ページのサンプルはデバック用にToastの処理を入れているがこれを除けば同じ… 2-1-4.scheduleメソッド 入門ページのサンプル
 public void schedule(long delay) {   if (timer != null) {    timer.cancel();   }   timer = new Timer();   TimerTask timerTask = new TimerTask() {
   public void run() {     sendBroadcast(new Intent(ACTION));    }
  };   timer.schedule(timerTask, delay);  }
Malware
.method public schedule(J)V  .registers 5  .parameter "delay"
 .prologue  .line 75  iget-object v1, p0, Lcom/example/android/service/KitchenTimerService;->timer:Ljava/util/Timer;
 if-eqz v1, :cond_9
 .line 76  iget-object v1, p0, Lcom/example/android/service/KitchenTimerService;->timer:Ljava/util/Timer;
 invoke-virtual {v1}, Ljava/util/Timer;->cancel()V
 .line 78  :cond_9  new-instance v1, Ljava/util/Timer;
 invoke-direct {v1}, Ljava/util/Timer;->()V
 iput-object v1, p0, Lcom/example/android/service/KitchenTimerService;->timer:Ljava/util/Timer;
 .line 79  new-instance v0, Lcom/example/android/service/KitchenTimerService$2;
 invoke-direct {v0, p0}, Lcom/example/android/service/KitchenTimerService$2;->(Lcom/example/android/service/KitchenTimerService;)V
 .line 86  .local v0, timerTask:Ljava/util/TimerTask;  iget-object v1, p0, Lcom/example/android/service/KitchenTimerService;->timer:Ljava/util/Timer;
 invoke-virtual {v1, v0, p1, p2}, Ljava/util/Timer;->schedule(Ljava/util/TimerTask;J)V
 .line 87  return-void .end method

んーやっぱり同じ。

といった感じで、どうもこのサンプルソースをベースにスクラッチして作られている模様。 もしかしたら他の機能も他のTipsサイトから流用している可能性もある。 このアプリの開発者はAndroidに関してあまりスキルが無いのかもしれません。(そもそも機能自体プアなので素人でも作れると言えばそれまでですが…)

0 件のコメント:

コメントを投稿