diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2acf124..f0fc089 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,9 +1,10 @@ - + HookPackageInfo = new HashMap(); + private SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + sharedPreferences = getSharedPreferences("HeadWolf", MODE_PRIVATE); Logger.logi("StartUp MainActivity"); + Switch btnUpdate = findViewById(R.id.btn_update); + Boolean function_1_enable = sharedPreferences.getBoolean("function_1", false); + btnUpdate.setChecked(function_1_enable); + btnUpdate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SharedPreferences.Editor edt = sharedPreferences.edit(); + if (isChecked) { + edt.putBoolean("function_1", true); + Toast.makeText(MainActivity.this, "寮鍚", Toast.LENGTH_SHORT).show(); + } else { + edt.putBoolean("function_1", false); + Toast.makeText(MainActivity.this, "鍏抽棴", Toast.LENGTH_SHORT).show(); + } + edt.apply(); + } + }); + if (function_1_enable) { + GetPackages(); + } } + + /** + * Get packages. + */ + public void GetPackages() { + HashMap propertiesAssistant = PropertiesAssistant.getJsonProperties(); + for (Object group : propertiesAssistant.keySet()) { + if (((String) group).contains("group")) { + JsonObject GroupInfo = (new Gson()).toJsonTree(propertiesAssistant.get(group)).getAsJsonObject(); + String name = GroupInfo.get("name").toString().replace("\"", ""); + String home = GroupInfo.get("home").toString().replace("\"", ""); + HookPackageInfo.put(name, home); + } + } + PackageManager localPackageManager = getPackageManager(); + List localList = localPackageManager.getInstalledPackages(0); + for (int i = 0; i < localList.size(); i++) { + PackageInfo localPackageInfo1 = (PackageInfo) localList.get(i); + String survive_app = localPackageInfo1.packageName.split(":")[0]; + if (((ApplicationInfo.FLAG_SYSTEM & localPackageInfo1.applicationInfo.flags) == 0) && ((ApplicationInfo.FLAG_UPDATED_SYSTEM_APP & localPackageInfo1.applicationInfo.flags) == 0) && ((ApplicationInfo.FLAG_STOPPED & localPackageInfo1.applicationInfo.flags) == 0)) { + if (HookPackageInfo.keySet().contains(survive_app)) { + Logger.loge(survive_app); + RestartApp(survive_app); + } + } + } + } + + /** + * Restart app. + * + * @param package_name the package name + */ + public void RestartApp(String package_name) { + try { + ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); + am.killBackgroundProcesses(package_name); + Thread.sleep(3000); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_MAIN); + ComponentName cn = new ComponentName(package_name, HookPackageInfo.get(package_name)); + intent.setComponent(cn); + startActivity(intent); + } catch (Exception e) { + Logger.loge(e.toString()); + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/lateautumn4lin/headwolf/entry/RealEntry.java b/app/src/main/java/com/lateautumn4lin/headwolf/entry/RealEntry.java index 8b38c04..0a52a44 100644 --- a/app/src/main/java/com/lateautumn4lin/headwolf/entry/RealEntry.java +++ b/app/src/main/java/com/lateautumn4lin/headwolf/entry/RealEntry.java @@ -29,7 +29,6 @@ public class RealEntry implements IXposedHookLoadPackage { public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { try { // 娴嬭瘯 - Logger.logi("test"); Logger.logi(String.format("Begin Real Hook Logic About:%s", loadPackageParam.packageName)); // step1:鑾峰彇context Context context = (Context) XposedHelpers.callMethod( diff --git a/app/src/main/java/com/lateautumn4lin/headwolf/handlers/KuaishouHandler.java b/app/src/main/java/com/lateautumn4lin/headwolf/handlers/KuaishouHandler.java index 38b01d7..8a64408 100644 --- a/app/src/main/java/com/lateautumn4lin/headwolf/handlers/KuaishouHandler.java +++ b/app/src/main/java/com/lateautumn4lin/headwolf/handlers/KuaishouHandler.java @@ -45,7 +45,7 @@ public class KuaishouHandler extends BaseHandler implements SekiroRequestHandler final Gson gson = new Gson(); final Map object = new HashMap(); String name = sekiroRequest.getString("name"); - object.put("name", name); + object.put("name", name + " again kuaishou no.3"); // 娴嬭瘯涓夌璇锋眰杩斿洖鏂瑰紡 娴嬭瘯鏂规 1000/s 鎬昏姹 50*1000 // P1:闃诲杩斿洖 // sekiroResponse.send(gson.toJson(object)); diff --git a/app/src/main/java/com/lateautumn4lin/headwolf/handlers/TaobaoHandler.java b/app/src/main/java/com/lateautumn4lin/headwolf/handlers/TaobaoHandler.java new file mode 100644 index 0000000..f515648 --- /dev/null +++ b/app/src/main/java/com/lateautumn4lin/headwolf/handlers/TaobaoHandler.java @@ -0,0 +1,63 @@ +package com.lateautumn4lin.headwolf.handlers; +/* + * KuaishouHandler + * + * @author lateautumn4lin + * @github https://github.com/lateautumn4lin + * @date 2020/9/10 15:39 + */ + +import com.google.gson.Gson; +import com.lateautumn4lin.headwolf.commons.Response; +import com.lateautumn4lin.headwolf.entry.BaseEntry; +import com.virjar.sekiro.api.SekiroRequest; +import com.virjar.sekiro.api.SekiroRequestHandler; +import com.virjar.sekiro.api.SekiroResponse; + +import java.util.HashMap; +import java.util.Map; + +/** + * The type Kuaishou handler. + */ +public class TaobaoHandler extends BaseHandler implements SekiroRequestHandler { + /** + * Gets belong. + * + * @return the belong + */ + public String getBelong() { + return "com.taobao.live"; + } + + /** + * Gets action. + * + * @return the action + */ + public String getAction() { + return "sign"; + } + + + @Override + public void handleRequest(SekiroRequest sekiroRequest, final SekiroResponse sekiroResponse) { + final Gson gson = new Gson(); + final Map object = new HashMap(); + String name = sekiroRequest.getString("name"); + object.put("name", name + " again taobao no.2"); +// 娴嬭瘯涓夌璇锋眰杩斿洖鏂瑰紡 娴嬭瘯鏂规 1000/s 鎬昏姹 50*1000 +// P1:闃诲杩斿洖 +// sekiroResponse.send(gson.toJson(object)); +// P2:鏂板缓绾跨▼杩斿洖 70/s锛屽搷搴1鍒嗛挓寮澶栵紝寤惰繜杩囬珮 +// new Thread(new Runnable() { +// @Override +// public void run() { +// sekiroResponse.send(gson.toJson(object)); +// } +// }); +// P3:绾跨▼姹犺繑鍥 1000/s锛屽搷搴1s宸﹀彸 + Runnable task = new Response(gson.toJson(object), sekiroResponse); + BaseEntry.threadPoolExecutor.submit(task); + } +} diff --git a/app/src/main/java/com/lateautumn4lin/headwolf/utils/ClassesReaderAssistant.java b/app/src/main/java/com/lateautumn4lin/headwolf/utils/ClassesReaderAssistant.java index 9ddbd3a..eac37ad 100644 --- a/app/src/main/java/com/lateautumn4lin/headwolf/utils/ClassesReaderAssistant.java +++ b/app/src/main/java/com/lateautumn4lin/headwolf/utils/ClassesReaderAssistant.java @@ -112,6 +112,7 @@ public final class ClassesReaderAssistant { Class classloader = RealEntry.class.getClassLoader().loadClass(cls.getName()); Constructor handler_constructor = classloader.getConstructor(); Object handler = handler_constructor.newInstance(); + Logger.logi(String.format("New Object %s", handler)); associate_handlers.put((String) action, (SekiroRequestHandler) handler); } } catch (NoSuchMethodException e) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7ac57ce..34d7481 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -15,4 +15,13 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 50ce107..c3b825f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ Headwolf妗嗘灦 + 鑷姩娉ㄥ唽hook app鐨刪andlers