非Xposed版 修改微信摇塞子

本文继续上篇文章

微信6.6.7版本摇塞子破解思路(居多图)

本文不再粘贴java转smali语法详细过程,只是讲诉下思路

 

 

 

Xposed版本 不是所有手机环境都支持,所以我才想试试直接反编译代码写入微信apk中,这样用户就不需要配置什么复杂的环境.

 

第一个目标

效果如图

 

怎么做呢?很简单嘛拿TraceView 简体这个按钮触发点击事件在哪即可.

 

可以看到点击处理在HomeUI$25这个类中

 

那么我们先写一个弹窗函数m_show函数 嵌入HomeUI$25这个类

 

public boolean m_show(View view) {
    try {
        //LauncherUI.m_instance_LauncherUI是一个上下文对象 
        AlertDialog.Builder builder = new AlertDialog.Builder(LauncherUI.m_instance_LauncherUI);
        builder.setTitle("桂电的互联扫地僧");
        String options[] = new String[]{"抢红包", "塞子控制", "猜拳控制", "防撤销", "闪图保存"};

        builder.setItems(options, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
              

            }
        });

        builder.setNegativeButton("关闭", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });


        builder.show();
    } catch (Exception e) {
        Log.e("FMY=================", "m_show: ");
        e.printStackTrace();
    }
    return true;
}

 

特别提醒的就是上面这个java转smali会生成匿名类文件,请一并拷贝到反编译的微信中

 

上面这个方法是嵌入在我们要反编译之后的微信之中的,我们直接嵌入HomeUI$25这个类即可,当用户点击微信界面的十字先执行它原本的的onclick函数,我们在onclick函数中调用m_show()即可.(当然这里嵌入的是smali代码,上一篇文章讲诉过怎么做了)

再来解决一个问题如何得到上下文对象实例?因为我们弹窗代码需要用到这个作为参数.

解决办法,也很简单,View有一个函数getContent来获取 .然后你会发现用这个方法不一定成功哦,这里不做原因解释

我们直接干脆拿微信界面的Activity界面的对象实例.(Activity也是一个上下文对象的子类)

 

首先打开微信界面,然后再命令行输入 adb shell dumpsys acitivity top

 

 

我们这里采用的思想如下.

在LanucherUi这个类中创建public的静态实例指向自己,

伪代码如下(请自行修改微信源smali代码)

 

 

此时弹窗代码基本思路介绍完了.我们把弹窗完善下,当用户点击弹窗的控制撒子按钮时我们在弹窗一个选择1到6的选择界面,目的是让用户选择塞子点数.

 

这里直接贴代码吧

class HomeUI$25 {

    
    public void onClick(View view){
        /**
         * ************************
         * **********************
         * 这里注释表示原本程序的逻辑代码
         * *********************
         * **********************
         */
        m_show(view);//弹窗
        /**
         * ************************
         * **********************
         * 这里注释表示原本程序的逻辑代码
         * *********************
         * **********************
         */
    }
  
    public boolean m_show(View view) {
        try {
            AlertDialog.Builder builder = new AlertDialog.Builder(LauncherUI.m_instance_LauncherUI);
            builder.setTitle("桂电的互联扫地僧");
            String options[] = new String[]{"抢红包", "塞子控制", "猜拳控制", "防撤销", "闪图保存"};

            builder.setItems(options, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    switch (which) {
                        case 1:
                            dialog.dismiss();
                            ctl_dice();
                            break;
                    }

                }
            });

            builder.setNegativeButton("关闭", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });


            builder.show();
        } catch (Exception e) {
            Log.e("FMY=================", "m_show: ");
            e.printStackTrace();
        }
        return true;
    }

    public void ctl_dice() {
        try {
            AlertDialog.Builder builder = new AlertDialog.Builder(LauncherUI.m_instance_LauncherUI);
            builder.setTitle("选择点数");
            String options[] = new String[]{"1", "2", "3", "4", "5", "6"};
            builder.setItems(options, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    //给bi类的dice变量设置摇骰子点数.这个类是上一篇文章中分析过的 用户随机生成一个0-5的数字
                    // 控制骰子.我们这里在手动的添加了一个静态int变量名为dice.后文在继续详细讲解
                    bi.dice = which;
                    Toast.makeText(LauncherUI.m_instance_LauncherUI, "修改点数成功", Toast.LENGTH_SHORT).show();
                }
            });

            builder.show();
        } catch (Exception e) {
            Log.e("FMY=================", "m_show: ");
            e.printStackTrace();
        }

    }


}

 

还有一处思想要改就是如何完美控制?

上面一行代码如下

 
 bi.dice = which;

 

上一篇文章解释过bi类中有个eF函数,我们在eF函数返回塞子点数.

我们这里可以在这个类中创建一个变量叫dice,当调用eF的时候直接返回dice作为结果(当然你还要在eF中判断是否为当前函数调用是为了生成塞子点数,这个函数有可能为其他目的而被调用)

 

 

以上就是整体的思路.反编译会apk即可,实现非xposed实现点数控制

现在网上有一些卖什么vip版本微信 原理也是如此.当然也可以添加微信帐号密码监听功能,所以请小心.

不打算放出

你可能感兴趣的:(安卓学习之旅)