详细的逆向游戏教程之教你踏上正道的光——不改包,干掉《桌球da师》
大家平时玩休闲游戏时,是不是对广告又爱又恨呢?爱的是游戏里面的奖励广告可以给我很多有用的提示、道具。恨的是要么奖励广告无法正常播放,要么就是那种满屏幕的“牛皮癣”广告,十分影响游玩体验;最可气那种自己直接弹的广告,简直是丧心病狂啊!!!最近瞎转悠,找到了一款桌球大师(Pool Master)的游戏。玩起来还是挺爽的,里面的桌球简直就是花式杂耍。里面的各种球技也是十分有用的,让我想起了以前玩企鹅的台球大师(忘了叫啥名了,充钱买球杆皮肤的那个)的痛苦日子了,由于只会瞄准、拉杆,被其他玩家吊起来打。直到我弃坑了才知道,还有什么击球点、回杆等高级操作。不过那时也是不知道怎么打这些骚操作啊。/(ㄒoㄒ)/~~
这个游戏就比好了,直接就教我怎么打这些操作。良心啊!!!!
言归正传,游戏不错,就是玩到后面。游戏难度上来了,心不够用了。烦躁,想继续玩还得等心心恢复。这不是坑爹嘛!!!给你5分钟,我立即马上就要继续玩游戏!!!!
所以,自己就捣鼓捣鼓了下。不用改游戏的包,直接用代码就搞定了!现在就把自己的思路流程记录下。
一、工具
jadx、
能跑xspoed的手机、
EasyXposed(自己封装的工具,就是方便代码编写。普通的xposed项目也可以):htt欢迎ps://githu各位b.com/zhongqingsong/Ea关注喔syXposed
二、步骤
因为不想看广告啊,而且游戏自己的广告一直都是无法正常播放,就很尴尬。让我不想白嫖都不行。教练,我想看游戏的奖励广告!!!
1、找日志
我先是试着从游戏的log日志中查找一些提示。不过很遗憾,找了半天,一条和广告相关的日志都没有。我想到的重要的方式就这么没了!
这一点提示都没有,我还怎么找广告啊!!!
本来只是想着搞广告的。游戏这么做,让我很心寒啊!黎叔很生气,后果很严重!!这下我要认真了!!!
2、直接上jadx分析代码:
游戏没有壳,直接就能看到源码。万变不离其宗,先从Java的入口开始。
找到清单文件,然后游戏的启动类就是 com.poolgames.billiards.eightball.UnityPlayerActivity
然后进入这个类,看了下代码。发现了这个方法很可疑
这个 reward video,应该就是激励广告的意思。但是不保险啊,我们需要确认下。这条方法里,走了一个日志。搜了一下这个logTag的日志,竟然有欸。说明我们的思路是正确的,游戏走了这个类了,那大概率广告也是走这个里面的。
3、上xposed代码:让广告正常
用我自己写的EasyXposed项目,hook住了这个showVideo方法,点击游戏里的按钮。不过,貌似没什么用,游戏还是灰色的,不能点击,没有触发hook的方法。
我大E了啊,没有闪。
既然游戏不能点击按钮,结合平时玩的游戏,有时会过一会儿才能点击广告。那么游戏的广告应该都有一个加载啊之类的过程吧?又继续翻了下代码,找到了这个
这里在判定广告是否ready,很激动啊。
很快啊,我一个三连就给hook上了。
哈哈哈,很nice。所有广告都能变亮啦,触发show方法啦!!!
4、上xposed代码:让广告直接给奖励
广告准备我们弄完了,接下来就是如何让广告直接发送奖励了。因为不改包,所以,我的思路是,我让游戏自己给自己发奖励。我只要做到“让”就行啦!那我们就需要知道游戏自己是如何给自己发送广告奖励的。
接着广告的思路,继续往下找。欸欸欸,这也太舒服了吧。类的最后面翻到了一堆的什么rewardVideo的方法,这些一看就像是啊。
而且,这个rewardVideoCompleted,一看就是我梦寐以求的广告完成的东西啊!这个UnitySendMessage,我搜了下,就是Java给unity的一种交互机制。游戏的广告流程都进入unity了,那100%就是要给游戏奖励了啊!!!
激动的心,颤抖的手!两只黄鹂鸣翠柳!!Hook,hook,赶紧hook!!!
成功了,这个广告给300金币,上面的金币图里显示了。突然,感觉游戏也就这样的,just so so。
那一刻,我的心里有一场海啸,但我静静地站着,没有让任何人知道。
不装逼了啊,嘿嘿。既然广告都搞定了,而且开始还不给我广告日志,现在游戏的内购我也看不顺眼了。怎么办?搞它!
5、找到内购
这个地方,也是准备先看日志。清空所有日志,然后点击游戏的道具按钮,提出了几条很熟悉的日志
嘿嘿嘿,有戏。第一条的这个一看就是一个json字符串。这个明显就是一个动态的,所以,我们直接搜索字符串:Pay msg
bingo,找到了。那就不废话了,直接进去方法。
好吧,还是在同一个类里,浪费感情。不过至少我们不是瞎找的了,是有理有据的了啊。进步了啊。
6、分析回调
有上面的思路了,就不废话了。内购回调还是在同一个类里,一个内购失败,一个内购成功。符合预期。
这里就有说道了,这个地方出现了两个变量,一个obj,一个str。和广告那个游戏自己直接把广告奖励写出来的就有区别了。接下来,我们就要开始找这些值了。
obj是一个成员变量,我们直接jadx找下这个 mUnityReceiveObj的用例。三个用例,也有现成的,完事了。
另一个str,因为上面的那个内购方法,不是刚好也有一个str嘛。所以,理所当然的,我们直接就用这个str呗。不过现实给了狠狠一耳光啊,没用,报错了。道具也没有发送。
看来内购就没那么简单了,这个str就是关键点了。我们需要认真分析一波这个内购奖励怎么给的了。
7、上xposed代码:搞定内购
我们需要找到str,那么我们的首先的想法就是,去这个onPaySuccess的上一层,看它传了什么值进来。
我们在jadx中,直接查找用例,啥都没发现。那说明不是直接调用的,我们直接搜onPaySuccess的代码调用
找到了,一共三个地方,排除第2、第3个后,就剩第一个了。我们点进去看看。然后一层的一层往上找调用。最后我们来到了最终审判:
这个地方,应该就是游戏拉起了一个支付的activity,然后等activity的result。然后判定后,从Intent里获取关键的信息,最后,发送给unity一个message,让unity给内购奖励。
这里就陷入僵局了,再往上怎么找,都找不到进一步的信息了。这个str看起来就很不好拿了啊。
不过,只要功夫深,铁棒磨成针!!!反正,最后的最后,这个str算是找出来了。具体的流程就不提了,这玩意,简直了。游戏里,哪怕你找翻天了,也只能找到这个startIntentSenderForResult,启动游戏内购的地方。具体的str也是无影踪的。
一句话,这个str的突破点,不是这个游戏的问题;单纯的从游戏里找,是找不到的。我咬着牙,还是想法设法找到这个了str,不过,这个就不是一时半会能说完的了(想了解细节的,可以加秋秋)。
8、最后
其实代码也就写了十几行,也就完成了一些微小的工作,但是效果是巨大的,嘎嘎嘎。现在游戏的广告、内购都被处理了。现在我可以随便爽啦,哈哈哈哈哈。
而且没用到改包,省去了很多的麻烦事喔!代码我也放出来了,有兴趣的同学,可以自己试一试。
总结:
搞这个游戏的广告内购,也是收获了很多。平时都是想着怎么改包,没想到用xposed。现在回过头来看,用xposed远比改包来得方便快捷啊!!!而且内购都可以干掉。
而且,这里还只是自己干掉了内购,自己爽。如果我们换个角度考虑,这里的xposed换成其他的hook框架,上面流程还行不行呢?肯定行;重要的是思路,不是框架。
既然想到这里了,那我就产生了一个大胆的想法!!!要是我们自己想办法搞一个hook框架,把游戏放到上面来,然后对游戏进行hook处理。
当游戏播放奖励广告时,让它换成我们的广告来播放;再由我们来控制奖励的发送与否。然后,游戏的那些烦人的强制弹出来的广告和牛皮癣广告,我们也可以用hook去掉;这样,玩起来岂不是就很舒服啦!!
最后,内购也是,把游戏的内购替换成我们的内购,然后我们来控制内购的道具发送与否。
嘿嘿嘿,这个idea太妙了啊!!!想想都流口水,我要投他一个亿!!!
欢迎交流,代码和包:
https://wws.lanzouj.com/i2whijhqe4f
密码:11
cgzrjl 发表于 2020-12-21 13:27
EasyXposed 放个release apk 呗
这是一个Xposed框架,不行你去论坛找找这个的教程,我只不过封装了一层 优秀,蒂花之秀,思路决定出路。站在xposed hook的角度考虑,比硬改smali高出一个纬度。 EasyXposed 放个release apk 呗 这一波啊?这一波lz是降维打击
感谢分享 欢迎交流 woai10000y 发表于 2020-12-21 13:45
这一波啊?这一波lz是降维打击
哪里哪里~~~ 已收藏备用,以后root后用得到 优秀。。学习了