放置江湖html5源码,codearchive/reverse/放置江湖 at master · crazyyao0/codearchive · GitHub...

放置江湖

000

放置江湖是深圳小猴跳跳出品的一款文字类武侠Mud游戏。我在TapTap上下载的。玩了之后一下子就触动了我一段久远的记忆。这个游戏非常像我高中时候在文曲星上玩得叫gmud的游戏。记得当时花了非常多的时间在这个游戏上(其实是因为上课太无聊)。当时的文曲星用的是2032的纽扣电池,一节电池要5块钱。我在这个游戏上用光了几十节电池。那时候为了能干掉武学修为达到返璞归真级别的张三丰,我开始修改游戏。从修改游戏数据到修改游戏图片到直接修改游戏代码。最后我练就了可以人肉6502指令集的汇编和反汇编技术。我会把大段代码抄在纸上分析,然后改完以后再写回到Rom里。现在想想真是疯狂啊。

言归正传。我玩了几天后发现网上的攻略都没有具体数值。于是想把这个游戏拆开看看。

001

放置江湖目前只能通过TapTap下载. 在TapTap里设置禁用自动删除安装包后, 游戏安装包可以在下面这个位置找到。

Android/data/com.taptap/files/Download/taptaptmp/

下载安装包后解压缩。首先看到的是这个文件

lib/armeabi/libcocos2dlua.so

看来游戏应该是基于cocos2dx的。随后在assets目录下发现了很多lua脚本以及图片资源。图片没有加密,直接都可以看到,但这不是我想要的。随便打开一个Lua脚本。看到如下内容

e91abd923bd1a08029722d49cd1b5ce6.png

不认识这个文件。网上搜索ABCTJM也没有发现任何线索。看一下每个字节出现的频率

385ae5fbba4f6503aa25543884e38cdf.png

这个文件不是压缩了就是加密了。加密的可能性更大一些。鉴于lib下的那个文件的文件名是libcocos2dlua.so,这些扩展名是lua的文件应该是处理过的脚本文件。现在目标是弄明白这个文件是怎样压缩和加密的。不用废话了,直接开始反汇编吧。

objdump -CT libcocos2dlua.so > fzjh.sym

objdump -Cd libcocos2dlua.so > fzjh.asm

从cocos2d::cocos2dVersion()看到如下反汇编:

007364f8 <:cocos2dversion>:

7364f8:4801ldrr0,[pc,#4]; (736500 <:cocos2dversion>)

7364fa:4478addr0,pc

7364fc:4770bxlr

getversion1.png

736500地址的值是47F533。将这个值加上7364fe等于BB5A31

getversion2.png

这里就是版本号了。可以看到版本号是cocos2dx 3.9。来到cocos2dx的github上把3.9下载下来开始对照代码读汇编,效率果然高。

https://github.com/cocos2d/cocos2d-x

通过在符号表中搜索"key", "decrypt"等关键字,很快就找到了一些线索。

cocos2d::LuaStack::executeScriptFile() 会调用 cocos2d::LuaStack::luaLoadBuffer() 然后调用了 xxtea_encrypt()进行解密。貌似对lua加密是cocos2dx内置的功能。

int LuaStack::executeScriptFile(const char* filename)

{

CCAssert(filename, "CCLuaStack::executeScriptFile() - invalid filename");

std::string buf(filename);

//

// remove .lua or .luac

//

size_t pos = buf.rfind(BYTECODE_FILE_EXT);

if (pos != std::string::npos)

{

buf = buf.substr(0, pos);

}

else

{

pos = buf.rfind(NOT_BYTECODE_FILE_EXT);

if (pos == buf.length() - NOT_BYTECODE_FILE_EXT.length())

{

buf = buf.substr(0, pos);

}

}

FileUtils *utils = FileUtils::getInstance();

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值