有券助手分析
1.技术调研
首先,有券助手 是一款 基于 xposed的hook技术的应用.目前,在论坛上有很多种类似应用,例如抢红包,修改微信计步器等等,这是论坛地址传送门.所有要想使用有券助手,必须安装 xposed install 插件.
关于xposed,这是官方的介绍.,它是嵌入到手机系统级别的插件,只要你对源码或者app代码熟悉,让你可以”随意”,装饰,修改,嵌入 自己的代码.
缺陷:
- 必须安装xposed插件.
- 安装xposed插件,会造成手机安全性降低.
- 目前,xposed插件,仅支持Android7.0以下的机器.而且不兼容部分机型.
- 每次安装带有xposed模块的应用,都需要重启手机.
2.技术实现分析
1.打开有券助手后, 会开启两个服务A和B,A是主服务-负责hook(可以理解为监视)淘宝天猫应用.B是为粘贴板服务.
2.当开启服务后,打开淘宝app.A服务会用xposed框架,得到拿到当前进程,以及包名,版本号.
final Object activityThread = callStaticMethod(findClass("android.app.ActivityThread", null), "currentActivityThread");
final Context context = (Context) callMethod(activityThread, "getSystemContext");
final int versionCode = context.getPackageManager().getPackageInfo(APP_PACKAGE, 0).versionCode;
3.当打开淘宝详情页,执行自己的hook操作.
String str = paramActivity.getClass().getName();
if ((!("com.taobao.tao.detail.activity.DetailActivity".equals(str))) && (!("com.tmall.wireless.detail.ui.TMItemDetailsActivity".equals(str))))
return;
Object localObject = this.mCouponLib2;
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = paramActivity;
arrayOfObject[1] = Boolean.valueOf(isYouquanAutoOpen());
XposedHelpers.callMethod(localObject, "doCreateHook", arrayOfObject);
4.核心代码在doCreateHook()
中.
其中这个方法,以及所在的类,被混淆,无法找到和查看.
但是依据网易云音乐查看下架音乐的源代码,具体实现流程应该如下
1.在doCreateHook
方法中.拿到商品id,用户id,等参数.
2.通过抓包等手段获取优惠券接口,在app内 用淘宝的自己的请求,请求自己的接口.对已知优惠券接口网络请求得到优惠券的H5界面.
3.根据2得到的当前进程的上下文,startActivity()
跳到H5领取界面,领取优惠券.
举个例子
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals("com.taobao.tao.detail.activity.DetailActivity"))
return;
findAndHookMethod("com.taobao.tao.detail.activity.DetailActivity", lpparam.classLoader, "get优惠券()", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// this will be called before the clock was updated by the original method
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// this will be called after the clock was updated by the original method
}
});
XposedHelpers.callMethod()
}
3.总结
有券助手在 熟知淘宝优惠券api,淘宝详情页java类,以及对应的变量和方法名前提下,通过xposed自带的hook技术,拿到优惠券数据,从而实现领券功能.