public class qqx5 {
public static void qqx5Hook(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws ClassNotFoundException{
if (!loadPackageParam.packageName.contains("com.tencent.tmgp.MGCForAndroid")) return;
XposedBridge.log("Loaded app: " + loadPackageParam.packageName);
//该函数应该是一个日志类,此处hook该类可以查看关键信息
XposedHelpers.findAndHookMethod("com.tencent.open.a.f", loadPackageParam.classLoader, "c", String.class, String.class, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//XposedBridge.log("日志类*****");
String str_1 = param.args[0].toString();
if((!str_1.contains("HotUpdate")) && (!str_1.contains("GiftConfig"))){
XposedBridge.log("日志类:" + str_1 + ":" + param.args[1].toString());
}
}
});
//另一个日志类
XposedHelpers.findAndHookMethod("com.h3d.qqx5.utils.z", loadPackageParam.classLoader, "b", String.class, String.class, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("日志类*****");
String str_1 = param.args[0].toString();
if((!str_1.contains("HotUpdate")) && (!str_1.contains("GiftConfig"))){
XposedBridge.log("日志类:" + str_1 + ":" + param.args[1].toString());
}
}
});
XposedHelpers.findAndHookMethod("com.h3d.qqx5.utils.RSAUtil", loadPackageParam.classLoader, "encrypt", int.class, String.class, int.class, int.class, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("RSAUtilencrypt*****");
XposedBridge.log("RSAUtilencrypt_param_0:" + param.args[0].toString());
XposedBridge.log("RSAUtilencrypt_param_1:" + param.args[1].toString());
XposedBridge.log("RSAUtilencrypt_param_2:" + param.args[2].toString());
XposedBridge.log("RSAUtilencrypt_param_3:" + param.args[3].toString());
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("RSAUtilencrypt_return:" + param.getResult().toString());
}
});
//发送数据包加密与解密
XposedHelpers.findAndHookMethod("com.h3d.qqx5.framework.d.j", loadPackageParam.classLoader, "b", int.class, byte[].class,int.class, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("decrypt*****");
XposedBridge.log("decrypt_param_0:" + param.args[0].toString());
XposedBridge.log("decrypt_param_1:" + utils.bytesToHexFun1((byte[])param.args[1]));
XposedBridge.log("decrypt_param_2:" + param.args[2].toString());
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("decrypt_return:" + utils.bytesToHexFun1((byte[])param.args[1]));
}
});
XposedHelpers.findAndHookMethod("com.h3d.qqx5.framework.d.j", loadPackageParam.classLoader, "a", int.class, byte[].class,int.class, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("encrypt*****");
XposedBridge.log("encrypt_param_0:" + param.args[0].toString());
XposedBridge.log("encrypt_param_1:" + utils.bytesToHexFun1((byte[])param.args[1]));
XposedBridge.log("encrypt_param_2:" + param.args[2].toString());
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("encrypt_return:" + utils.bytesToHexFun1((byte[])param.args[1]));
}
});
Class<?> NetBufferClass = loadPackageParam.classLoader.loadClass("com.h3d.qqx5.framework.d.f");
XposedHelpers.findAndHookMethod("com.h3d.qqx5.framework.d.j", loadPackageParam.classLoader, "a", Object.class, NetBufferClass, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String str = param.args[0].getClass().getName();
XposedBridge.log("SaveStream_param_0:" + str);
}
});
XposedHelpers.findAndHookMethod("com.h3d.qqx5.framework.d.j", loadPackageParam.classLoader, "b", Object.class, NetBufferClass, new XC_MethodHook(){
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
String str = param.args[0].getClass().getName();
XposedBridge.log("LoadStream_param_0:" + str);
}
});
XposedHelpers.findAndHookMethod("com.h3d.qqx5.framework.d.h", loadPackageParam.classLoader, "c", new XC_MethodHook(){
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Method rpcMethod = param.getResult().getClass().getMethod("k");
ByteBuffer response = (ByteBuffer) rpcMethod.invoke(param.getResult());
byte[] bytes = response.array();
XposedBridge.log("m_body_buffer_return:" + utils.bytesToHexFun1(bytes));
}
});
XposedHelpers.findAndHookMethod("com.h3d.qqx5.framework.d.h", loadPackageParam.classLoader, "d", new XC_MethodHook(){
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Method rpcMethod = param.getResult().getClass().getMethod("k");
ByteBuffer response = (ByteBuffer) rpcMethod.invoke(param.getResult());
byte[] bytes = response.array();
XposedBridge.log("m_header_buffer_return:" + utils.bytesToHexFun1(bytes));
}
});
}
}