00003 不思议迷宫.0011:Android新版中的Lua加密

00003 不思议迷宫.0011Android新版中的Lua加密

         今天弄了台Win7笔记本,装上了Android虚拟机,打算验证一下Android的游戏修改版。于是从官网下载了最新的Android版游戏。说到这个,我就想骂运营了,为毛Android版免费,而AppStore上下载要收费?你这是歧视谁呢?Android玩家都是穷BiOS玩家都是冤大头?

         打开apk包——好吧,下载下来的是一个zip文件,MBD幸亏我知道apk其实就是zip压缩文件,只是后缀名不同;你说这样其他那些搞不懂这些门门道道的Android玩家怎么玩你的游戏?你还真当自己是大爷了?玩家们就非玩你的游戏不可?不要取得一点成就就骄傲行不?你们的游戏后劲乏力了知道不?——替换补丁文件之前,随手双击打开看了一下,结果看出毛病来了:luac文件们都是以“applicationWillEnterForeground”开头的,接下来就全是乱码,这和iOS上的不同啊。还好,我知道点苗头,这很可能是xxtea加密的。接下来验证下。

         老规矩,打开ida反编译libcocos2dlua.so,找到cocos2dx_lua_loaderF5看伪码,发现在cocos2d::LuaStack::luaLoadBuffer之前有一个srcDecrypt,进去一看,得,和以前的相同。然后进到cocos2d::LuaStack::luaLoadBuffer,发现它调用了xxtea_decrypt

int __fastcall cocos2d::LuaStack::luaLoadBuffer(int a1, int a2, char *s1, int a4, int a5)

{

  ……

  if ( *(_BYTE *)(a1 + 24)

    && (v8 = *(_DWORD *)(a1 + 40), !j_j_strncmp(s1, *(const char **)(a1 + 36), *(_DWORD *)(a1 + 40))) )

  {

    v13 = 0;

    v10 = (void *)xxtea_decrypt(

                    (unsigned __int8 *)&v6[v8],

                    v5 - v8,

                    *(unsigned __int8 **)(v7 + 28),

                    *(_DWORD *)(v7 + 32),

                    &v13);

    v9 = j_j_luaL_loadbuffer(v12, v10, v13, a5);

    j_j_free(v10);

  }

  else

  {

    v9 = j_j_luaL_loadbuffer(v12, v6, v5, a5);

  }

  return v9;

}

         想看一下xxtea的密码,于是在函数中找一下xxtea,结果只出来一个cocos2d::LuaStack::setXXTEAKeyAndSign,查找它的引用,还是和以前一样:没有。看来密码不是用这个函数设置的,或者是被保护了。那就换种方法。xxtea是需要signalkey的,signal这个是明文的,luac中打头的那个“applicationWillEnterForeground”就是。key就是我说的密码。为了让xxtea_decrypt正常工作,需要设置signalkey。正常情况下,对它们的赋值会离得远吗?哈哈,查找字符串“applicationWillEnterForeground”的引用,然后:

int __fastcall initLuaStack(cocos2d::LuaStack *a1)

{

  ……

 

  v1 = a1;

  v2 = *((_DWORD *)a1 + 4);

  lua_module_register(*((_DWORD *)a1 + 4));

  register_verify_function(v2);

  register_cocos_override_function(v2);

  sub_63EF8C(v11, "applicationDidEnterBackground", &v10);

  sub_63EF8C(&v9, "applicationWillEnterForeground", &v8);

  v3 = *(void (__fastcall **)(cocos2d::LuaStack *, const char *, size_t, const char *))(*(_DWORD *)v1 + 116);

  v4 = v11[0];

  v5 = j_j_strlen(v11[0]);

  v6 = v9;

  j_j_strlen(v9);

  v3(v1, v4, v5, v6);

  sub_63EFAC(v9 - 12, &v13);

  return sub_63EFAC(v11[0] - 12, &v12);

}

         这个很可疑,但到底是不是呢?大伙自己去验证吧。我只想说,我不关心这个,因为luaLoadBuffer已经很明确地告诉我,不是xxtea加密的luac文件(也就是明文的)也一样可以被加载。其实iOS上的以0x110x120x13打头的charMap加密是也是如此,明文也同样可以正常加载。啊,真是省了事了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值