と言っても詐欺の話です。
- Smartphone App Used for One-Click Fraud in Japan(Symantec Security Response Blog: 1/13)
- One-Click Billing Fraud Scheme Through Android App Found(Trend micro Malware Blog: 1/12)
ワンクリック詐欺っていうのは、日本のお家芸なんですかね。海外の事例を聞いたことがありません。 該当の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に聞いてみました。
すると、- Androidで動く携帯Javaアプリ作成入門(7)- 常駐アプリが作成できるAndroidの“サービス”とは(@IT: 2009/6/18)
ほうほう、サンプルのコードを見るとタイマーの実装をしてるあたり、今回の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 件のコメント:
コメントを投稿