人家的第一次

第一次发这种原创技术贴,好紧张啊。。。
也不知道这样发帖是否会违规,还请手下留情,毕竟这是人家的第一次。。。
以下大神勿喷,谢谢
主要还是用来练练手,作为一名新手,总结一下还是有必要的,说不定以后,还可以回头来看看自己曾经留的。。。



一款名为   “XXXXXX”    的游戏,
这是一款卡通风格的横版趣味休闲闯关游戏,亨德里克是个倒霉蛋,他的一切都被大风吹走了。所剩的就是在他的头上的最后一个头发,
和一双有瞬间移动功能的鞋子。它带你寻找并收集亨德里克零星残存房子的碎块。行走可以给鞋子充电,你让亨德里克在变换的世界里,使用瞬间移动功能。。。

进入游戏后,游戏内并没有金币,钻石之类的,只有关卡,所以决定解锁所有关卡。

一:所需工具:
1.Android killer V1.3.1.0
2.Reflector.exe

二:反编译游戏之后看到在asset—bin—Data—Managed—Assembly-CSharp.dll,直接断定这个游戏是用 Unity3D开发的, 所以会有很多初始化的数据都在 Assembly-CSharp.dll这个文件里(当然也有在可能别的地方),

直接把 Assembly-CSharp.dll拖入 Reflector.exe这个工具里,
一开始的思路就是搜索lock,unlock之类的关键词,但是搜索出一堆东西出来,一脸懵逼,很明显搜索出来没有自己文件里的东西,图中的3可以看出来,如下图,
决定去网上搜一下有没有破解版,百度了一下还真有,便下载下来看了下,发现它所有的关卡都是有名字(其实之前的那个也是有名字),
便随便搜了下burning...,发现还真有(OnLoadBurningPlayground就是对应的第二关卡),如下图
此方法就在WorldSelect类下,索性便进入此方法看了下,大致猜测应该就是载入关卡之后,开启音乐载入地图之类的,
其他的好像也没什么东西,

思路又断了,便随便点点点,看看有没有突破口。。。
最终点进了Start()方法,看到了一些关键词,虽然没学过这语言,但是有点java基础,还是稍微能看懂的,
大致猜测里面的内容,应该是开启关卡的判断,第一关肯定是开放的,下面2.3.4关卡都是做了判断,

既然做了判断,那就开始操刀看看,Tools-->Reflexil v1.6   (前提是你的.NET Reflector是有安装Reflexil.Reflector.AIO.dll这个插件),
先修改一个试试,这里是brtrue,那么相反的就是brfalse,修改完之后保存,如下图
重新编译游戏,进入游戏发现第二关卡开启了,
那就确定刚才修改的地方就是做了关卡开启的判断,
于是回到刚才修改的Start()方法,修改剩下的两个关卡。。。(其实它后面有做了个全部关卡的判断,直接修改也可以,但是看不到关卡的界面,看得不爽)
全部改完保存之后又重新编译安装游戏,玩了下。。。。。。
发现过完一关之后跳到购买界面,悲剧了。。。

于是又回到刚才修改的地方,仔细看了下IsPurchased()(IsPurchase其实意思就是是否已经购买),进入此方法,这个方法做了一堆的判断,最终返回true或false,


那我们就把其它的东西删掉让他直接返回true,如下图

因为刚才Start()方法里面的判断只是用于Start()方法内的,如果其它地方还有调用IsPurchased(),那理所当然的会调到别的地方或出错,所以修改IsPurchased()是最有保证的,
修改完之后,再次重新编译安装游戏,又玩一小关,不会再出现跳转到购买界面,成功,掌声鼓励鼓励


===================================我是分割线==================================================================================


破解完之后,又想到那个购买界面,想想能不能内购破解,就是点击购买开启一个关卡,点击之后,整个界面也没有任何提示,这就有点悲剧了,
那只能去smali中搜索看看有没有paysuccess,onbilling,billingresult等等之类的关键字,这些关键词都是购买之后所做的判断,
搜了paysuccess无果,搜了onbilling都是些接口之类的东西,又搜了下billingresult也是随便看了下,最后看到BillingResult的类,
进去看了下,有isFailure,isSuccess方法,里面都做很简单的判断,那就直接把isSuccess里面的逻辑全部复制到isFailure方法里,


这样就算它失败了也会执行成功的语句,改好了,保存,编译,安装,点击购买,然后去看有没有解锁关卡,发现啥都没有,没反应,
那说明改的地方不对,没运行到isFailure方法,怎么办呢,应该是有在哪里做了判断,这里我就懒得再继续查找其他关键词了。


换个思路,去.dll看看有没有paysuccess,onbilling,billingresult这类的关键词,

进入关键参数,如下图

再次进入
最后保存此文件,重新编译游戏,再次运行,即可达到内购破解
写得好累好累。。。容我抽根82年的香烟。

总结:以上只是用来技术交流,禁止用于商业用途(这句好像老套了,哈哈),对于一些跟我一样的菜鸟,可能还有一些疑问 ,比如上面说到的    Reflexil.Reflector.AIO.dll插件怎么安装啊,怎么直接修改返回true啊。。。等等,这里就不多说了,自行度娘下   
          这里主要讲一个思路(好像上面靠的是运气。。。 ),其实到最后只要搜索一下 IsPurchased,让它直接返回true即可,只是一开始我们不知道它在哪里做的验证,才有这么一系列的复杂操作,
          如果你有更好的思路,请回帖,好让小弟膜拜下。。。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值