微信跳一跳刚出来,玩法简单粗暴,如果是真正的根据按压力度的话,那么只有iPhone的3dTouch硬件才可以使用,所以现在就是简单的按压屏幕,通过时间来弹跳距离。那么从程序猿的角度来看看刷分的思路。
一、通过伪造服务器请求的思路
当然第一步想看看网络数据有什么,通过使用Charles去抓包。
本来只是好奇心去看看,结果在网上看到了一篇文章,发现居然可以通过伪造数据来修改分数。
1.1、抓取自己的session_id
首先使用Charles通过过滤和代理,抓取mp.weixin.qq.com的数据,然后在游戏开始的时候,抓取到自己的session_id,这个就是自己在游戏中的唯一标识。
1.2、伪造分数请求
可以通过这个js:下载js源码,修改里面自己的session_id和想要的分数
var version = 5,
score = 2018,
// replace with your session_id here
session_id = 'xxxxx'
之后通过运行这段js,去伪造请求
安装运行js的脚本
npm install crypto-js request-promise request
运行js
node wx_t1t_hack.js
1.3、修改数据的效果
因为是伪造的服务器请求,所以最后成功修改了数据,别人在排行榜中也是可以看到的
这个好处就是一键式操作,坏处就是等腾讯反应过来,直接就失效了。
二、修改前端的思路
因为iOS不像安卓那样开放性特别大,app并不能访问其他app的内容,所以只能在操作上想方案。
想一想这个游戏的难点在哪,就是玩的不确定需要按压多长时间松手才刚好。
那么如果通过铃声提醒和震动提示不就行了,当按压到需要松手的时候,手机震动或者响一下就行了。这样的思路设计就很简单了。
首先设置一个输入框,输入需要跳的距离,这里一秒跳的距离我并没有测试,可以根据具体情况设置。
- (void)viewDidLoad {
[super viewDidLoad];
_timeDu = 0.0f; //按屏幕时间
_lengthDu = 2.0f; //一秒跳距离
_textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
[_textField setBackgroundColor:[UIColor greenColor]];
[_textField setKeyboardType:UIKeyboardTypeNumberPad];
_textField.delegate = self;
[self.view addSubview:_textField];
}
//通过距离,算出需要松手的时间
- (void)textFieldDidEndEditing:(UITextField *)textField
{
_timeDu = [textField.text floatValue]/_lengthDu;
}
输入完毕之后,当触屏屏幕的时候,开始运行一个计时器
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
{
[self.view endEditing:YES];
if (_timeDu>0) {
if (!_timer) {
_timer = [NSTimer scheduledTimerWithTimeInterval:_timeDu target:self selector:@selector(startJump) userInfo:nil repeats:NO];
}
}
}
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
{
}
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
{
if (_timer) {
[_timer invalidate];
_timer = nil;
}
}
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
{
NSLog(@"%s",__FUNCTION__);
if (_timer) {
[_timer invalidate];
_timer = nil;
}
}
- (void)touchesEstimatedPropertiesUpdated:(NSSet<UITouch *> *)touches NS_AVAILABLE_IOS(9_1)
{
NSLog(@"%s",__FUNCTION__);
}
当需要松手的时候,手机发出震动和提示音
-(void)startJump{
[self playEffect:@"click.caf"];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
_timeDu = [textField.text floatValue]/_lengthDu;
}
///播放音效
- (void)playEffect:(NSString*)effectName {
// 获取音频文件路径
NSURL *url = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"%@",effectName] withExtension:nil];
// 加载音效文件并创建 SoundID
SystemSoundID soundID = 0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
// 设置播放完成回调
// AudioServicesAddSystemSoundCompletion(soundID, NULL, NULL, nil, NULL);
// 播放音效
// 带有震动
AudioServicesPlayAlertSound(soundID);
// 无振动
AudioServicesPlaySystemSound(soundID);
// 销毁 SoundID
// AudioServicesDisposeSystemSoundID(_soundID);
}
这样每次设置的时候,量下距离,然后开始按压的时候,自动开始计时,发生震动和铃声的时候,迅速松开就行了。这样就可以搞两台手机,一天手机专门当做点击,像盖章一样玩耍了。
难点就是iPhone的屏幕是不识别塑料的,所以不妨把指头绑上去,当然绑一根火腿肠想必也是极好的。
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/737.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!