吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3256|回复: 11
收起左侧

[求助] Xposed如何对String的构造函数进行hook

[复制链接]
苏紫方璇 发表于 2020-3-15 14:41
本帖最后由 苏紫方璇 于 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)
是我眼瞎了吗,哪里有这个

点评

就是这句String aa= new String(bb,"UTF-8");  详情 回复 发表于 2020-3-15 15:41
 楼主| 苏紫方璇 发表于 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不了的吧。。

点评

没想hook变量,这里应该是调用的String的构造函数public String(byte bytes[], String charsetName),我是想hook这个的。String类的方法我试了是可以的,构造函数却不行,不知道是代码写的问题还是手机装的xposed有  详情 回复 发表于 2020-3-15 16:01
一夜梦惊人 发表于 2020-3-15 15:50
看起来似乎并没有错误,可有报什么错误?

点评

没报错,就是hook不了  详情 回复 发表于 2020-3-15 15:54
 楼主| 苏紫方璇 发表于 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,这个我就不太了解了,你可以自己动手调试一下看下是哪里没有搞定

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
苏紫方璇 + 1 + 1 热心回复!

查看全部评分

一夜梦惊人 发表于 2020-3-15 21:51
苏紫方璇 发表于 2020-3-15 15:54
没报错,就是hook不了

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

点评

突然发现我还是看大佬您的教程学的xposed,安卓方面我是完完全全的小白,说的深了我也听不懂。我这里用mumu模拟器装了原版的xposed测试了下,也hook不到。我看了下findAndHookConstructor的代码,他内部是使用了find  详情 回复 发表于 2020-3-15 22:45
 楼主| 苏紫方璇 发表于 2020-3-15 22:45
一夜梦惊人 发表于 2020-3-15 21:51
个人认为,应该是class_linker上出现了一点问题,毕竟string和其他类不一样,他是有着属于自己的c++类的

突然发现我还是看大佬您的教程学的xposed,安卓方面我是完完全全的小白,说的深了我也听不懂。我这里用mumu模拟器装了原版的xposed测试了下,也hook不到。我看了下findAndHookConstructor的代码,他内部是使用了findConstructorExact和XposedBridge.hookMethod,我试了下,find貌似是能找到类的。我现在想确定一下,这种情况是xposed钩不了这种特殊的,还是我代码的问题
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 06:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表