您的位置:首页 > 编程语言 > Lua

00003 不思议迷宫.0002:修改Lua,虽然实际上没什么卵用

2017-02-15 13:24 288 查看

00003
不思议迷宫.0002:修改Lua,虽然实际上没什么卵用

上一章我们解密了lua脚本,这一章我们试图修改lua脚本,看能有什么效果。

玩游戏天天签到,就为了了那些签到奖励。我们看能不能修改它,签到一次就得10万钻石(价值人民币6万元……)。那就找找签到奖励的配置文件。签到的英文大概是sign、login、checkin之类的,可以把它们作为文件名关键字进行查找。但也许根本就找不到,文件名也许是拼音QianDao或者其他奇葩的名字呢。有一个更具准确性的办法。通过查看luac文件,我们知道里面充满了注释(注释可以有,但多到让我用“充满”这个词来形容,就是槽点了)。那么,“签到”两字也应当不会被漏掉。用Ultra
Edit之类的工具,在解密后的src目录中搜索包含“签到”两字的全部文件。经过一番查验后,我们确定了签到奖励表:src/game/csv/sign_in_bonus.luac,内容如下(原内容很长,此处仅列出前面的几个):

functionget_sign_in_bonus_CSV()

   
return {

       
{["rule"]="Jan_1",["bonus"]="1(561,10)",["icon"]="item_561",["memo"]="",},

       {["rule"]="Jan_2",["bonus"]="2(gem,20)",["icon"]="attrib_7",["memo"]="",},

       
{["rule"]="Jan_3",["bonus"]="1(641,5)",["icon"]="item_641",["memo"]="",},

       {["rule"]="Jan_4",["bonus"]="2(money,5000)",["icon"]="attrib_1",["memo"]="",},

       {["rule"]="Jan_5",["bonus"]="1(1001,1)",["icon"]="item_1001",["memo"]="",},

       {["rule"]="Jan_6",["bonus"]="1(561,20)",["icon"]="item_561",["memo"]="",},

       {["rule"]="Jan_7",["bonus"]="2(gem,40)",["icon"]="attrib_8",["memo"]="",},

       {["rule"]="Jan_8",["bonus"]="1(641,10)",["icon"]="item_641",["memo"]="",},

       
……

   
}

end

简单易懂。rule中指定了日期;bonus中指定了具体的奖励;icon指定界面显示;memo应当是备注,不知道啥用。

找到相应的日期,进入游戏后和签到界面中的做个比较,我们就很容易知道,bonus中的参数的含义:

l        1(561,10):前面的1表示奖励的类型,为物品;561是物品id;10是数量。

l        2(gem,20):前面的1表示奖励的类型,为货币;gem是钻石,money是金币;20是数量。

接下就改吧,全部改成2(gem,100000),然后保存,然后再加密,最后更新到ipa中,安装。再再最后,满心欢喜又期待无比地打开游戏,然后,就没有然后了,懵逼了——游戏进不去,或者进去了却打不开签到界面。

会是什么地方出的问题呢?难道是文件格式错了?打开验证一下,是utf8的没错。还是用文件比较工具比较比较吧。打开Beyond
Compare,一比较,发现问题不大,除了我们修改的部分,就是修改后的文件比原文件多了BOM头。得,忘记这一茬了。那就去掉BOM头,再看看。又一次满心欢喜又期待无比地打开游戏,然后,继续懵逼——还是那样,游戏进不去,或者进去了却打不开签到界面。

好吧,你NB,你不让改那我就恢复回去吧。我于是把先前以硬拷贝方式作的备份文件覆盖到安装包,然后安装,打算先老老实实玩会,放松放松,让思绪在潜意识中沉淀沉淀,然后也许就灵光乍现,发现问题所在了。现实却很残酷,继续让人懵逼——还是那样,游戏进不去,或者进去了却打不开签到界面。

这是为什么?我都恢复为原始内容了,没有进行过任何更改,居然还不行?难道我电脑中毒了?磁盘坏道了?我不信。——可惜当时刚好版本升级,我顺手就那么点了几下,然后,这个问题就没再研究下去。想在想起来,两个文件唯一的不同就是(创建)时间了。

游戏不能正常运行,这应当是程序对文件作了某种保护。常见的是md5之类的hash值匹配。抱着试试看的心态找了一圈,最后看到了这个个:project.manifest。看后缀,这是个清单;看名字,也很可疑。打开一看,哈哈,就是它。

{

   
……

   
"assets" : {

       
"res/animation/alien.csb" : {"md5" : "536c50af2ab2d92e",
"size" :664},

       "res/animation/ancient_of_lore.csb" : {"md5" :"f7544cbd9ff693c6","size"
: 640},

       
"res/animation/ancient_of_war.csb": {"md5" : "7beb8b9d315634a9", "size" : 622},

       
……

   
},

   
……

}

在列表中找到"src/game/csv/sign_in_bonus.luac",更新md5值和size:

"src/game/csv/sign_in_bonus.luac": {"md5" : "3bf3471cef95802a","size"
: 32021},

结果才发现,此处md5码的位数比工具生成的要少。这有点意思,但还难不倒我。将工具生成的和project.manifest中的进行对比,就立即发现了规律。比如,以"res/animation/alien.csb"
: {"md5": "536c50af2ab2d92e","size" : 664}为例:

工具生成的:       
  2B021CCD3536C50AF2AB2D92E06A0DAC

project.manifest中的:XXXXXXXXX536c50af2ab2d92eXXXXXXX

搞定,改完弄进游戏,签入看看,哈哈,真是过足了眼瘾啊,钻石大把大把的。可惜没啥卵用,因为一旦重新登录游戏,它就恢复正常了;或者在一些操作时,直接告诉你数据异常,请重新登录……。

我很想弄清楚具体是在哪个函数的什么位置进行的md5检测,奈何本人才疏学浅,一时没找出来,如有达人,请无比告知、分享下过程心得,不胜感激。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息