fix:增加源码的文字说明,加强人工可读性

This commit is contained in:
lateautumn4lin 2020-09-15 22:26:36 +08:00
parent 4d4748021e
commit 03ff500655
2 changed files with 9 additions and 0 deletions

View File

@ -54,6 +54,7 @@ public class BaseEntry implements IXposedHookLoadPackage {
try { try {
// 根据配置文件设置需要hook的包名 // 根据配置文件设置需要hook的包名
try { try {
// 获取context对象
Context context = (Context) XposedHelpers.callMethod( Context context = (Context) XposedHelpers.callMethod(
XposedHelpers.callStaticMethod( XposedHelpers.callStaticMethod(
XposedHelpers.findClass( XposedHelpers.findClass(
@ -71,12 +72,14 @@ public class BaseEntry implements IXposedHookLoadPackage {
// 包含配置文件中配置的包名则进入真正Hook逻辑 // 包含配置文件中配置的包名则进入真正Hook逻辑
if ((hookPackages != null) && (hookPackages.contains(loadPackageParam.processName)) && (!loadPackageParam.processName.equals(modulePackage))) { if ((hookPackages != null) && (hookPackages.contains(loadPackageParam.processName)) && (!loadPackageParam.processName.equals(modulePackage))) {
try { try {
// 得到目标app的classloader并替换原有classloader
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() { XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
@Override @Override
protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable {
Logger.logi(String.format("Get Needed Hook Package:%s", loadPackageParam.packageName)); Logger.logi(String.format("Get Needed Hook Package:%s", loadPackageParam.packageName));
Context context = (Context) param.args[0]; Context context = (Context) param.args[0];
loadPackageParam.classLoader = context.getClassLoader(); loadPackageParam.classLoader = context.getClassLoader();
// 反射调用真正hook逻辑类的handleLoadPackage函数
invokeHandleHookMethod(context, modulePackage, handleHookClass, handleHookMethod, loadPackageParam); invokeHandleHookMethod(context, modulePackage, handleHookClass, handleHookMethod, loadPackageParam);
} }
}); });
@ -101,11 +104,13 @@ public class BaseEntry implements IXposedHookLoadPackage {
*/ */
private void invokeHandleHookMethod(Context context, String modulePackageName, String handleHookClass, String handleHookMethod, XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { private void invokeHandleHookMethod(Context context, String modulePackageName, String handleHookClass, String handleHookMethod, XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
try { try {
// 同样的寻包过程
File apkFile = findApkFile(context, modulePackageName); File apkFile = findApkFile(context, modulePackageName);
if (apkFile == null) { if (apkFile == null) {
throw new RuntimeException("Find Apk File Error"); throw new RuntimeException("Find Apk File Error");
} }
Logger.logi(String.format("Get Apk File:%s", apkFile.toString())); Logger.logi(String.format("Get Apk File:%s", apkFile.toString()));
// 新建pathclassloader得到真正hook逻辑类并调用hook方法
PathClassLoader pathClassLoader = new PathClassLoader(apkFile.getAbsolutePath(), XposedBridge.BOOTCLASSLOADER); PathClassLoader pathClassLoader = new PathClassLoader(apkFile.getAbsolutePath(), XposedBridge.BOOTCLASSLOADER);
Class<?> cls = Class.forName(handleHookClass, true, pathClassLoader); Class<?> cls = Class.forName(handleHookClass, true, pathClassLoader);
Logger.logi(String.format("Get ClassLoader:%s", apkFile.toString())); Logger.logi(String.format("Get ClassLoader:%s", apkFile.toString()));
@ -147,9 +152,12 @@ public class BaseEntry implements IXposedHookLoadPackage {
private void setNeedHookPackage(Context context) { private void setNeedHookPackage(Context context) {
ArrayList<String> NeedHookPackage = new ArrayList<String>(); ArrayList<String> NeedHookPackage = new ArrayList<String>();
try { try {
// 根据context对象获取当前apk路径
String path = findApkFile(context, modulePackage).toString(); String path = findApkFile(context, modulePackage).toString();
// 简单暴力使用zip来解包获取config文件之前采用getSource发现加入免重启功能后导致获取原包路径失败因此换用这种方案
ZipFile zipFile = new ZipFile(path); ZipFile zipFile = new ZipFile(path);
ZipEntry zipEntry = zipFile.getEntry("assets/config"); ZipEntry zipEntry = zipFile.getEntry("assets/config");
// 读流数据转化成arraylist
InputStream inputStream = zipFile.getInputStream(zipEntry); InputStream inputStream = zipFile.getInputStream(zipEntry);
InputStreamReader in = new InputStreamReader(inputStream); InputStreamReader in = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(in); BufferedReader br = new BufferedReader(in);

View File

@ -42,6 +42,7 @@ public class RealEntry implements IXposedHookLoadPackage {
), ),
"getSystemContext" "getSystemContext"
); );
// 拿到context对象去获取包名对应的一系列handler处理方法
HashMap<String, SekiroRequestHandler> associate_handlers = ClassesReaderAssistant.reader(context, loadPackageParam.packageName); HashMap<String, SekiroRequestHandler> associate_handlers = ClassesReaderAssistant.reader(context, loadPackageParam.packageName);
// step2:由注册类进行handler注册 // step2:由注册类进行handler注册
if (Register.GroupRegister(loadPackageParam, associate_handlers)) { if (Register.GroupRegister(loadPackageParam, associate_handlers)) {