微信摇骰子和猜拳作弊器制作流程(一)
来源:互联网 发布: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;}}再次操作:同上,将你之前的模块卸载,将新模块和自定义软件安装到虚拟机,这个时候你只需要在软件里设定点数,然后切换到微信界面,你就完成了自定义点数和猜拳的任务了!
最后:然后我又感觉来回切换实在是麻烦,所以决定将自定义软件做成悬浮窗形式,这样就是完美实现了,本人由于还没有实现出来,所以就停在这里了,希望同样感兴趣的同学可以一起交流,如果你有更好的办法可以联系我,咱们一起学习进步,最后非常感谢赵四大神能为我们写出这么好的一篇文章,藉此文章表达我这个小虾米的谢意。
- 微信摇骰子和猜拳作弊器制作流程(一)
- 微信摇骰子和猜拳作弊器制作流程(二)
- 微信摇骰子和猜拳作弊器制作流程(终)
- Android"挂逼"修炼之行---微信摇骰子和猜拳作弊器原理解析
- Android"挂逼"修炼之行---微信摇骰子和猜拳作弊器原理解析
- Android"挂逼"修炼之行---微信摇骰子和猜拳作弊器原理解析
- Android"挂逼"修炼之行---微信摇骰子和猜拳作弊器原理解析 (转载)
- Android"挂逼"修炼之行---微信摇骰子和猜拳作弊器原理解析
- 游戏作弊器制作教程一:键盘鼠标模拟
- 微信 动画表情 骰子 猜拳
- 游戏作弊器制作教程五:OllyDBG和其他调试工具
- 猜拳游戏的制作
- 游戏作弊器制作教程二:键盘鼠标钩子
- 游戏作弊器制作教程三:内存与Cheat Engine
- 游戏作弊器制作教程四:用API读写内存
- 游戏作弊器制作教程六:hook的各种姿势
- 投票作弊程序制作思路
- 摇骰子的动画制作
- 网络编程中的11种状态
- Codeforces Round #386 (Div. 2)C. Tram
- 图像识别中的深度学习【香港中文大学王晓刚】
- 机器学习---朴素贝叶斯
- TortoiseSVN使用教程
- 微信摇骰子和猜拳作弊器制作流程(一)
- Android动画精讲一:从setTranslationX谈属性动画和view动画的区别
- HDOJ 5407 CRB and Candies(求1到n的LCM 位图储存结构)
- Pycharm 自动添加文件头注释
- Codeforces Round #385 (Div. 2)B. Hongcow Solves A Puzzle【思维+暴力】
- python核心库
- 1218
- 利用redis + lua解决抢红包高并发的问题
- springMVC重定向redirect传递参数