package cn.edu.buaa.act.sdp.malwaredetector.services; import android.app.ActivityManager; import android.app.Service; import android.content.Intent; import android.os.AsyncTask; import android.os.IBinder; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import java.util.List; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import cn.edu.buaa.act.sdp.malwaredetector.Constant; import cn.edu.buaa.act.sdp.malwaredetector.util.AppLog; import cn.edu.buaa.act.sdp.malwaredetector.util.AppManager; import cn.edu.buaa.act.sdp.malwaredetector.util.FileUtils; public class StraceService extends Service { @Override public void onCreate() { super.onCreate(); new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10); executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { straceAllProcess(); } }, 0, 10, TimeUnit.MINUTES); return null; } }.execute(); } public void straceAllProcess() { List<ActivityManager.RunningAppProcessInfo> processList = AppManager.getRunningAppProcessInfo(this); for(ActivityManager.RunningAppProcessInfo info : processList) { AppLog.log(Constant.TAG, info.processName + " : " + info.pid, 'd', "process.txt"); startStrace(info.pid, info.processName); } } public void startStrace(final int pid, final String pName) { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { String path = FileUtils.generateFolder(pName); Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes(String.format("strace -c -o %s/%d.txt -p %d\n", path, new Date().getTime(), pid)); os.flush(); } catch (IOException e) { e.printStackTrace(); } return null; } }.execute(); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } }