首先,需要准备好jd.apk和unidbg的环境,可以参考官方文档进行安装和配置。

接下来,我们需要使用unidbg对jd.apk进行hook,找到Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni方法,并且构造方法参数。具体步骤如下:

  1. 先使用unidbg加载jd.apk,获取到JNIEnv和jclass对象。
File apkFile = new File('jd.apk');
AndroidEmulator emulator = new AndroidEmulator(abi);
Vm vm = emulator.createDalvikVM(apkFile);
vm.setJniLibrary('jd.apk'); // 设置jni库
vm.setVerbose(true);
vm.setTrace(true);

DvmClass clazz = vm.resolveClass('com.jingdong.app.mall');
DvmObject context = clazz.newObject(null); // 构造context对象
String[] args = new String[]{context.toString(), 'param1', 'param2', 'param3', 'param4', 'param5', 'param6'};
  1. 找到Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni方法,并且获取到该方法的Method对象。
DvmClass bitmapkitUtilsClass = vm.resolveClass('com.jingdong.common.utils.BitmapkitUtils');
DvmMethod getSignFromJniMethod = bitmapkitUtilsClass.getStaticMethod('getSignFromJni', '(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;');
  1. 构造参数对象,将context和其他参数转换为DvmObject对象。
List<Object> list = new ArrayList<>();
for (String arg : args) {
    list.add(vm.jvm.createString(arg));
}
DvmObject<?>[] dvmObjects = list.toArray(new DvmObject<?>[0]);
  1. 调用getSignFromJni方法,获取到签名值。
String sign = getSignFromJniMethod.callStaticObjectMethod(dvmObjects).getValue().toString();
System.out.println('sign=' + sign);

以上就是调用jd.apk中Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni方法的示例步骤,其中需要注意的是,方法参数需要按照方法签名的顺序进行构造,并且需要将参数转换为DvmObject对象。

unidbg调用jd.apk中Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni方法示例

原文地址: https://www.cveoy.top/t/topic/mY4Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录