微信摇骰子和猜拳作弊器制作流程(一)

来源:互联网 发布:ubuntu设置超级用户 编辑:程序博客网 时间:2024/06/05 15:33

本文链接:

摇骰子和猜拳作弊器制作流程(一)

摇骰子和猜拳作弊器制作流程(二)

摇骰子和猜拳作弊器制作流程(终)

声明:

本文的开发原理和流程皆来自-尼古拉斯_赵四:http://blog.csdn.net/jiangwei0910410003/article/details/52892330的这篇文章,所有技术要点和精华皆为原作者的辛苦创作所得,本人只是在其基础进行二次开发。

闲言碎语:

闲来无事看到了大神的这篇文章,自己就按流程走了一遍突然发现简直6到不行,Xposed的软件也是很好用,赵四大神也完成了所需工作的99%,所以我就将我的流程写出来以供大家参考。而且在最后实现此篇文章之后我发现点数自定义非常难,只能一次一次改代码,非常的麻烦(达不到动态效果,骗人很难,都是六点你懂得...猜拳就不用说了),所以我私信了作者,等了很长时间原作者都没有给我回信,所以我就自己搞了搞,现在我把我的流程PO出来,希望大家少走弯路。

必要了解的东西和涉及到的知识点:

1.Xposed基础模块开发(这东西很简单,直接上百度下一个最基础的模块,然后了解原理,瞬间就可以打到拦截的效果)

2.破解APP寻找HOOK点(这个原作者已经讲的非常细致了,所以我说原作者已经完成了任务的99%)

        3.Android的基础开发(主要是File文件操作类的知识,其他的都是基础)

现在开始:

前期准备:安卓模拟器(本人用的夜神模拟器)、Xposed软件、微信6.3.9、android-IDE(eclipse)

        Xposed模块实现:看了原作的前言里面的教程,去百度下载一个最简单的模块,然后将原作第六步的代码写进去,这样最初版的一个模块就做好了

初版模块实现:之后的步骤完全取决于你第一步走的稳不稳,不要着急慢慢来实现出效果。第一步就是在你的安卓模拟器上安装好Xposed,然后安装好微信6.3.9,安装好初版模块,然后有如下画面

打开Xposed,点击激活应用模块,勾选中你刚才安装的初版模块,重启,然后打开微信你就会发现,程序已经实现出你想要的结果了。

再次开发(思路):下面就要实现自定义点数的问题了,由于本人也是第一次接触Xposed的模块开发,所以走了不少弯路,最后历尽千辛万苦搞定了自定义,也不知道做法是不是正确的,但是好在实现出效果了,刚开始本人的思路是IO类读写文件,自己写一个安卓软件写,然后在模块代码里去读,但是搞了好久也没研究明白为什么Xposed里面的IO报错问题,因为模块没法调试,看软件自带的日志也找不到原因,用try/catch测试了很多次,所以没有办法只好另辟蹊径,因为在IO之前我曾做过文件的exists()判断,所以你们懂的,我选择以判断文件的形式。


自定义软件的开发:为了不跑题特地找了个骰子做图标,哈哈,废话不多说直接上代码了,并没有太复杂的东西,大家应该都看得懂。

