Logo Passei Direto
Buscar
Material

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

using System.Diagnostics;
using System.Text;
namespace AotForms
{
 internal class Adb
 {
 string _path;
 StringBuilder _builder;
 Process _process;
 internal Adb(string path)
 {
 _path = path;
 _builder = new StringBuilder();
 }
 internal async Task Kill()
 {
 await Task.Run(() => {
 var adbProcesses = Process.GetProcessesByName("adb");
 foreach (var adbProcess in adbProcesses)
 {
 adbProcess.Kill();
 adbProcess.WaitForExit();
 }
 adbProcesses = Process.GetProcessesByName("HD-Adb");
 foreach (var adbProcess in adbProcesses)
 {
 adbProcess.Kill();
 adbProcess.WaitForExit();
 }
 return Task.CompletedTask;
 });
 }
 internal async Task<bool> Start()
 {
 return await Task.Run(() => {
 ExecuteAdbCommand("kill-server");
 ExecuteAdbCommand("devices");
 _process = new Process();
 _process.StartInfo.FileName = _path;
 _process.StartInfo.Arguments = "shell \"getprop ro.secure ; /boot/android/android/system/xbin/bstk/su\"";
 _process.StartInfo.RedirectStandardOutput = true;
 _process.StartInfo.RedirectStandardError = true;
 _process.StartInfo.RedirectStandardInput = true;
 _process.StartInfo.UseShellExecute = false;
 _process.StartInfo.CreateNoWindow = true;
 _process.EnableRaisingEvents = true;
 _process.OutputDataReceived += Receiver;
 _process.ErrorDataReceived += Receiver;
 _process.Start();
 _process.BeginOutputReadLine();
 _process.BeginErrorReadLine();
 _process.StandardInput.AutoFlush = true;
 while (_builder.Length == 0) Thread.Sleep(1);
 return true;
 });
 }
 void Receiver(object sender, DataReceivedEventArgs e)
 {
 if (e.Data != null)
 _builder.AppendLine(e.Data);
 }
 internal async Task<uint> FindModule(string process, string module)
 {
 return await Task.Run(() => {
 _builder.Clear();
 _process.StandardInput.WriteLine($"ps");
 while (_builder.Length == 0) Thread.Sleep(1);
 var pid = "";
 while (string.IsNullOrEmpty(pid))
 {
 Thread.Sleep(1);
 var procLines = _builder.ToString().Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
 foreach (var procLine in procLines)
 {
 if (procLine.Contains(process))
 {
 var splitted = procLine.Split(' ');
 var tempLine = procLine.Replace(" ", "");
 if (!tempLine.StartsWith(splitted[0]))
 return 1U;
 var startIndex = splitted[0].Length;
 pid = tempLine.Substring(startIndex, Math.Min(4, tempLine.Length - startIndex));
 }
 }
 }
 _builder.Clear();
 _process.StandardInput.WriteLine($"cat proc/{pid}/maps | grep {module}");
 while (_builder.Length == 0) Thread.Sleep(1);
 var modules = _builder.ToString().Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
 var mod = modules[0].Split('-');
 _process.Kill();
 _process.WaitForExit();
 _ = Kill();
 return Convert.ToUInt32(mod[0], 16);
 });
 }
 void ExecuteAdbCommand(string command)
 {
 var proc = new Process
 {
 StartInfo = new ProcessStartInfo
 {
 FileName = _path,
 Arguments = command,
 UseShellExecute = false,
 RedirectStandardOutput = false,
 RedirectStandardError = false,
 CreateNoWindow = true
 }
 };
 proc.Start();
 proc.WaitForExit();
 }
 }
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina