苏紫方璇 发表于 2020-3-15 14:41

Xposed如何对String的构造函数进行hook

本帖最后由 苏紫方璇 于 2020-3-15 16:02 编辑

如题,我想hook String类的一个构造函数,看文档说用findAndHookConstructor这个函数来hook,但是测试无效,求问该怎么写才可以hook到。

测试的目标代码
```
package com.suzi.xposedtest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import java.io.UnsupportedEncodingException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      byte bb[]={'a','b','c','e','f'};
      try {
            String aa= new String(bb,"UTF-8");
            Toast.makeText(this,aa,Toast.LENGTH_LONG).show();
      } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
      }

    }
}
```
我需要hook这里的public String(byte bytes[], String charsetName)


我使用的hook代码
```
package com.suzi.xposedtest;

import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class HookMain implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
      if(!lpparam.packageName.equals("com.suzi.xposedtest")) return;
                XposedHelpers.findAndHookConstructor("java.lang.String",lpparam.classLoader, byte[].class, String.class, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                  super.afterHookedMethod(param);
                  Log.i("szfx","hook");
                }
            });
    }
}
```

十一七 发表于 2020-3-15 15:33

public String(byte bytes[], String charsetName)
是我眼瞎了吗,哪里有这个

苏紫方璇 发表于 2020-3-15 15:41

十一七 发表于 2020-3-15 15:33
public String(byte bytes[], String charsetName)
是我眼瞎了吗,哪里有这个

就是这句String aa= new String(bb,"UTF-8");

十一七 发表于 2020-3-15 15:49

函数内部的变量xp frida都Hook不了的吧。。

一夜梦惊人 发表于 2020-3-15 15:50

看起来似乎并没有错误,可有报什么错误?

苏紫方璇 发表于 2020-3-15 15:54

一夜梦惊人 发表于 2020-3-15 15:50
看起来似乎并没有错误,可有报什么错误?

没报错,就是hook不了

苏紫方璇 发表于 2020-3-15 16:01

十一七 发表于 2020-3-15 15:49
函数内部的变量xp frida都Hook不了的吧。。

没想hook变量,这里应该是调用的String的构造函数public String(byte bytes[], String charsetName),我是想hook这个的。String类的方法我试了是可以的,构造函数却不行,不知道是代码写的问题还是手机装的xposed有问题(手机上是安卓9+EdXposed Sandhook0.4.6.1)

一夜梦惊人 发表于 2020-3-15 21:50

苏紫方璇 发表于 2020-3-15 15:54
没报错,就是hook不了

我看了一下xposed源码,应该是可以的,只不过正想回复时发现你是使用的sandhook,这个我就不太了解了,你可以自己动手调试一下看下是哪里没有搞定

一夜梦惊人 发表于 2020-3-15 21:51

苏紫方璇 发表于 2020-3-15 15:54
没报错,就是hook不了

个人认为,应该是class_linker上出现了一点问题,毕竟string和其他类不一样,他是有着属于自己的c++类的

苏紫方璇 发表于 2020-3-15 22:45

一夜梦惊人 发表于 2020-3-15 21:51
个人认为,应该是class_linker上出现了一点问题,毕竟string和其他类不一样,他是有着属于自己的c++类的

突然发现我还是看大佬您的教程学的xposed,安卓方面我是完完全全的小白,说的深了我也听不懂。我这里用mumu模拟器装了原版的xposed测试了下,也hook不到。我看了下findAndHookConstructor的代码,他内部是使用了findConstructorExact和XposedBridge.hookMethod,我试了下,find貌似是能找到类的。我现在想确定一下,这种情况是xposed钩不了这种特殊的,还是我代码的问题
页: [1] 2
查看完整版本: Xposed如何对String的构造函数进行hook