package com.example.chose;import java.io.File;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {String[] name = {"1Point","2Point","3Point","4Point","5Point","6Point","shiTou","jianDao","Bu"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);       // 获取TextView//final TextView  Ev1 = (TextView) findViewById(R.id.textView1);        // final TextView  Ev2 = (TextView) findViewById(R.id.textView2);                 //1点 点击事件        Button button1 = (Button)findViewById(R.id.button1);//获取按钮资源         button1.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {              create(0);            }            });      //2点 点击事件        Button button2 = (Button)findViewById(R.id.button2);//获取按钮资源         button2.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {                create(1);            }            });      //3点 点击事件        Button button3 = (Button)findViewById(R.id.button3);//获取按钮资源         button3.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {               create(2);            }            });      //4点 点击事件        Button button4 = (Button)findViewById(R.id.button4);//获取按钮资源         button4.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {                create(3);            }            });      //5点 点击事件        Button button5 = (Button)findViewById(R.id.button5);//获取按钮资源         button5.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {                create(4);            }            });      //6点 点击事件        Button button6 = (Button)findViewById(R.id.button6);//获取按钮资源         button6.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {                create(5);            }            });      //石头 点击事件        Button button7 = (Button)findViewById(R.id.button7);//获取按钮资源         button7.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {              create(6);            }            });      //剪刀 点击事件        Button button8 = (Button)findViewById(R.id.button8);//获取按钮资源         button8.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {              create(7);            }            });      //布 点击事件        Button button9 = (Button)findViewById(R.id.button9);//获取按钮资源         button9.setOnClickListener(new Button.OnClickListener(){//创建监听                public void onClick(View v) {              create(8);            }    });}// 创建自定义文件类public void create(int position) {if(position <= 5){deleteAll("ShaiZi");}else{deleteAll("CaiQuan");}String FileName = name[position];File configure = new File(getCacheDir(), FileName);if (!configure.exists()) {try {configure.createNewFile();} catch (IOException e) {Toast.makeText(MainActivity.this, "新建文件失败!", Toast.LENGTH_SHORT).show();}}}// 清空文件类public void deleteAll(String type) {if (type.equals("ShaiZi")) {for (int count = 0; count <= 5; count++) {File configure = new File(getCacheDir(), name[count]);if (configure.exists()) {configure.delete();}}} else {for (int count = 6; count <= 8; count++) {File configure = new File(getCacheDir(), name[count]);if (configure.exists()) {configure.delete();}}}}}
模块的二次开发:

package cn.wjdiankong.xposedhook;import java.io.File;import java.io.IOException;import de.robv.android.xposed.IXposedHookLoadPackage;import de.robv.android.xposed.XC_MethodHook;import de.robv.android.xposed.XposedHelpers;import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Main implements IXposedHookLoadPackage {String[] name = {"1Point","2Point","3Point","4Point","5Point","6Point","shiTou","jianDao","Bu"};@Overridepublic void handleLoadPackage(final LoadPackageParam lpp) throws Throwable {XposedHelpers.findAndHookMethod("com.tencent.mm.sdk.platformtools.bb", lpp.classLoader, "pu", Integer.TYPE, new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws InterruptedException, IOException {int intValue = ((Integer) param.args[0]).intValue();switch (intValue) {case 2: // 猜拳 switch (getCaiQuan()) {case 7: // 0---剪刀param.setResult(0);return;case 6: // 1---石头param.setResult(1);return;case 8: // 2---布param.setResult(2);return;default: // 没有配置param.setResult(2);return;}case 5: // 摇骰子switch(getShaiZi()){case 0:  // 1点param.setResult(0);return;case 1:  // 2点param.setResult(1);return;case 2:  // 3点param.setResult(2);return;case 3:  // 4点param.setResult(3);return;case 4:  // 5点param.setResult(4);return;case 5:  // 6点param.setResult(5);return;default: // 没有配置param.setResult(5);return;}default:return;}}});}public int getShaiZi() {for (int count = 0; count < 6; count++) {String fileName = "/data/data/com.example.chose/cache/"+ name[count];File configure = new File(fileName);if (configure.exists()) {return count;}}return 99;}public int getCaiQuan() {for (int count = 6; count < 9; count++) {String fileName = "/data/data/com.example.chose/cache/"+ name[count];File configure = new File(fileName);if (configure.exists()) {return count;}}return 99;}}
再次操作:同上,将你之前的模块卸载,将新模块和自定义软件安装到虚拟机,这个时候你只需要在软件里设定点数,然后切换到微信界面,你就完成了自定义点数和猜拳的任务了!
最后:然后我又感觉来回切换实在是麻烦,所以决定将自定义软件做成悬浮窗形式,这样就是完美实现了,本人由于还没有实现出来,所以就停在这里了,希望同样感兴趣的同学可以一起交流,如果你有更好的办法可以联系我,咱们一起学习进步,最后非常感谢赵四大神能为我们写出这么好的一篇文章,藉此文章表达我这个小虾米的谢意。


0 0
原创粉丝点击