掷骰子游戏 华为机试

掷骰子游戏

  • 问题描述:

在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示:

1)  9:无障碍

2)  1:停掷一轮,即下轮所掷数字无效;

3)  2:后退两步,如果已经到起点不再后退;

4)  3:奖励前进一步

如果在游戏过程中,已经走到地图终点,则游戏结束。根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步。

  • 要求实现函数:

void dice(int map_len,int* map, int* dice_val, int* output)

【输入】  int map_len,地图数组的长度

          int* map,地图数组,值表示障碍

int* dice_val,5个骰子数的数组

【输出】  int *output,玩家共前进了多少步

【返回】  无

注:玩家是从起始位置开始,即地图数组的第一位,骰子数只能是1~6

  • 示例

1) 输入:map_len = 15, map ={9,1,9,9,9,2,9,9,9,9,9,9,9,9,9},dice_val = {1,2,1,3,1},

返回:4

2) 输入:map_len = 16, map ={9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9},dice_val = {2,1,4,1,6},

返回:15

#include "stdafx.h"
#include <iostream>
using namespace std;

void dice(int map_len, int* map, int* dice_val, int* output)
{
	int step = 0;
	int num_val = 0;
	const int diceLength =  5;

    for ( int i = 0; i < map_len && num_val < diceLength; )
    {
		if ( map[i] == 9 )   
		{
			i += dice_val[num_val];
			step += dice_val[num_val];
			++num_val;
		}
		else if ( map[i] == 1)
		{
		   i += dice_val[  ++num_val ];
		   step += dice_val[num_val];
		   ++num_val;
		   
		}
		else if ( map[i] == 2 )
		{
			if ( i > 1 )  
			{
                 i = i - 2;
				 step -= 2;
			}
			else if( i == 1 )
			{
				i = 0;
				--step;
			}
			else if( i == 0 )
			{
				i = 0;
			}
	
		}
		else if( map[i] == 3 )
		{
			++i; 
			++step;
		}
    }
	*output = step;
}

int _tmain(int argc, _TCHAR *argv[])
{
	int map[] = {9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9};
	int dice_val[] = {2,1,4,1,6};
	int result = 0;

	dice(16, map,dice_val, &result);

	cout<<result<<endl;
}



