白日门手游luac文件加密怎么解密_浅析android手游lua脚本的加密与解密

2018.05.02更新

这段时间在翻备份的硬盘,突然发现了以前的分析项目和代码,从里面提取了之前附件的内容,现在上传给大家,真是柳暗花明又一村啊。附件包括201703版本的梦幻手游里面提取的so文件和一些加密后的资源文件(包括lua脚本),并包括了2个扑鱼APK文件,最后还打包了解密代码,供大家参考。

附件太大,快100MB,上传不来论坛,我又放到百度网盘了......

链接:https://pan.baidu.com/s/1DVgH0qHYPkiHBIiV2UsU7g 密码:ipt3

2018.04.09更新

附件是真的找不到了, 大家主要理解思路吧。百度网盘的附件好多朋友都下载和保存过,能不能发一份到论坛上传?感谢感谢~

2017.04.15更新

1. 在编辑过程中,5.1后半段内容(解密和反编译部分)被删除了,现在补上。

2. 在3.3里说到,“修改lua项目中的opcode后,编译生成lua.exe再替换到反编译目录下,就可以反编译”,这一句是错误的,正确是“修改lua项目中的opcode后,重新编译反编译工具luadec51项目,就可以反编译了”,已经修改。

0.前言

这篇文章是本人在学习android手游安全时总结的一篇关于lua的文章,不足之处欢迎指正,也欢迎大牛前来交流。本文目录如下:

目录

0. 前言

1. lua脚本在手游中的现状

2. lua、luac、luaJIT三种文件的关系

3. lua脚本的保护

3.1 普通的对称加密,在加载脚本之前解密

3.2 将lua脚本编译成luaJIT字节码并且加密打包

3.3 修改lua虚拟机中opcode的顺序

4. 获取lua代码的一般方法

4.1 静态分析so解密方法

4.2 动态调试:ida + idc + dump

4.3 hook so

4.4 分析lua虚拟机的opcode的顺序

5. 三个游戏的lua脚本解密过程

5.1 54捕鱼

5.2 捕鱼达人4

5.3 梦幻西游手游

6. 总结

参考文章

主要用到的工具和环境:

1 win7系统一枚

2 quick-cocos2d-x的开发环境(弄一个开发环境方便学习,而且大部分lua手游都是用的cocos2d-x框架,还有一个好处,可以查看源码关键函数中的特征字符串,然后在IDA定位到关键函数,非常方便)

3 IDA6.8(分析so文件+动态调试so)

4 vs2015(编写解密代码)这里建议用vs2013来编译运行cocos2d-x,vs2015太多坑要填了.....

5 AndroidKiller 1.3.1(反编译apk,其中apktool.exe是最新版)

6 luadec51(反编译luac)

7 luajit-decomp(反编译luaJIT)

等等...

1.lua脚本在手游中的现状

略。

2.lua、luac、luaJIT三种文件的关系

在学习lua手游过程中,本人遇到的lua文件大部分是这3种。其中lua是明文代码,直接用记事本就能打开,luac是lua编译后的字节码,文件头为0x1B 0x4C 0x75 0x61 0x51,lua虚拟机能够直接解析lua和luac脚本文件,而luaJIT是另一个lua的实现版本(不是原作者写的),JIT是指Just-In-Time(即时解析运行),luaJIT相比lua和luac更加高效,文件头是0x1B 0x4C 0x4A。

luac:

c1979b789964cefc57e5b83a8408539f.png

luajit:

e01a2a8f2a8e28deb04d824ba8207c21.png

3.lua脚本的保护

一般有安全意识的游戏厂商都不会直接把lua源码脚本打包到APK中发布,所以一般对lua脚本的保护有下面3种:

3.1 普通的对称加密,在加载脚本之前解密

这种情况是指打包在APK中的lua代码是加密过的,程序在加载lua脚本时解密(关键函数luaL_loadbuffer ),解密后就能够获取lua源码。如果解密后获取的是luac字节码的话,也可以通过反编译得到lua源码,反编译主要用的工具有unluac和luadec51,后面会具体分析。

3.2 将lua脚本编译成luaJIT字节码并且加密打包

因为反编译的结果并不容易查看,所以这种情况能够较好的保护lua源码。这个情况主要是先解密后反编译,反编译主要是通过luajit-decomp项目,它能够将luajit字节码反编译成伪lua代码。

3.3 修改lua虚拟机中opcode的顺序

这种情况主要是修改lua虚拟机源码,再通过修改过的虚拟机将lua脚本编译成luac字节码,达到保护的目的。这种情况如果直接用上面的反编译工具是不能将luac反编译的,需要在程序中分析出相对应的opcode,然后修改lua项目的opcode的顺序并重新编译生成反编译工具,就能反编译了,后面会具体分析。

一般上面的情况都会交叉遇到。

4.获取lua源码的一般方法

这里主要介绍4种方法,都会在第5节中用实例说明。

4.1 静态分析so解密方法

这种方法需要把解密的过程全部分析出来,比较费时费力,主要是通过ida定位到luaL_loadbuffer函数,然后往上回溯,分析出解密的过程。

4.2 动态调试:ida + idc + dump

这里主要通过ida动态调试so文件,然后是定位到luaL_loadbuffer地址,游戏会在启动的时候通过调用luaL_loadbuffer函数加载必要的lua脚本,通过在luaL_loadbuffer下断点 ,断下后就可以运行idc脚本将lua代码导出(程序调用一次luaL_loadbuffer加载一个lua脚本,不写idc脚本的话需要手动导N多遍.....)。

4.3 hook so

跟4.2原理一样ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值