旅行青蛙(旅かえる)逆向笔记

温馨提示:阅读本文你的电脑需要安装好apktool、signapk、.NET Reflector、dnSpy。他们都可以在github或吾爱云盘上获取。

一、APK结构

  • 旅行青蛙是个Unity的游戏。简单说下Unity:Unity是一个用于制作3D游戏的C#框架,可以跨平台。也就是说旅行青蛙的核心游戏逻辑在Android和iOS上面是一样的代码。显然Android更容易让我们分析,本文先从APK的结构开始。
  • 使用apktool反编译APK,发现Unity游戏的smali代码并没有太多的信息,基本都是调用Google的Ad接口之类的,或者是Google Play的应用内购买,就不需要太关心了。
  • lib文件夹中主要都是Unity、Mono等的支持动态库so文件,也不是我们关心的对象。
  • 经查阅资料可以得知,Unity游戏的主要逻辑代码存放于assets/bin/Data/Managed下的Assembly-CSharp.dll动态库文件中,C#的dll文件不难分析,我们使用.NET Reflector和dnSpy进行分析和修改。

二、Assembly-CSharp.dll修改

  • 使用.NET Reflector打开Assembly-CSharp.dll文件,观察整个dll的结构。发现几乎所有逻辑代码都位于“-”下面。
  • 我们运行游戏,在商店点击购买昂贵的商品,或者在抽奖区抽奖,游戏会提示“みつ葉が足りません”和“ふくびき券が足りません”和。
  • 虽然不懂日语,但是大概知道是提醒你不够的意思,因为电脑没有日文输入法,所以在.NET Reflector中尝试搜索汉字“足”,看看有什么结果。
  • 结果找到了两个方法中提及了“足”字,分别是SetInfoPanelData方法和PushRollButton方法。首先查看SetInfoPanelData方法,发现是进行商品购买的逻辑代码,代码如下:
public void SetInfoPanelData(int shopIndex, Vector3 pos)
{
    if (shopIndex == -1)
    {
        this.unsetCursor();
        this.InfoPanel.GetComponent<InfoPanel>().SetInfoPanel(-1);
    }
    else if (Mathf.Abs(this.flickMove) <= (this.S_FlickChecker.flickMin / 3f))
    {
        if (this.selectShopIndex != shopIndex)
        {
            this.InfoPanel.GetComponent<InfoPanel>().SetInfoPanel(shopIndex);
            this.selectShopIndex = shopIndex;
            this.setCursor(pos);
            SuperGameMaster.au
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值