LUAshell脚本基本命令解密问题

本文转载自
lua、luac、luaJIT三种文件的关系
lua手游过程中有三种文件:lua、luac、luaJIT。lua是明文代码,直接用记事本就能打开;luac是lua编译后的字节码,文件头为0x1B 0x4C 0x75 0x61 0x51,lua虚拟机能够直接解析lua和luac脚本文件;而luaJIT是另一个lua的实现版本,JIT是指Just-In-Time(即时解析运行),luaJIT比lua和luac更加高效,文件头是0x1B 0x4C 0x4A。
lua脚本的保护
一般有安全意识的游戏厂商都不会直接把lua源码脚本打包到APK中发布,所以一般对lua脚本的保护有下面3种。
1.在加载lua脚本之前解密(luaL_loadbuffer)
2.将lua脚本编译成luaJIT字节码再加密打包(loadChunksFromZIP)
3.修改lua虚拟机中opcode的顺序
下面用几个实例说明如何获取lua源码。
三个游戏的lua脚本解密实例
查看lib目录下的so文件,发现libcocos2dlua.so文件,基本可以确定是lua脚本编写的了。这里有个小技巧,当有很多so文件的时候一般最大的文件是我们的目标(文件大是因为集成了lua引擎)。既然有lua引擎肯定有lua脚本了,接着找lua脚本。资源文件和lua脚本文件都是在assets目录下。发现游戏的资源文件和配置文件都是明文,这里直接修改游戏的配置文件就可以作弊(比如修改升级炮台所需的金币和钻石就可以达到快速升级炮台的目的),然后并没有发现类似lua脚本的文件。顺手解压了一下res目录下的liveupdate_precompiled.zip发现解压失败,看来是加密了(看名字就知道是更新游戏的代码)。这里说明一下,一般遇到xxxx_precompiled.zip的这种文件都是quick-cocos2d-x框架(quick简单来说就是对lua的拓展实现),在quick-cocos2d-x框架下可以用compile_scripts命令将lua文件加密打包成xxxx_precompiled.zip,游戏运行时再解密加载。这种方式打包的lua脚本一般都会被编译成luaJIT,加载的关键函数是loadChunksFromZIP。
一直向上回溯,来到下图,发现xiaoxian为密钥,XXFISH为签名。
直接分析loadChunksFromZIP函数的源码会发现调用了XXTea算法。这里本来需要配置一个cocos2d的开发环境来写解密函数,但是我偷个懒,直接用别人写好的一个小工具。
解密后的文件如下。
这几个都是更新游戏的代码,是luajit的文件,所以接下来需要反编译。IDA中查看下lua版本和luajit版本。
反编译用的是luajit-decomp,这里需要注意luajit-decomp默认的lua版本为5.1,luajit版本为2.0.2,我们需要下载对应lua和luajit的版本,编译后替换luajit-decomp下的lua51.dll、luajit.exe、jit文件夹。
这里需要下载版本为2.1.0-beta2的luajit,编译生成文件后,复制LuaJIT-2.1.0-beta2\src路径下的lua51.dll、luajit.exe文件和jit文件夹覆盖到luajit-decomp目录中。luajit-decomp用的是autolt3语言,原脚本默认是只反编译当前目录下的test.lua文件,所以需要改一下decoder.au3文件的代码。修改后的代码另存为jitdecomp.au3文件,编译后为jitdecomp.exe。并且增加了data目录,目录下有3个文件夹,luajit为待反编译的luajit文件,asm为反汇编后的中间结果,out为反编译后的结果。将解密后的文件放到luajit文件夹,运行jitdecomp.exe,反编译的结果在out目录下,结果如下。
这个反编译工具写得并不好,反编译后的文件阅读起来挺困难的,而且反编译的lua格式有问题,所以不能用lua编辑器格式化代码。
这个游戏主要是用IDA动态调试so文件,然后用IDC脚本把lua文件全部dump下来。IDA加载libcocos2dlua.so文件,定位到函数luaL_loadbuffer。
LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t size,const char *name)
所以在ARM汇编中,参数R0为lua_State指针,参数R1为脚本内容,R2为脚本大小,R3为脚本的名称,写一段IDC脚本dump数据即可。
static main()
auto code, bp_addrese,fp,strPath,strFileN
bp_addrese = 0x7573022C;
AddBpt(bp_addrese);
code = GetDebuggerEvent(WFNE_SUSP|WFNE_CONT, 15);
if ( code &= 0 )
Warning("错误代码:%d",code);
Message ("地址:%a, 事件id:%x\n", GetEventEa(), GetEventId());
strFileName = GetString(GetRegValue("R3"),-1,0);
strFileName = substr(strFileName,strrstr(strFileName,"/")+1,-1);
strPath = sprintf("c:\\lua\\%s",strFileName);
fp = fopen(strPath,"wb");
savefile(fp,0,GetRegValue("R1"),GetRegValue("R2"));
fclose(fp);
Message("保存文件成功: %s\n",strPath);
static strrstr(str,substr1)
auto i,index;
index = -1;
i = strstr(str,substr1);
if (-1 == i) return index;
str = substr(str,i+1,-1);
index = index+i+1;
通过IDC脚本获取的部分数据如下。
虽然文件的后缀名是.luac,但其实都是明文的lua脚本。
lib下存在libcocos2dlua.so,基本上确定是lua写的。在assets\HashRes目录下,存在很多被加密的文件,这里存放的是lua脚本和游戏的其他资源文件。
HashRes中的文件夹名称和子文件名组合成了一个4字节的Hash名,如下图反编译so文件后看到的寻找资源的Hash路径。
先分析图片是怎样加载的,在IDA中定位到cocos2d::Image::initWithImageData()这个方法。
比较文件头然后解密,之后判断了该图片是否压缩了,如果压缩了就解压缩,ccz和gzip是coocs2dx源码中本来就有的,lzma是梦幻后加的。
解压后先通过cocos2d::Image::detectFormat()这个方法判断是什么类型的图片,然后根据类型加载这个图片。
lua的加载比图片加载稍微复杂一点,定位到cocos2d::LuaStack::luaLoadBuffer()这个方法。这里IDA 7.0反编译出来有点问题,所以换到IDA 6.8了。
最终得到的lua资源文件为lua编译过的二进制文件,并不是lua源码,想得到源码就得反编译luac文件。但是梦幻西游修改了lua虚拟机中的opcode,所以不能直接用工具。那么怎么在IDA中寻找opcode呢?大致有以下几种方法。
1.IDA搜索opname
通过交叉引用来到这里。
off_8D281C为opname的地址,byte_874DC0为opmode的地址,进入opmode地址查看。
到这一步,已经能还原部分opcode了,因为有一些opmode是唯一的。比如SETLIST原opcode为34,opmode为0x14,找到的opmode的第8个字节也为0x14,则实际上SETLIST的opcode为8。不过opmode不唯一的太多,所以这种方法仅仅能还原下面的opcode。
2.通过luaV_execute或者symbexec中的switch循环
lua源码和IDA F5后的代码其实差别还是有的,而且源码用了大量的宏,所以源码只是用来参考、理解lua虚拟机的解析过程,在还原的过程中再打开一个没有修改opcode的libcocos2dlua.so文件,这样对比查找就方便多了。一般最大的switch循环就是。
还可以通过luaV_execute中的字符串如initial value must be a number,limit must be a number,step must be a number等定位。
实在不行就只能自己去看源码,找特征或者找结构了。比如下面这个游戏,很有可能是选择2个opcode对应1个原opcode。
最后的结果如下。
lua脚本的加密和解密(GG游戏脚本)
cocos2d luajit对Lua脚本编译加密的批处理工具
没有更多推荐了,当前位置: &
lua脚本解密
软件特点:1.在主材及设备窗口录入完物料,点汇总计算,自动生成预算文件(自动生
新浪永夜大陆辅助工具,是由全网最强的页游辅助——新浪页游助手专门针对《永夜大
新浪仙唐录辅助工具,是由全网最强的页游辅助——新浪页游助手专门针对《仙唐录》页
程序说明:一、批量服务器导入格式服务器使用人,服务器名称,服务器远程IP和端口
V13.2可以直接录入单据金额,计算单价,商品选择窗口自动排序《方可仓库管理软件
V13.2可以直接录入单据金额,计算单价,商品选择窗口自动排序《方可进销存普及版
【软件介绍】“蜂窝助手”为《变态版永恒奇迹》手游玩家打造电脑版手游最强辅助脚本,
蜂窝助手是一款在电脑上功能最强大、最受欢迎的辅助脚本工具软件。同时拥有抢
Total Control的脚本录制和编辑功能,一直都是很多技术人员的关注点,特别是 Total Co
猎鹰lol刷金币脚本辅助是一款最新专门为《英雄联盟》制作的刷金币辅助软件。通过
幻灵宝贝h5辅助是“盆友H5游戏浏览器”为H5游戏《幻灵宝贝》打造的辅助脚本工具,H5游
啪啪军团H5辅助是“盆友H5游戏浏览器”为H5游戏《啪啪军团》打造的辅助脚本工具,H5游
软件简介:迅捷pdf密码移除器是一款小巧的pdf密码移除工具。使用它,可快速解除已
今天格子啦小编为大家带来的是ipad已停用怎么解决教程,大家都知道,ipad设置密
苹果手机微信聊天记录查看器的主要功能是聊天记录解密查询(包括文字,图片,语
微信聊天记录查看器功能简介:在电脑上解密及查看手机(含所有iPhone及安卓手机
今天格子啦小编为大家带来的是iphone访问限制密码怎么破解教程,很多人手机刚
金软PDF证书解密,批量解密工具是一款由北京信久通科技有限公司独立开发的专
V13.2可以直接录入单据金额,计算单价,商品选择窗口自动排序《方可进销存精简版
V13.2可以直接录入单据金额,计算单价,商品选择窗口自动排序《方可进销存高级版
小编推荐-lua脚本解密打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
AVL移动安全团队近期发现一种会执行lua脚本的Android恶意程序,该程序会在本地代码创建Lua环境,联网下载脚本、运行,能够回调Java层代码实现私发短信、添加书签等操作,影响手机的正常体验。
Lua 是一个小巧的脚本语言。其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它作为一个强大、轻量的嵌入式脚本语言,可供任何需要 的程序使用。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。很多应用程序、游戏使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。
Android 平台直接以JNI方式调用Lua解析引擎的接口十分麻烦,但目前已有开源项目AndroLua、LuaJava对这些JNI接口进行了很好的封装。 AndroLua是一个包含了LuaJava的Android平台的Lua解析器,它提供一系列映射到Lua C实现函数的Java接口。
该类型木马往往隐藏在“午夜视频”等极具低俗诱惑的APP中,诱惑用户下载安装使用,具有大范围传播的可能。
程序运行时,会加载libMS.so,而libMS.so加载Lua脚本前,会先解密msb文件,然后还添加一个mobile库,里面注册了sendsms、addbookmark等方法,这些函数是通过回调Java代码实现。运行流程详见图1。
图1 Lua环境
So中创建Lua环境
程 序运行后,会将assets/module.zip文件拷贝到”/script/module/”目录下,并执行解压缩操作。之后会创建Lua接口指针, 加载Lua通用扩展库(package、table、io、os、string、math、debug、md5、json、socket、mime、 mobile、tea)。而mobile库会注册sendsms、addbookmark、getactiveapntype、messagebox、 querymessageboxvalue、cleansmsreceiver、popsmsreceiver等方法。
图3 要加载的lualibs
图 4 mobile库所声明注册的方法
解密运行smtm.msb脚本,获取相关配置信息
将assets/smtm.msb文件拷贝到”/script/cache/”目录下,解密获取一个Lua脚本,执行后返回smtmconfig和uid,并添加到一Vector容器中。从该容器中读出smtmconfig字段所对应的数据,解析获取相关配置。
图5 smtm.msb文件所对应的Lua脚本
登录远程服务器,更新配置信息、执行相应操作
运行LoadingActivity这个主Activity,联网smtmLoginUrl上传用户手机固件信息,解析返回值,并执行获取的msb脚本。其中smtmReg所对应的数据为发送注册短信的号码、smtmScan存放要拦截来信号码。
图6 解密运行smtmurl.msb,返回联网上传参数
图7 执行获取的msb脚本
屏蔽来自指定号码的短信
监听来信,屏蔽来自指定号码的短信,影响正常短信的接收,可能会导致用户资金损失。
图 8解密smtmScan对应的键值,与来信号码进行比对
图9屏蔽短信
后门程序,私自发送短信、添加书签等
该 程序在so中搭建好了Lua环境,且在运行过程中会下载加密的Lua脚本即msb文件并执行。而mobile库所对应的函数中,注册了sendsms、 addbookmark、getactiveapntype、messagebox、querymessageboxvalue、 cleansmsreceiver、popsmsreceiver等方法。当联网下载的脚本会调用mobile.sendsms或 mobile.addbookmark方法时,会回调java层的相关代码执行发送短信、添加书签等操作:
图10 回调Java层代码发送短信
图 11添加书签主题 : luac的脚本解密谁会
级别: 新手上路
可可豆: 11 CB
威望: 11 点
在线时间: 0(时)
发自: Web Page
来源于&&分类
luac的脚本解密谁会&&&
用cmd调用luac加密了一个lua脚本,不知道怎么解密,求大神教
级别: 新手上路
可可豆: 11 CB
威望: 11 点
在线时间: 0(时)
发自: Web Page
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版被加密了的lua脚本如何解密? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。1被浏览458分享邀请回答暂时还没有回答,开始写第一个回答

我要回帖

更多关于 shell脚本编程100例 的文章

 

随机推荐