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

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

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

需要的工具:

一:Android Killer

二:Reflector

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

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

1.去除广告:

打开它的目录结构如下:

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

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

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

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

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

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

2.解锁关卡:

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

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

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

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

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

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

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

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

再看看LoadNextLevel()这个方法,

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

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

这里补充一点:

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

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

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

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

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

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

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

添加:ldarg.0

添加:dup

添加ldfld System.Int32 StageController::Level ,

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

第二步:

在Operand中:

添加ldc.i4.1

添加add

添加stfld System.Int32 StageController::Level

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

成功,嘿嘿

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

总结:

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

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

android修改dll文件,Android中dll文件的修改相关推荐

  1. 文件管理搜不到Android 里的文件,Android:在原始文件夹中添加文件后窗口找不到内容容器视图...

    正在获取窗口找不到内容容器视图.这个错误询问应用程序何时将检查权限Android:在原始文件夹中添加文件后窗口找不到内容容器视图 我注意到,对于穿着应用程序,我正在将穿着apk复制到原始文件夹中.它有 ...

  2. matlab读取一个文件的图片大小,Matlab读取文件夹中子文件夹中的图片并修改尺寸...

    今天被师兄问到如何利用matlab批处理图片,觉得很简单嘛 就让他去百度 结果只百度到处理文件夹中图片的程序 好吧 这里放上如何处理文件夹中子文件夹的图片 现状:在一个名为casia的文件夹中,里面有 ...

  3. 计算机内用户文件夹中的文件,在位于计算机上所有用户的AppData文件夹中的文件中修改一行...

    我想修改位于计算机上所有用户的AppData文件夹中的文件中的一行.在位于计算机上所有用户的AppData文件夹中的文件中修改一行 线在prefs.js文件来改变开始: user_pref(" ...

  4. Python 获取文件夹中的文件列表

    获取文件夹中的文件列表 问题 你想获取文件系统中某个目录下的所有文件列表. 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.lis ...

  5. mvfiles:一次性提取多个文件夹中的文件

      作者:吴玉轩 (南开大学) Stata 连享会: 知乎 | 简书 | 码云 | CSDN   Stata连享会 精品专题 || 精彩推文 2019暑期"实证研究方法与经典论文" ...

  6. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  7. 记录一下提取文件夹中所有文件名字

    配置Opencv很有用 快速提取文件夹中所有文件的名称! - 简书 (jianshu.com)

  8. Flume监听文件夹中的文件变化,并把文件下沉到hdfs

    1.采集目录到HDFS 采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 根据需求,首先定义以下3大要素 采集源,即source--监控文件目录 ...

  9. C++读取文件夹中所有文件的路径,包含子文件夹

    C++读取文件夹中所有文件的路径,包含子文件夹 C++实现指定文件夹的路径,获取该路径下所有文件的路径,含子文件夹的文件,为了实现跨平台编译,最后会给出Window和Linux的完成程序: [1]下面 ...

  10. Java文件操作:文件夹中搜索文件

    在文件夹中搜索文件,找到的话将文件的绝对路径列表返回 /*** 递归查找文件* @param baseDirName 查找的文件夹路径* @param targetFileName 需要查找的文件名* ...

最新文章

  1. R语言ggplot2可视化小提琴图(violin plot)并使用ggsignif添加分组显著性(significance)标签
  2. 文本纠错与BERT的最新结合,Soft-Masked BERT
  3. 修改特征码的相关知识
  4. 离开当前屏幕的判断方法_EXCEL 一个工作表如何快速拆分多个工作表的方法
  5. html select 可输入 可编辑
  6. mysql 触发器 本表_MySQL触发器处理本表数据
  7. 华为智能家居app未能连接上远程云服务_【InForSec通讯】智能家居云平台实体间交互状态安全分析 | Usenix2019...
  8. 未能加载文件或程序集“System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral,
  9. 图解Linux内核:内核启动(1)从Bootloader到内核代码
  10. mysql 5.6.19 linux_MySQL 5.6.19升级到 5.7.9 步骤记录
  11. spring自动扫描的注解@Component @Controller @Service @Repository
  12. edge浏览器打开html文件路径被拆分,Win10默认浏览器被强制修改为Edge的两种解决方法...
  13. 拥挤城市怎么在电脑上玩 拥挤城市电脑版玩法教程
  14. 初见TIC66XX系列DSP——C6678
  15. 统计学习方法 学习笔记(1)统计学习方法及监督学习理论
  16. 服务器存储hba卡直连,hba卡直连存储_fc hba卡之间如何连接_hba卡怎么连存储(5)
  17. LSTM 无法预测股票价格
  18. 毕达哥拉斯素数的王伟猜想
  19. 机器学习 第三节 第八课
  20. 生物发光及化学发光的原理及其应用

热门文章

  1. 【愚公系列】2022年01月 攻防世界-简单题-PWN-003(string)
  2. N级台阶走法(算法问题)
  3. Vue element ui用户展示页面
  4. Dubbo学习-注册中心
  5. FFmpeg H264编码
  6. CAN 口转以太网的接口、指示灯和终端电阻
  7. [iOS Xcode8报错]dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserN
  8. qt-help学习之路(1)QT与C++ 笔记
  9. 刚发现,我的文章都禁止评论啊
  10. Python入门-文件操作