Copyright@M4x, 小学生 from 10.0.0.55

原文地址:

这篇博客是应学姐之邀给学弟学妹写的扫盲教程,较为基础

前言

破解旅行青蛙的初衷很简单,女朋友想养青蛙,三叶草长得太慢,作为一名二进制黑阔又不愿屈服于网上小广告成堆又不知道有没有后门的破解版,于是就参考知乎的高赞回答自己给旅行青蛙添加了无限三叶草和无限抽奖券的功能。

受桐姐之邀,给学弟学妹简单介绍一下反编译技术,以及反编译技术是怎么运用到破解旅行青蛙这款游戏上的,力求能够用通俗易懂的语言给对此感兴趣的同学讲解清楚。

何为反编译

我们知道,高级语言源程序经过编译生成可执行文件(事实上有预处理,编译,汇编,链接四步,这里笼统的概括为编译,这个过程在《程序员的自我修养》这本书中有详细的介绍),那么加上一个“反”字,也就是从可执行文件反向生成高级语言源码的过程。

听起来很简单但实际上反编译是逆向工程最核心最困难的一步,通常做不到把可执行文件逆向出高级语言源代码,只能转化成汇编程序,即使某些高级语言(C#,vb,python等)反编译出源代码相对简单,得到的代码也往往是被混淆过的。

上图是windows平台下强大的反编译工具OllyDbg,但也只能得到汇编级的代码。

对于部分C族语言(C/C++),借助IDA的HexRay插件可以得到近似源码的伪代码,但这些伪代码也往往是有错误的。

破解青蛙

但幸运的是,旅行的青蛙是基于Unity开发的.NET程序,对于.NET程序,反编译技术较为成熟。

首先解压旅行青蛙的apk

apk实际上就是一个压缩包,windows下把后缀.apk改为.zip即可解压,值得一提的是,word、excle、powerpoint等文件的实质也是压缩包,解压这些文件也会有很多好玩的事情发生。

通过解压后存在assets\bin\Data\Managed目录判断出游戏为Unity游戏,那么程序的主要代码就在assets\bin\Data\Managed\Assembly-CSharp.dll中

我们只需对Assembly-CSharp.dll进行反编译即可,这里使用的是dnspy工具,当然其他的.NET反编译工具如ILSpy也是可以的。

把Assembly-CSharp.dll拖到dnspy中,稍等片刻,即可得到旅行青蛙程序的目录树和源代码

这里需要说明一下,像这种既没有加壳保护,也没有代码混淆的程序实际上是很少存在的,这款程序几乎没有防护措施大概是因为日本程序员和国内程序员的风格不同。

那么我们应该怎么定位到关键代码呢?这里有一种很高效的方法:搜索关键字符串

比如在抽奖时,提示抽奖券数量不足,那么我们就能确定抽奖的代码就在这串字符出现的代码附近,我们就搜索这个字(= =如果认识日文搜索这整句话更快)

搜到了两处,双击定位,发现第一处就是我们要找的代码(其实根据方法名PushRollButton也能推断出)

可以发现,这段代码就是抽奖的代码,若抽奖券数量<5(第一处箭头),则报错返回(二三处箭头),否则把抽奖券的数量自减5(第4处箭头)。

这样我们修改抽奖逻辑的思路就有很多了:

  1. 第一处箭头的<5改为<0,那么我们一直满足抽奖的条件,就可以一直抽奖
  2. 第四处箭头的-5改成0,那么每次抽奖后抽奖券的数量就不会减少,或者更进一步把-5改为+5,那么每次抽完奖,抽奖券的数量还会增加5
  3. 根据代码可以得知获取抽奖券数量方法的是TicketStock,可以针对TicketStock进行修改
  4. .....

这里主要介绍第3种方法,我们通过查看TicketStock方法,可以发现TicketStock方法是从ticket变量取值的

查找ticket,发现了初始化ticket的代码,同时发现了疑似初始化三叶草数量的代码

ctrl+shift+E修改此处代码,将69,70行的初始化均改为9999

点击编译保存修改,再点击 文件->全部保存(快捷键ctrl+shift+S)将修改保存回dll

然后将apk重新打包检测修改效果(因为apk实质就是压缩包,重新压缩,更改后缀为 .apk即可)

放到模拟器中检测修改效果(需要先卸载原版旅行青蛙

可以发现,三叶草和旅行券都已经被修改了

旅行券是999而不是9999是因为代码中有一处限制数量不超过999的判断,很容易发现

此外,虽然此时的apk可以再模拟器中运行,但实际上在真机上是不能运行的,原因和解决办法之后会提到

但再多的三叶草和抽奖券也有花光的一天,我们可以尝试再进一步修改。

通过查看ticket和clover的代码,可以找到返回三叶草数量和抽奖券数量的代码,直接把函数的返回值修改为9999,这样无论对三叶草和抽奖券做什么操作,都会返回9999,这样三叶草和抽奖券的数量就固定了,也就达到了无限三叶草和抽奖券的目的。

然后再ctrl+shift+S,重新打包apk即可。

解决签名

之前说过,重新打包好的apk并不能在真机上运行,是因为真机会检测安卓程序的签名,安卓的apk在签名时会对所有源文件进行一个hash运算,安装时hash校验失败就会拒绝安装

不能覆盖安装也是因为签名的原因,如果想继续存档,可以先把GameData.sav保存一份,安装好破解版的后重新导入即可

那么怎么绕过签名校验呢?我们只需要重新对apk进行签名即可。因为本人对apk的开发并不十分了解,在签名时还是花了一段时间研究的,后来发现可以通过apktool box工具包直接进行简单的签名

签名之后,即可真机运行

更进一步

更多修改

本次修改只修改了三叶草/抽奖券的初始值和返回值,但我们完全可以根据代码逻辑进行更多的修改,如:

  1. 修改抽奖几率
  2. 修改保存图片的上限
  3. 缩短旅行时间
  4. 修改获得珍稀照片的概率
  5. 对apk图标等资源进行修改
  6. ......

汉化

汉化也很简单,我们找到日文字符串后,修改为中文字符串即可,汉化是个体力活,这里就不再展示了。

......

声明

  • 本次修改目的是学习交流,请勿用于盈利

转载于:https://www.cnblogs.com/WangAoBo/p/8419155.html

《旅行青蛙》反编译/破解过程相关推荐

  1. 最新微信小程序反编译破解过程记录

    一.前言 既然你进来看这篇文章,我认为"微信小程序反编译"这个技术你多少应该会了解点.在学习微信小程序前端开发的过程中,我跟大部分人一样,试着仿写过一些线上的小程序案例,但在实际练 ...

  2. NET程序集反编译/破解

    NET程序集反编译/破解 作者: Tomex Ou .NET程序在执行时,会先编译成中介语言IL,再转成Native执行,因此中间IL阶段就很容易被反编译,甚至修改后达到程序破解目的.您可以参考文献# ...

  3. Unity3d 反编译破解游戏 简单示例 使用ildasm反编译DLL修改然后重新编译DLL

    因为这几天碰到一个Unity的Bug,不得不去反编译DLL看看C#代码的生成中间件代码.这也用到了一些反编译以及重新编译DLL的一些知识,意味到Unity是如此的不安全. 首先我们新建一个工程,创建一 ...

  4. 旅行青蛙——手游破解究竟需要多少成本

    简介 本文介绍最近比较火的一款小游戏(其实已经热过了)旅行青蛙,透过它来看看一款U3D游戏被破解究竟需要掌握哪些知识. 游戏介绍 旅行青蛙是最近一段时间比较火的一款Unity制作的休闲小游戏,游戏没有 ...

  5. Apk反编译破解及重新打包

    以前对app破解这些东西一直很感兴趣,一直认为这是大牛才可能实现的东西,后来发现,其实并不是这样的. 所以抽空我也来研习一番. 步骤综述: 1.找一个需要破解的 app 2.反编译 该 app 3.理 ...

  6. 文件签名魔塔50层android反编译破解

    发一下牢骚和主题无关: 缘由:该游戏作者有点可爱,原来就是拿别人的游戏,还在游戏中参加积分的轨制,打到20层后,需要积分.看不惯,就把它破解了,打到20层后,直接跳过要积分进程. 本文不提供破解后的安 ...

  7. Aspose.Words 19.X 文档转换 反编译破解 Crack

    Aspose破解教程 前言 介绍 **Aspose.word** 准备工作 正文 未解除验证效果 手术开始... 定位验证文件 分析代码逻辑 替换jar包内class文件 测试破解可用性 Idea中配 ...

  8. jdec-20反编译使用过程

    0.关于jdec请通过度娘了解. 1.下载博客提供的zip文件.仅测试过windows7 32位 2.双击运行Jdec-UI.bat 3.update configuration(可能单词不完全正确) ...

  9. 使用天乐软件加密狗(JDProtect)保护您的软件,防止程序被跟踪/逆向/反编译/破解

    作者:庄晓立(liigo) 日期:2011-4-8 原创链接:http://blog.csdn.net/liigo/archive/2011/04/08/6310677.aspx 转换请注明出处:ht ...

最新文章

  1. Servlet入门 代码
  2. Python3.5入门到项目实战(104天课程)
  3. win8.1 计算机放在桌面,Win8.1怎么把开始屏幕中的程序放到桌面?
  4. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]
  5. 下学期第三次作业——SQA计划和验收测试规程设计
  6. 使用回收站主键名、索引名问题
  7. 2019春计算机基础在线作业,2019春计算机基础在线作业100分
  8. roundcube邮箱手机端_企业邮箱申请后如何登录
  9. 台式计算机有线无线网卡设置,台式电脑怎么设置无线网络,详细教您台式电脑怎么设置无线网络...
  10. source的作用详细讲解
  11. 小米路由器r2d_小米路由器R2D固件(路由器刷机更新工具)V2.24.11 免费版
  12. 问题描述 the jar file jrt-fs.jar has no source attachment
  13. java实现爬虫,爬取网易歌单信息
  14. stm32cube 和 RTX v5一起用的方法
  15. c语言多线程编程随机数,在c 中使用线程安全的随机数,多线程_c_开发99编程知识库...
  16. 专利权利要求书七步法
  17. 杰文斯效应(Jevons effect)
  18. python识别中文人名_使用Python在NLP中的命名实体识别中提取人名
  19. 程序打包后需要设置管理员权限才可运行的解决办法
  20. 利用Django生成PDF文档

热门文章

  1. 广义线性回归 logit和probit
  2. python数据分析-matplotlib总结
  3. FCPX插件直接导入OBJ三维模型FCPX3D MODEL
  4. 《一种面向主题的 Flickr 组内照片浏览方法》阅读笔记
  5. 二本毕业,银行外包测试工作 4 个月有余。浅谈一下我的真实感受...
  6. [转]-关于职业规划最好最全面的一篇文章
  7. Python—实现Excel文件间的数据匹配(保留单元格式)—告别Vlookup!
  8. 固定支撑约束在ANSYS有限元计算中的三大注意事项
  9. 令人叹为观止的10大3D打印机应用
  10. Python3网络爬虫快速入门实战解析