Xposed hook微信二维码收款信息

学习借鉴Xposed微信支付宝个人免签收款

这里我只是hook到微信收款信息后显示出来

Xposed hook微信二维码收款信息_第1张图片

项目github地址ObtainWXBillInfo

资源地址(里面有xml和json转换工具JASONJava.jar包、apk安装包等等......)

链接:https://pan.baidu.com/s/104DBdsSZHnWqlZ0EMLe49g
提取码:t11r 

hook代码:

public class XposedProgram implements IXposedHookLoadPackage {

    private Context wxContext;
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
    {
        if(loadPackageParam.packageName.equals("com.tencent.mm"))
        {
            hookWxContext(loadPackageParam.classLoader);
            hookBill(loadPackageParam.classLoader);
            return;
        }
    }

    //获取上下文
    private void hookWxContext(final ClassLoader appClassLoader)
    {
        try {
            Class ContextClass = XposedHelpers.findClass("android.content.ContextWrapper", appClassLoader);
            XposedHelpers.findAndHookMethod(ContextClass, "getApplicationContext", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    if (wxContext != null)
                        return;
                    wxContext = (Context) param.getResult();

                }
            });
        } catch (Throwable t) {
            XposedBridge.log("获取上下文出错");
            wxContext = null;
        }
    }

    //hook 。。。。。。
    private void hookBill(final ClassLoader appClassLoader)
    {

        XposedHelpers.findAndHookMethod("com.tencent.wcdb.database.SQLiteDatabase", appClassLoader, "insert", String.class, String.class, ContentValues.class,
                new XC_MethodHook() {
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param)
                            throws Throwable {

                        try {
                            ContentValues contentValues = (ContentValues) param.args[2];
                            String tableName = (String) param.args[0];
                            if (TextUtils.isEmpty(tableName) || !tableName.equals("message")) {
                                return;
                            }
                            Integer type = contentValues.getAsInteger("type");
                            if (null == type) {
                                return;
                            }

//                            XposedBridge.log("\n\n\n遍历content里的信息:");
//                            for(Map.Entry item : contentValues.valueSet())
//                            {
//                                XposedBridge.log(item.getKey() + " , " + item.getValue().toString());
//                            }
//                            XposedBridge.log("遍历content里的信息完成\n\n\n");


                            if (type == 318767153) {
                                String contentStr = contentValues.getAsString("content");
                                JSONObject msg = XML.toJSONObject(contentStr);
                                XposedBridge.log("收款信息(json):"+msg);

                                JSONObject mmreader = msg.getJSONObject("msg").getJSONObject("appmsg").getJSONObject("mmreader");
                                //获取时间
                                long time = mmreader.getJSONObject("template_header").getLong("pub_time");
                                Date currentTime = new Date(time);
                                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                                String dateString = formatter.format(currentTime);


                                //获取收款明细
                                JSONObject billDetail = mmreader.getJSONObject("template_detail").getJSONObject("line_content");

                                //获取收款标题、金额等
                                JSONObject topLine = billDetail.getJSONObject("topline");
                                //收款标题
                                String topLineKey = topLine.getJSONObject("key").getString("word");
                                //收款金额
                                String topLineValue = topLine.getJSONObject("value").getString("word");
                                float money = Float.parseFloat(topLineValue.replace("¥", ""));

                                //获取汇总、备注等信息
                                JSONArray line = billDetail.getJSONObject("lines").getJSONArray("line");
                                //获取汇总
                                JSONObject line0Detail = line.getJSONObject(0);
                                String line0Title = line0Detail.getJSONObject("key").getString("word");
                                String line0Msg = line0Detail.getJSONObject("value").getString("word");
                                //获取备注
                                JSONObject line1Detail = line.getJSONObject(1);
                                String line1Title = line1Detail.getJSONObject("key").getString("word");
                                String line1Msg = line1Detail.getJSONObject("value").getString("word");

                                XposedBridge.log("\n\n\n获取到时间:" + dateString  );
                                XposedBridge.log(topLineKey + money);
                                XposedBridge.log(line0Title + " " + line0Msg);
                                XposedBridge.log(line1Title + " " + line1Msg);

                                XposedBridge.log("开始通知客户端");
                                XposedBridge.log("--------------------");
                                String data = "" +
                                        "" + "" + topLineKey + "" + "" + money + "" + "" +
                                        "" + "" + line0Title + "" + "" + line0Msg + "" + "" +
                                        "" + "" + line1Title + "" + "" + line1Msg + "" + "";
                                //把信息广播出去
                                Intent intent = new Intent("com.example.a32960.moudletest");
                                intent.putExtra("xmlData", data);
                                wxContext.sendBroadcast(intent);

                            }
                        } catch (Exception e) {
                            XposedBridge.log("获取信息出错: "+ e.getMessage());
                        }
                    }

                });
    }
}

信息获取到了通知后台什么的就不用多说了

你可能感兴趣的:(xposed)