<think>我们正在讨论的是如何在非Root环境下实现微信骰子的控制功能。根据引用内容,我们可以知道在Root环境下通常通过Hook相关方法(如`getIntRandom`)来实现控制骰子点数。但在非Root环境下,我们需要寻找替代方案。参考引用[2]提到的iOS逆向分析,在iOS平台上可以使用frida工具通过ObjC的methodswizzling进行Hook,而frida同样支持非Root环境(通过连接电脑端的frida-server)。然而,对于Android非Root环境,情况则不同。在Android非Root环境下,常见的Hook方式有:1.使用VirtualApp、太极、VirtualXposed等免Root虚拟环境,这些环境可以在应用层模拟系统,从而允许加载Xposed模块进行Hook。2.使用frida-gadget,将frida的so库注入到目标应用中,然后通过frida脚本进行Hook。但这种方式需要重新打包目标应用(即修改APK并重新签名),而微信有签名校验,因此需要先处理签名校验。根据引用[1]和[3],我们知道控制骰子的关键在于Hook`com.tencent.mm.sdk.platformtools.Util.getIntRandom`方法(用于生成随数)以及相关表情管理类(如`com.tencent.mm.plugin.emoji.b.c`)。因此,在非Root环境下,我们需要:1.使用免Root的Hook框架(如VirtualXposed)来加载Xposed模块。2.或者使用frida在非Root环境下注入,但需要解决重新打包和签名校验的问题。具体步骤(以VirtualXposed为例):1.在手上安装VirtualXposed(无需Root)。2.在VirtualXposed中安装微信和相应的Xposed模块(该模块需要包含Hook上述方法的代码)。3.激活模块并重启VirtualXposed环境中的微信。Xposed模块代码示例(控制骰子点数为6):```javaXposedHelpers.findAndHookMethod("com.tencent.mm.sdk.platformtools.Util",lpparam.classLoader,"getIntRandom",int.class,int.class,newXC_MethodHook(){@OverrideprotectedvoidbeforeHookedMethod(MethodHookParamparam)throwsThrowable{//骰子的范围是1-6,这里我们返回5(因为0-5对应1-6,所以5对应6点)if(param.args[0]==0&&param.args[1]==5){param.setResult(5);//设置为5,即骰子6点}}});```注意:以上代码仅为示例,实际开发中需要更精确的判断(例如判断当前是否在掷骰子场景)。对于iOS非越狱环境,可以使用frida的`ObjC`API进行Hook,但同样需要将frida注入到微信中(可以通过CydiaImpactor或AltStore等工具安装已注入frida-gadget的微信IPA包)。然而,重新打包微信IPA同样会遇到签名问题,需要使用企业证书或自签名(需要设备信任),且存在一定风险。综上所述,非Root/非越狱环境下实现微信骰子控制是可能的,但需要借助特定的免Root框架或重新打包应用。用户需要根据自身设备平台(Android或iOS)选择合适的方法。§§相关问题§§1.如何在VirtualXposed中安装微信和Xposed模块?2.如何编写Xposed模块来Hook微信的方法?3.在非Root环境下使用frida有哪些注意事项?4.如何解决微信的签名校验问题?</think>### 微信骰子免Root实现方法 在非Root环境下实现微信骰子控制功能,主要可通过以下技术方案实现: #### 1. **虚拟环境技术** 使用免Root的虚拟容器应用,这是目前最可行的方案: ```markdown - **推荐工具**:VirtualXposed、太极阴/阳、LSPatch - **实现原理**: 这些工具创建隔离的虚拟环境,允许加载Xposed模块而不影响系统 在虚拟环境中安装微信和骰子控制模块即可实现功能 - **操作流程**: 1. 安装VirtualXposed(无需Root权限) 2. 在VirtualXposed内安装微信 3. 添加骰子控制模块(如"上帝模式"等Xposed模块) 4. 在虚拟环境内运行微信即可控制骰子点数 ``` #### 2. **Frida注入技术** 通过动态代码注入实现功能控制(需电脑辅助): ```javascript // 示例:Hook微信随数生成方法 Java.perform(function() { let Util = Java.use("com.tencent.mm.sdk.platformtools.Util"); Util.getIntRandom.implementation = function(min, max) { // 当检测到骰子操作时固定返回6 if (max === 5 && min === 0) { // 骰子范围0-5对应点数1-6 return 5; // 强制返回最大值对应6点 } return this.getIntRandom(min, max); // 其他情况正常返回 }; }); ``` **操作要求**: - 需要开启USB调(部分手无需Root) - 通过电脑执行`frida -U -l script.js -f com.tencent.mm` #### 3. **修改版客户端** 安装第三方修改的微信APK(存在风险): ```markdown - 特点:内置骰子/猜拳控制功能 - 风险提示: • 可能触发微信安全制导致封号 • 存在隐私泄露风险 • 建议使用小号测 ``` #### 4. **自动化脚本** 通过无障碍服务实现(仅限Android): ```markdown - 使用Auto.js等工具监控骰子按钮 - 检测到骰子点击时自动选择预设点数 - 限制:无法修改随数逻辑,仅能实现自动点击 ``` ### 注意事项 1. **账号安全** 任何修改行为都可能触发微信的风控制,建议使用备用账号测[^4]。 2. **版本兼容** 微信更新频繁(当前v8.0.43),Hook点可能随版本变化失效,需持续更新适配[^1][^3]。 3. **法律风险** 在部分场景中使用可能违反微信用户协议,娱乐用途需谨慎。 4. **iOS限制** iOS非越狱设备实现难度极高,需通过AltStore等侧载方式安装修改版IPA,且每7天需重签[^2]。 > **最佳实践**:推荐使用VirtualXposed + 骰子控制模块的组合,在小米、华为等允许虚拟框架的设备上成功率较高,且不影响主系统安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值