一、目标

一、目标

某电商App签名算法解析(一)的文章里面我们分析了签名算法的位置,今天我们和之前的 某右协议分析(四) 文章一样,利用Xposed + NanoHTTPD 来实现rpc调用,做签名服务

二、分析

签名函数一共5个参数,

jdsigntwo1
1:jdsigntwo1

通过之前的frida的分析结果

  • str = functionId
  • str2 = body
  • str3 = uuid
  • str4 = client
  • str5 = clentVersion

这里面就是第一个参数 Context 比较麻烦,需要我们构造一个,这里我们hook android.content.ContextWrapper来获取Context

try  {
	Class<?>  ContextClass  =   XposedHelpers.findClass("android.content.ContextWrapper",  loadPackageParam.classLoader);
    XposedHelpers.findAndHookMethod(ContextClass,  "getApplicationContext",  new  XC_MethodHook()  {
    @Override
    protected  void  afterHookedMethod(MethodHookParam  param)  throws  Throwable  {
		super.afterHookedMethod(param);
        if  (applicationContext  !=  null)
			return;
            applicationContext  =  (Context)  param.getResult();
            log("-->得到上下文");
	    }
    });
}  catch  (Throwable  t)  {
	log("-->获取上下文出错");
}

参数都ok了,就可以调用签名函数了

Class<?> clazzXXUtils = null;
try {
	clazzXXUtils = loadPackageParam.classLoader.loadClass("com.xxxxxxxx.common.utils.BitmapkitUtils");
    log("load class:" + clazzXXUtils);
} catch (Exception e) {
	log("load class err:" + Log.getStackTraceString(e));
    return newFixedLengthResponse("BitmapkitUtils load class is null");
}

...

String rc = (String) XposedHelpers.callStaticMethod(clazzJDUtils, "getSignFromJni", applicationContext ,str,str2,str3,str4,str5);
log("getSignFromJni = "+rc);

结果正常返回了签名,把这个签名加到url后面就可以正常返回结果。

getSignFromJni = st=1605755406793&sign=43f8086393e3e9fefbd5d6ae87fcd8ce&sv=110

我们拿go语言写个请求程序,搜索一下 “柚子”

jdsend
1:sendrc

结果正常, 收工。

100

关注微信公众号,最新技术干货实时推送

100