android qq加固自动,【手机端】腾讯乐固,360加固一键脱壳

该代码段展示了一个实现`IXposedHookLoadPackage`接口的Java类,用于在Xposed框架下拦截并处理特定包名的应用的类加载过程。它通过反射调用`Dex`类的方法获取类的字节码,并将这些字节码写入到设备的 Dex 文件中。此操作可能用于插件化或热修复等场景。
摘要由CSDN通过智能技术生成

[Java] 纯文本查看 复制代码package com.ppma.xposed;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.lang.reflect.Method;

import de.robv.android.xposed.IXposedHookLoadPackage;

import de.robv.android.xposed.XC_MethodHook;

import de.robv.android.xposed.XSharedPreferences;

import de.robv.android.xposed.XposedBridge;

import de.robv.android.xposed.XposedHelpers;

import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class MainHook implements IXposedHookLoadPackage {

XSharedPreferences xsp;

Class Dex;

Method Dex_getBytes;

Method getDex;

String packagename;

public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

xsp = new XSharedPreferences("com.ppma.appinfo", "User");

xsp.makeWorldReadable();

xsp.reload();

initRefect();

packagename = xsp.getString("packagename", null);

XposedBridge.log("设定包名:"+packagename);

if ((!lpparam.packageName.equals(packagename))||packagename==null) {

XposedBridge.log("当前程序包名与设定不一致或者包名为空");

return;

}

XposedBridge.log("目标包名:"+lpparam.packageName);

String str = "java.lang.ClassLoader";

String str2 = "loadClass";

XposedHelpers.findAndHookMethod(str, lpparam.classLoader, str2, String.class, Boolean.TYPE, new XC_MethodHook() {

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

super.afterHookedMethod(param);

Class cls = (Class) param.getResult();

if (cls == null) {

//XposedBridge.log("cls == null");

return;

}

String name = cls.getName();

XposedBridge.log("当前类名:" + name);

byte[] bArr = (byte[]) Dex_getBytes.invoke(getDex.invoke(cls, new Object[0]), new Object[0]);

if (bArr == null) {

XposedBridge.log("数据为空:返回");

return;

}

XposedBridge.log("开始写数据");

String dex_path = "/data/data/" + packagename + "/" + packagename + "_" + bArr.length + ".dex";

XposedBridge.log(dex_path);

File file = new File(dex_path);

if (file.exists()) return;

writeByte(bArr, file.getAbsolutePath());

}

} );

}

public void initRefect() {

try {

Dex = Class.forName("com.android.dex.Dex");

Dex_getBytes = Dex.getDeclaredMethod("getBytes", new Class[0]);

getDex = Class.forName("java.lang.Class").getDeclaredMethod("getDex", new Class[0]);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

public void writeByte(byte[] bArr, String str) {

try {

OutputStream outputStream = new FileOutputStream(str);

outputStream.write(bArr);

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

XposedBridge.log("文件写出失败");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值