Android中dll文件的修改

最近下载了一款非常不错的益智类游戏,一打开,顶部还有广告,最讨厌游戏中还带广告的,点又点不掉,又怕误点,真的看了都烦。。。作为程序员,就有种想要把它干掉的想法,作为玩游戏没耐心的人,玩到一半过不了关总想看到最后一关是什么样。不知道你们有没有这种感觉。。。

 

这个游戏很适合给小学生做数学题(好像小学生以上的都很适合,哈哈),游戏中所要做的就是将面标注着数字的水球切开或是粘合起来,以符合在框框里标注的数字。如果用手指将水球像两个方向拉伸,水球就变成了大小相同的两个小水球,而上面写着的数字就变成了原来的一半。而让两个小水球合并到一起,上面的数字就会加在一起。在画面中有的区域会出现小框里面也会标注相应的数字,让水球和这些框框里的数字相吻合,紧紧地嵌入框框就可以过关。

 Android中dll文件的修改

 

 

好了,下面直接进入正题吧,当前要解决的问题就是:1.去除广告 2.解锁关卡

需要的工具:

一:Android Killer

二:Reflector

 

拿到apk包后使用Android Killer反编译得到如下:

 Android中dll文件的修改

 

很明显这个游戏是使用Unity3D引擎开发的,那么,一般它的游戏逻辑都会写在assets\bin\Data\Managed\Assembly-CSharp.dll这个文件里(也有一些会写在其他文件里)。

 

1.去除广告:

打开它的目录结构如下:

 Android中dll文件的修改

之前看过一篇去除广告的文章,一般它加载广告在smali中都会有invoke-virtual.........->loadAd........;(有些会在so文件里加载广告,这种方式更高级,这里就不说在so文件里是如何加载广告的,其实我也不懂在so文件里面是怎么加载广告的,哈哈哈。。。)那么我们直接就搜“->loadAd”看看,结果如下:

 Android中dll文件的修改

 

看到有3处调用了“loadAd”的地方,那我们就直接把它注释掉吧,不让它调用,

只需要在被调用的地方加个#”号就行,这样就注释掉了。简单吧,哪里不要就“#”哪里,妈妈再也不用担心话费乱扣了。。。

 Android中dll文件的修改

注释掉之后,重新打包,运行如下:

 Android中dll文件的修改

这就对了嘛,真干净,看了就很爽。

去除广告成功,妈妈还会担心每个月几百块的话费哪里去吗,哈哈哈。。。

 

2.解锁关卡:

 

从上面我们知道使用Unity3D引擎开发的,那么我们直接把它拖入Reflector工具里查看,看到如下:

 Android中dll文件的修改

一般解锁关卡,无非就是unlock什么的,这里我们就直接在此工具下按键盘上的“F3”搜搜看:

 Android中dll文件的修改

看到了吧,里面有很多有关于关卡的解锁逻辑,

尝试过把UnlockAchievements()方法内的this.Level >=XX都改为

this.Level >=1(后面给出怎么修改的方式),但是这样修改,运行之后是没有看到有解锁关卡或别的什么。那肯定是我们没改对地方,导致解锁失败。

 Android中dll文件的修改

 

 

在里面我们还看到有LoadLevel(),LoadNextLevel(),这两个方法,

在游戏中我们可以看到界面中 上下关卡只有图中两个按钮。

 Android中dll文件的修改

再看看LoadLevel()这个方法里面好像也没有看到  什么“+1”之类的逻辑,

 Android中dll文件的修改

 

再看看LoadNextLevel()这个方法,

 Android中dll文件的修改

到这里我们就基本锁定上下关卡就是在这里做的操作,但是一旦调用这个方法,进来立马就保存当前关卡,到下面就判断是否要载入上下关卡,那我们就让它一调用这个方法就先给Level1,也就是this.Level++;  相反的在图中的 this.Level++  this.Level--  ,就要变成

this.Level+=0;  this.Level-=2;  因为上面已经加1了,所以这里else if 里面的判断就不能再加1了,而else里面的判断就要多减1,具体的看图:

 

这里补充一点:

要修改dll文件需要在你的Reflector/Addins目录下有这个两个文件

 Android中dll文件的修改

