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");
}
}