最近旅行青蛙风靡朋友圈 而我为了想给我的蛙蛙弄点好吃的(出去装逼),就萌生了反编译这个念头。
教程仅仅提供于学习 不可作其他用途
解压所需要的文件
先下载apk 然后解压apk 在assets\bin\Data\Managed\Assembly-CSharp.dll 是unity编译出来的代码 所有的逻辑都在这里面。(WTF 我也不懂C#)
反编译工具
这里我下载了两款工具用于使用
- JetBrains dotPeek
- dnSpy
刚开始我用的JetBrains家的dotPeek 这东西挺好用 跟android studio的快捷相似 能够通过点击跳转 找到逻辑
找到需要的类之后 打开dnSpy去修改响应的值
过程
把 Assembly-CSharp.dll丢进去dotPeek image.png通过查看类名 发现了可能是数据储存的地方
image.png
点开SaveDataFormat,一进去就看到路径
image.png
通过查询 知道了该路径在android 上的path 是/storage/emulated/0/Android/data/package name/files
查看手机 发现了GameData.sav两个文件
刚开始我是想通过写C#将文件读出来 写进去的方式修改 但是后面发现二进制的序列化和反序列化没办法跨数据集,屡次失败 然后通过搜索 换了种思路(改dll)
通过跳转查逻辑 最终发现SuperGameMaster这个类是显示以及获取数据的地方,游戏的逻辑是从数据包中读取数据 并将对象放到一个对象之后。然后通过一个方法获取响应的值。类似于java的get,看图就懂了
image.png
如下图,ticket是指抽奖券 那么现在开始修改 右键 编辑
image.png
先点击右下角的重置 将这个三个的勾选去掉 然后0 和 1 随便一个 右键删除指令 现在剩下一个操作和一个return 。修改操作码为idc.i4 将值改为你想要的值 比如200
image.png
点击确定后可以看出代码已经变成200了
image.png
当然了 限制不能超过999, 有一个方法做了处理。但是其实也没必要超过 因为现在已经是永远200 用不完的
重打包
将dll保存过后 替换掉原来的dll之后 需要重打包 因为android 签名的时候会将所有文件做一个hash 所以去搜索一个android的重打包 重新打一个包 即可。
Tip:温馨提示 因为签名不一样 所以不能覆盖安装。因为先将GameData.sav先保存一份 然后卸载原来的 再安装自己反编译的 再将文件导进去即可。
三叶草改 public static int CloverPointStock()方法即可
这次反编译还请教了八哥、远远、学爷 让我能反编译下去(卡在序列化反序列化那个卡的我都想放弃了),这次我还发现反编译dll比想象中好像简单一点
- 用另类的方式修改三叶草/抽奖券
- 修改抽奖几率
- 修改保存的图片张数
- 获得珍稀照片
- 缩短旅行时间
2018/2/1 更新。换种方式改三叶草/抽奖券
旅行青蛙版本:1.0.4
现在全程用dnspy修改
先搜索 足 这个字。这个字是买东西不够钱会弹出来的提示。
image.png
setinfo 这个方法。定位到245行 将判断条件改了
image.png image.png
image.png
image.png
现在判断条件改成负数(你自己想要的值也可),就能直接买了
但是钱还是会照扣,所以还要把写入数据的地方改了
定位到同文件327行
image.png
image.png
image.png
image.png
现在就是你买多少 给你多少钱
那么抽奖券在第一个搜索关键字那里
image.png
image.png
image.png
image.png image.png
image.png
这样就能完成抽奖券的修改
这样修改能让人不知道我们修改过
修改抽奖几率
在修改抽奖券的同一文件下
image.png
这个方法就是抽奖的方法
白球60 篮球27 绿9 红三 金1
这个是抽奖的概率。想要抽全是金就改成99就行 红球金球都想就改成98 绿也想就改成94
image.png image.png
修改保存的图片张数(待测试)
image.pngimage.png
现在修改成了600 现在我的图片还没到60,待测试是否通过
只改这个到了60 还是会让你删除
这边的判断也改一下 就能保存了
但是还存在 相册不能右翻页到11页的情况
这个也改掉就能 看10页以外的图片
2018/02/03 加快游戏进程
在initLoading的时候 会查看并刷新剩余出门时间
image.png
这个方法就是计算你剩余多久进行下一个活动。本来我是想让儿子立刻出门的。但是测试发现有问题,因为参数是互相纠缠在一起。因此不好弄。只好加快游戏进程
image.png
我们点进去这个方法
image.png
会发现都在减这个时间
image.png
看这个activeMath这个方法
等这个时间减少之后 就发触发事件了(应该是这样的)
回到loading
image.png
会发现传的参数是lasttime什么的
点进去
image.png
发现是用现在设备的时间减去上一次登陆进去游戏的时间
看上面 要是校验时间失败就会返回0
Mathf。clamp这个方法搜索知道 这个时间不能大于一个月 不然算一个月
因此想要时间加速就话就改参数吧
这个是秒 那么我就想加速60倍 一秒当一分钟用
==================================
错误示范
image.png
本来以为*60 会很难写 没想到试出来了 还好没放弃
image.png
加这两句
==================================
以上是错误得 我有点天真 想着能够通过相乘进行加速 但是我弄不出来 相乘之后 会卡在initLoading那里
最后实在没有办法 就将最小得值改为一个小时 就是说 你initLoading一次 就过去一个小时
image.png
2018/02/02 获得珍稀照片(测试中)
================
测试中 不保证正确
如图 找到叫珍稀照片的关键字 知道是这个getEvt方法获得的list里判断的
image.png
将判断条件改了应该就ok了
image.png
此外 合影我也想要
image.png
2018/02/03 更新 改这个参数只是能更轻松进入到待选席位上
如上图 timeSpanSec 会在刷新的时候减去这个参数
所以 要想办法减少这个参数就行
如图是普通的(应该就是单身狗)
这个就不管了
~~后面的一判断条件一层一层 暂时没想到法子能直接弄 ~~
在珍稀的这个方法中 有一个叫flag的东西
image.png
把flag都改成true就行了
image.png
但是改了还是不一定能每次有ssr
=============================================
网友评论