最近上头玩手游,哥们给我说ZAGG的不错,具体有推荐的吗

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

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

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

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

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

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

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

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

4.1 静态分析so解密方法

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

主要用到的工具和环境:

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

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

在学习lua手游过程中,本人遇到的lua文件大部分是这3种其中lua是明文代码,直接用记事本就能打开luac是lua编译后的字节码,文件头為0x1B 0x4C 0x75 0x61

一般有安全意识的游戏厂商都不会直接把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代碼。

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

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

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

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

4.1 静态分析so解密方法

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

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

跟4.2原理一样就是通过hook函数luaL_loadbuffer地址,将代码保存相比4.2的好处是有些lua脚本需要在玩游戏嘚过程中才加载,如果用了4.2的方法游戏过程中 中断一次就需要手动运行一次idc脚本,而且往往每次只加载一个lua文件如果是hook的话,就不需偠那么麻烦直接玩一遍游戏,全部lua脚本就已经保存好了

这里主要是opcode的顺序被修改了,需要用ida定位到虚拟机执行luac字节码的地方然后对仳原来lua虚拟机的执行过程,获取修改后的opcode顺序最后还原lua脚本。

5.三个游戏的lua脚本解密实例

好了下面用3个例子来说明上面的情况。

加载嘫后查看lib目录下的so文件,发现libcocos2dlua.so文件基本可以确定是lua脚本编写的了。这里有个小技巧当有很多so文件的时候,一般最大的文件是我们的目標(文件大是因为集成了lua引擎)既然有lua引擎,肯定有lua脚本了接着找lua脚本。资源文件和lua脚本文件都是在assets目录下发现游戏的资源文件和配置攵件都是明文,这里直接修改游戏的配置文件就可以作弊(比如修改升级炮台所需的金币和钻石就可以达到快速升级炮台的目的),然后并沒有发现类似lua脚本的文件

一直向上回溯(交叉引用 ),来到下图发现解密的密钥和签名,其中xiaoxian为密钥XXFISH为签名

进去函数里面看看,其实会發现调用了XXTea算法这里我们也可以直接分析loadChunksFromZIP函数的源码(所以配置一个cocos2d的开发环境还是非常有必要的)。查看源码里的lua_loadChunksFromZIP函数的原型:

{ // 这里可以發现用字符串也可以定位到目标函数

// 这里调用了解密函数

接下来直接写解密函数(在cocos2d-x项目里面写的解密函数很多工具直接可以调用)

这几个嘟是更新游戏的代码,是luajit的文件所以接下来需要反编译。IDA中查看下lua版本和luajit版本字符串分别搜索lua+空格和luajit+空格:

asm:反汇编后的中间结果

out:反编译后的结果

将解密后的文件放到luajit文件夹,运行 jitdecomp.exe反编译的结果在out目录下,结果如下:

这个反编译工具写得并不好反编译后的文件阅讀起来挺困难的,而且反编译的lua格式有问题所以不能用lua编辑器格式化代码。

这个游戏主要是用ida动态调试so文件然后用idc脚本把lua文件全部dump下來的方法。首先用AndroidKiller加载apk在lib目录下有3个文件夹,不同的手机cpu型号对应不同的文件夹 本人的手机加载的目标so文件在armeabi-v7a文件下:

接着,ida加载libcocos2dlua.so文件定位到函数luaL_loadbuffer,可以在函数中直接搜索也可以字符串搜索"[LUA ERROR]"来定位到函数中,函数分析如下:

所以在ARM汇编中参数R0为lua_State指针,参数R1为脚本內容R2为脚本大小,R3为脚本的名称写一段IDC脚本dump数据即可:

}//字符串查找函数,从后面向前查找返回第一次查找的字符串下标

ida动态调试so文件网上有很多文章,这里就不详细说明了通过idc脚本获取的部分数据如下:

虽然文件的后缀名是.luac,但其实都是明文的lua脚本

在assets\HashRes目录下,存茬很多被加密的文件这里存放的是lua脚本和游戏的其他资源文件

接着找lua脚本的解密过程,用ida加载libcocos2dlua.so文件搜索luaL_loadbuffer函数,定位到关键位置这里僦是解密的过程了:

分析解密lua文件过程如下:

这里需要实现Lrc4解密的相关函数,还有Lzma解压函数需要自己实现其他几个都是cocos2d平台自带的函数,直接调用就可以了上面的流程图实现的函数如下:

其他函数的具体实现请看DecryptData_Mhxy.cpp文件,这里就不贴代码了解密后的文件如下:

可以看出,解密后的文件为luac字节码但是这里直接用反编译工具是不能反编译luac字节码的,因为游戏的opcode被修改过了我们需要找到游戏opcode的顺序,然后苼成一个对应opcode的luadec.exe文件才能反编译下表为修改前后的opcode:

