一、目标
某电商App签名算法解析(一)的文章里面我们分析了签名算法的位置,今天我们和之前的 某右协议分析(四) 文章一样,利用Xposed + NanoHTTPD 来实现rpc调用,做签名服务
二、分析
签名函数一共5个参数,
通过之前的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语言写个请求程序,搜索一下 “柚子”
结果正常, 收工。
关注微信公众号,最新技术干货实时推送