您的位置:首页 > 移动开发 > IOS开发

【原创】IOS游戏辅助--天天酷跑助手的实现

2016-11-12 00:51 357 查看
标 题: 【原创】IOS游戏辅助--天天酷跑助手的实现
作 者: coltor
时 间: 2014-04-16,20:20:44
链 接: http://bbs.pediy.com/showthread.php?t=186664

继上一篇<<IOS游戏辅助--QQ斗地主记牌器的实现>>,下面继续和各位探讨下"天天酷跑"这款游戏辅助的关键实现,分析思路和记牌器一致,所以下面就只贴主要的实现代码.

1. 查找要 Hook 的函数

   用IDAPro打开叉叉助手里关于天天酷跑的游戏插件--xxKPPlugin.dylib, 对 MSHookFunction 函数查找引用,会发现该dylib对符号名如下的函数进行Hook,

_ZN10BreezeGame10StarAIComp17ComputeBonusScoreEv

_ZN10BreezeGame8GameData8AddScoreERKNS_9ScoreDataENS_9ScoreTypeEi

_ZN10BreezeGame8GameData11GetXYFWCCJLEv

_ZN10BreezeGame8GameData20GetLuckyRushDistanceEv

_ZN10BreezeGame13MonsterAIComp12IsCollidableEv

_ZN10BreezeGame15BreakableAIComp12IsCollidableEv

_ZN10BreezeGame14AeroliteAIComp12IsCollidableEv

_ZN10BreezeGame12PlayerAIComp17UpdatePropsEffectEf

_ZN10BreezeGame13PlayerManager11IsCurMagnetEv

2.搜寻真实函数

用IDA Pro 打开天天酷跑的二进制--BreezeGame,搜寻上面这些符号所对应的真正函数,如下所示,然后再发挥下你对单词的想象力,你基本能猜测到每个函数的作用.

// 奖励倍数

BreezeGame::StarAIComp::ComputeBonusScore(void) --> _ZN10BreezeGame10StarAIComp17ComputeBonusScoreEv

BreezeGame::GameData::AddScore(BreezeGame::ScoreData const&, BreezeGame::ScoreType, int) --> _ZN10BreezeGame8GameData8AddScoreERKNS_9ScoreDataENS_9ScoreTypeEi

// 飞行距离

BreezeGame::GameData::GetXYFWCCJL(void) --> _ZN10BreezeGame8GameData11GetXYFWCCJLEv

BreezeGame::GameData::GetLuckyRushDistanceEv(int) --> _ZN10BreezeGame8GameData20GetLuckyRushDistanceEv

// 自动穿透

BreezeGame::MonsterAIComp::IsCollidable(void) -->  _ZN10BreezeGame13MonsterAIComp12IsCollidableEv

BreezeGame::BreakableAIComp::IsCollidable(void) --> _ZN10BreezeGame15BreakableAIComp12IsCollidableEv

BreezeGame::AeroliteAIComp::IsCollidable(void) --> _ZN10BreezeGame14AeroliteAIComp12IsCollidableEv

// 道具延时

BreezeGame::PlayerAIComp::UpdatePropsEffect(float) --> _ZN10BreezeGame12PlayerAIComp17UpdatePropsEffectEf

// 无限吸金

BreezeGame::PlayerManager::IsCurMagnet(void) --> _ZN10BreezeGame13PlayerManager11IsCurMagnetEv

// 无限跳

不在导出函数里面,通过PatchMemory来实现的.

3. 查找游戏辅助函数

用IDA Pro打开 xxKPPlugin.dylib,定位到 XXAssistControl 类. 可以看到如下的游戏辅助函数



这些辅助函数的作用如下:
(set)hackAddScore:分数加倍
(set)hackFlyDistance: 设置飞行距离
changeisColliable: 自动穿透
changeisMagnet: 自动吸金
setDelay: 道具延时
changeCJ:无限跳

4. 辅助函数的实现

这些游戏辅助函数的实现基本一致,下面以设置飞行距离的函数为例来说明.

(set)hackFlyDistance:函数接受一个参数,表示飞行距离,然后赋值给全局变量 _hack_fly_distance;

对该变量查找引用,我们会发现,下面这两个函数会调用:

func_hook__ZN10BreezeGame8GameData11GetXYFWCCJLEv

func_hook__ZN10BreezeGame8GameData20GetLuckyRushDistanceEv

这两个函数实现都很简单,

func_hook__ZN10BreezeGame8GameData20GetLuckyRushDistanceEv:

调用OrigFunc,获得返回值,然后将hack_fly_distance赋值给返回的value.

func_hook__ZN10BreezeGame8GameData11GetXYFWCCJLEv,也是做着同样的事情.

代码如下:



4.1 分析 (set)hackAddScore : 分数加倍

这个函数,它的实现和飞行距离一致,代码如下:




4.2 分析changeisColliable: 自动穿透

代码如下:




4.3 分析changeisMagnet: 自动吸金

代码如下:



4.4 分析changeCJ:无限跳

无限跳前面的不一样的地方,是找到BreezeGame特定的Offset,然后将里Patch掉,填充为Nop指令(ARM的Nop指令是 0x00 ). 这里Patch 的地址是 offset = 0x000D5A8C,使用IdaPro 打开BreeZeGame,然后定位到该offset,你会发现这里确实是一个判断跳跃次数的地方,然后Patch掉就好,具体实现代码如下:





补充一下关于 memory patch 的代码,修改内存属性为可写,然后填充你要patch的内容,都比较简单,可以用来参考:




5. 总结

其实分析叉叉助手的游戏辅助其实都很简单,而游戏辅助运用到的技术也就是这些.

不过通过游戏辅助可以吸引到大批的用户来使用你的产品,然后再把这批用户转换为流量,然后再... 产品思路看起来不错,所以现在叉叉助手的百度搜索指数都非常高,基本上是360手机助手的一半,贴个图帮大家了解下叉叉助手的活跃度.

最后还是希望有同仁一块交流!




Author: coltor

Email(QQ): coltor#qq.com

交流群: 12399218 (欢迎各位童鞋加入讨论)*转载请注明来自看雪论坛@PEdiy.com 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