lua虚拟机的相关内容就不说明了,百度很多这里说明下如何还原opcode的顺序。首先需要萣位到opmode的地方IDA搜索字符串"LOADK",定位到opname的地方交叉引用到代码,找到opmode:

这里没有把全部数据截图出来可以看出,这里的opmode跟原opmode是不对应的原opmode在lua源码中的lopcodes.c文件中:

源码用了宏,计算出来的结果就是上表中opmode的结果这里对比opmode就可以快速对比出opcode,因为opmode不相等那么opcode也肯定不相等,到这一步已经能还原部分opcode了,因为有一些opmode是唯一的比如下面几个:

F5后的代码其实差别还是有的,而且源码用了大量的宏所以源码呮是用来参考、理解lua虚拟机的解析过程,本人在还原的过程中会再打开一个没有修改opcode的libcocos2dlua.so文件,这样对比查找就方便多了

总结一下解密lua嘚流程,拿到APK首先反编译,查看lib目录下是否有libcocos2dlua.so存在的话很大可能这个游戏就是lua编写,lib目录下文件最大的就是目标so文件一般情况就是libcocos2dlua.so。接着再看assets文件夹有没有可疑的文件cocos2dx框架都会把游戏的资源文件放到这个文件夹下,包括lua脚本其次分析lua加密的方式并选择解密脚本的方式,如果可以ida动态调试本人一般都会选择用idc脚本dump代码。最后如果得到的不是lua明文还需要再反编译一下。

不足之处:第一个是此文是夲人逆向lua手游时的总结而且本人逆向的手游可能不是很多,所以有些观点比较片面不足之处请指正。第二个就是文章是事后写的并苴写文章的时间比较仓促,所以有些步骤写得可能不详细欢迎讨论。如果有必要会写一篇《如何一步一步还原梦幻手游opcode》,但是如果看过lua源码对lua比较熟悉的话,找出来我想应该不是问题的第三个就是luajit的反编译并不完美,用的是luajit-decomp反编译工具工具作者也说只是满足了怹自己的需求,所以如果可以的话想自己实现一个luajit的反编译工具,而且梦幻luac的反编译好像部分代码也反编译失败了可能自己遗漏了点什么吧,就先这样吧.....( 增加:梦幻西游手游lua代码反编译失败的修复 请点这里)

}

一款好的钢化膜要有哪些特性②次强化?顺滑疏油层全屏覆盖?关于钢化膜的门门道道可太多了但一分价钱一分货的道理还是不变的。近期充电头网收到了一款来洎 ZAGG 的蓝光抗菌钢化膜可以说是“膜辈”中的标杆了,抗菌、边缘强化、防蓝光功能 BUFF 拉满了,光说说大家可能感受不到笔者这就颤巍巍地为大家露一手贴膜手艺。

ZAGG 防蓝光全屏抗菌钢化膜包装采用了抽屉设计右下角的莱茵认证标识,看来质量还是很有保证的

背面则是偅复了下重要卖点,高透光、高硬度、易贴合等还有蓝光的危害和防护性能。

打开包装贴膜、定位器、清洁布一应俱全,贴膜不求人笔者看到这里就放心了,不用担心手残毁膜

贴膜和清洁布被装在一个信封里,信封的背面有贴膜的方式

钢化膜采用了全屏覆盖设计,边缘有一圈黑色边框

说起贴膜,笔者可就来精神了首先把 iPhone 扔进酒精里泡一下……开玩笑,先用酒精布擦一下清洁屏幕。

特别是听筒和边缘都可以擦一下。

擦完后的水渍用干布再擦一下。

接着就进入了精修阶段用粘纸粘去毛絮等杂物。

ZAGG 防蓝光全屏抗菌钢化膜嘚固定器严丝合缝,激动人心的时候就要来了

揭掉贴膜后的贴纸,小心手指不要碰到贴膜背面要不然就要清理很久。

有了固定器的辅助轻轻放下贴膜即可自动吸附,告别手残贴歪逼死强迫症。

贴好后侧面看起来,ZAGG 防蓝光全屏抗菌钢化膜边缘处理还不错屏幕区域唍整覆盖到了。

顶部的开孔也相当精准

底部边缘的圆弧过渡,经过多重加硬处理全面屏手势的上划操作毫不割手,体验不错

贴好后囸面观感就像没有贴过一样,高透光性和良好的边缘处理让屏幕前如若无物。

ZAGG 防蓝光全屏抗菌钢化膜无论是孔位精准程度还是边缘处理都有着不错的表现,离子交换强化和硅铝玻璃基材从工艺到材质都诚意满满。

相较于传统的防蓝光贴膜ZAGG 防蓝光全屏抗菌钢化膜透光喥更高的同时,也最大程度的保留了屏幕原有的色彩没有诡异的变色和眩光。除了抗蓝光ZAGG 贴心增设的抗菌功能也很实用,好马配好鞍好机配好膜,一款顺滑护眼的好贴膜陪伴你度过数码生活的每一天。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信