然后再配置这两个文件,如下图

  Android中dll文件的修改 Android中dll文件的修改

 

 

配置完之后在Tools下就会多出Reflexil v1.6这个选项

 Android中dll文件的修改

 

终于要开始改了。。。。。。。

继续上面说的,点击Reflexil v1.6这个选项,看到如下:

 Android中dll文件的修改

 

那我们怎么添加呢,这里其实我也不懂,我也是参照它里面的语句

 Android中dll文件的修改

找到对应的语句就好办了,我们再这样操作,如下图:

 Android中dll文件的修改

 

 

添加:ldarg.0

 Android中dll文件的修改

 

添加:dup

 Android中dll文件的修改

 

添加ldfld    System.Int32 StageController::Level

这里分成两步,第一步是OpCode,Operand type

 Android中dll文件的修改

第二步:

Operand中:

 Android中dll文件的修改

Android中dll文件的修改

Android中dll文件的修改

 

添加ldc.i4.1

 Android中dll文件的修改

 

添加add

 Android中dll文件的修改

 

添加stfld    System.Int32 StageController::Level   

这个跟上面添加ldfld    System.Int32 StageController::Level 是一样的,这里就不贴图了,

 

最后添加成功后是这样,如下图:

 Android中dll文件的修改

 

注意:如果上面添加标签的时候不小心点到 ”Append” ,会跑到最后去,记得删掉。否则也会报错。

 

到这里还没完,记得上面说的this.Level++  this.Level--  ,要改为

this.Level+=0;  this.Level-=2  ,这里就只贴加法的修改步骤,减法的自行修改

 Android中dll文件的修改

 Android中dll文件的修改

 

到这里就全部修改完成了,那接下来就是保存了

 Android中dll文件的修改

 Android中dll文件的修改

 

保存完成之后可以按键盘F5”刷新一下,看有没有修改成功

 Android中dll文件的修改

 

最后就是重新打包这个apk文件,运行。。。

进入游戏后发现还是下一关卡按钮还是灰色的,说明没改对地方,这就尴尬了。。。

辛苦大半天还是一样。。。难道this.Level++不是在这改的吗,(这不是废话吗,如果改对了,还会有下文吗,哈哈哈。。。)

没办法了,回去看看哪里还有使用Level变量的。

 Android中dll文件的修改

 

直接鼠标左击”this.Level++”中的Level会跳到Level的出处,再右键点击Level,选择Analyze

 Android中dll文件的修改

Android中dll文件的修改

 

一个是我们刚刚的LoadNextLevel(),还有另一个,那很有可能是在另一个地方被调用了,

很明显,这个两个方法都在同一个类下,右键图中对应的方法选择Go To Member

 Android中dll文件的修改

 

进入这个方法后看到如下:

 Android中dll文件的修改

改的方法跟上面是一样的,因为是在同一个类下,所以都一样,但是这里需要注意一下,因为它本来已经有this.Level=stageData.Level,直接修改就行,或者把这句对应的语句删掉再重新添加也行,修改后样子如下:

 Android中dll文件的修改

然后修改后,记得我们刚刚在LoadNextLevel()方法里添加的this.Level++记得要删除,

否则进入下一关卡的时候level就相当于加了两次。

好了,经过刚才添加,删除之后我们再保存这个文件(修改完之后最好F5刷新一下,看有没有修改成功),重新打包apk

成功,嘿嘿

最后放一张gif动图,不知道发布出去,有没有动画效果。

 Android中dll文件的修改

 

总结:

1.移除XXX广告的方法,正在调用的时候就是一句话,所以只要注释掉关键点就行。

2.对dll文件的修改,利用一些关键词去修改,这只是我的一些思路,如果你有搞怪的方法,还请留言一起探讨下,我一开始也是蒙逼的,删除还好,但是增加就有点困难,特别是要用它里面的方法,一开始都不知道那是啥,哈哈,不过现在总算有点了解了。

 

最后还是那句老套话,以上只是用来技术交流,如果您使用该已经**的游戏用于任何非法用途,均与本作者无关。


                                                                                                                                                            2017.08.17