爆炒江湖是一款画风可爱的、主题为收菜和做菜的养成小(众)游戏。有多小众呢,开始写作之前我试图找游戏apk来让这篇流水账显得严谨一些,结果连个官网都没有……

只好从系统里下一份:

adb shell "pm list packages -f -3 | grep food" # 本行有后期处理
package:/data/app/com.pook.foodgame-1/base.apk=com.pook.foodgame

adb pull /data/app/com.pook.foodgame-1/base.apk .

解压apk,在lib/armeabi-v7a里看到libtolua.so和libunity.so。这时发现许多lua文件最后更新时间是2017年12月,这些文件应该被更新过了(开启游戏时如果有更新会动态下载一些资源文件),来到传统的Android/data/<package_name>下,把最新版本拖出来覆盖:

adb pull /sdcard/Android/data/com.pook.foodgame/files/luaframework/lua ./
cp -r lua/* ./base/assets/lua/

assets\lua里有很多游戏逻辑命名的Lua文件,其内容是base64编码过的,解码后并不是明文,随手binwalk之也没有结果。这说明……或许可以先看看调用它们的东西,也就是Unity 3D。

排除资源文件之后,assets\bin\Data\Managed发现了一堆dll,其中Assembly-CSharp.dll名字长得最可疑。一阵搜索后下载了JetBrains家的dotPeek,载入这个文件。

dotPeek给出了反编译后的C#,终于有耿直的代码可以看了。

很容易就找到了相关函数。这个Class很是high cohesion,在Visual Studio中新建一个.Net console app把代码拷进来加个Main就可以跑。

首先找个小文件验证,这里选的是Main.lua:

甚至还有注释,声望+1。翻翻C#文档,把整个目录的lua文件都解密,客户端的资源就一览无遗了。

最后附上几个我玩时关心的防毕业机制:

  • 贵客出现概率:一般5火碰瓷菜都有8%/10%概率出现给5星符文的贵客
  • 贵客出现后给金符文/金币(包括金币数量)的概率:基本上是五五开,金符文只给1个,另外50%概率给的金币也均匀在2500/5000/7500/12500分布
  • 过了111还要做主线吗:要,做主线解锁支线和菜谱,支线送金符文
  • 厨具是不是玄学:暂时没看出厨具加的是绝对值还是相对值(大概看漏了)