Windows下为Lua脚本进行加密处理
缘由#
想对Lua脚本进行安全性处理,可惜一直没有想到很好的解决方案,考虑过用原生Lua将脚本编译成二进制代码,也考虑过用zlib将文件进行加密压缩处理,但是感觉都不是最佳方案,今天忽然想到有个东西叫LuaJit不错,网上搜索了一把,感觉这东西比上面两种方案来的好,就赶紧下载下来尝试使用了一把。
环境#
Visual Studio 2012
LuaJit2.0.1 我是直接从cocos2d-x2.2.5版本中复制出来的
使用步骤#
1.使用VS的控制台工具,进入到luajit的src目录,执行msvcbuild.bat脚本,编译稍等片刻,会在当前目录下产生lua51.dll lua51.lib luajit.exe几个文件。其中luajit.exe用来对Lua脚本进行加密处理的程序,lua51.dll,lua51.lib跟原先的lua动态库功能一致
2.复制lua51.dll lua51.lib luajit.exe以及lua.h, lauxlib.h, luaconf.h, luajit.h, lualib.h以及jit文件夹的内容到需要使用的文件夹内
3.编写一个测试脚本script.lua
print "hello world"
print (package.path)
function foo()
end;
function callbar()
print "call bar"
for i=0,30000000 do
bar()
end
end
4.利用luajit.exe对script.lua进行加密
luajit -b script.lua script_out.lua
执行成功后,script_out.lua就是加密以后的脚本文件了。
5.新建一个Demo控制台程序,并设置其包含的头文件为lua.hpp,链接库为lua51.lib
#include <windows.h> // 我是用了GetTickCount()函数
#include "lua.hpp"
#pragma comment(lib, "lua51.lib")
6.编写测试用例,具体就直接贴代码了
static int l_bar(lua_State *L) {
return 0;
}
int demo1()
{
int status;
lua_State * L;
L = luaL_newstate();
luaL_openlibs(L);
LuaFunctionTable::registerFunctions(L);
status = luaL_loadfile(L, "script_out.lua");
if (status)
{
printf("could not open lua file : %s\n", lua_tostring(L, -1));
return -1;
}
/* do the file */
printf("run script\n");
int result = lua_pcall(L, 0, 0, 0);
if (result) {
printf("failed to run script : %s\n", lua_tostring(L, -1));
return -1;
}
printf("run foo\n");
DWORD tm1 = GetTickCount();
for (int i = 0; i < 30000000; ++i) {
lua_getglobal(L, "foo");
result = lua_pcall(L, 0, 0, 0);
if (result) {
printf("failed to run script : %s\n", lua_tostring(L, -1));
return -1;
}
}
printf("run time is %d-%d\n",tm1, GetTickCount()-tm1);
/* call from lua by c */
lua_pushcfunction(L, l_bar);
lua_setglobal(L, "bar");
if (status) {
printf("register function failed : %s\n", lua_tostring(L, -1));
return -1;
}
lua_getglobal(L, "callbar");
tm1 = GetTickCount();
status = lua_pcall(L, 0, 0, 0);
if (status) {
printf("callbar failed: %s\n", lua_tostring(L, -1));
return -1;
}
printf("run time is %d-%d\n", tm1, GetTickCount() - tm1);
lua_close(L);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
return demo1();
}
你可以看到,脚本已经被顺利执行,并显示各种结果。
Windows下为Lua脚本进行加密处理的更多相关文章
- 在windows下编写shell脚本
注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...
- 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式
注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...
- 在windows下编辑shell脚本注意点
编辑脚本是直接在windows下写的,并没有使用特定的编辑器或者其他工具,所以很有可能出现一些莫名其妙的异常,这些错误是我们眼睛看不到的,遇到这个情况,例如如下异常或者提示语法错误 Java代码 ...
- Learning Lua Programming (3) iMac下搭建Lua脚本最好的编码环境(代码补全,编译运行)
这篇文章参考自http://blog.sina.com.cn/s/blog_991afe570101rdgf.html,十分感谢原作者的伟大创造,本人亲测可行. 这篇文章记录一下如何在MAC系统环境下 ...
- sublime text 2中Windows下编写的脚本在Linux平台上运行遇到字符问题
今天在windows下的sublime text 2下写了个脚本,上传到ubuntu服务器中执行后提示: -bash: /usr/bin/python: /usr/bin/python^M: bad ...
- windows下编写shell脚本执行错误
在 windows 下,换行符是 \r\n,在linux下,换行符是 \n.如果你在IDEA里写sh脚本,可以手动设置脚本的换行符为 \n,如果你用notepad++写脚本,可以显示所有字符,以便明确 ...
- <转>windows下编译lua源码
因为之前一直使用 lua for windows 来搭建lua的使用环境,但是最新的 lua for windows 还没有lua5.2,我又想用这个版本的lua,所以被逼无奈只能自己编一下lua源码 ...
- windows下写的脚本,在linux下执行失败
Windows中的换行符为CRLF, 即正则表达式的rn(ASCII码为13和10), 而Unix(或Linux)换行符为LF, 即正则表达式的n. 在Windows和Linux下协同工作的时候, 往 ...
- windows下通过批处理脚本启动redis
三种启动方式的特点: 第一种方式 :根目录之命令窗口启动 特点:每次启动都要进入到redis的根目录,比较繁琐,并且占用一个窗口 第二种方式:bat脚本便捷启动 特点:可放在桌面便捷启动,占用窗口 第 ...
随机推荐
- Kubernetes volumes简介
容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题.一.容器crash后,kubelet会重启该容器,但这些文件会丢失掉.二.pod中的多个容器经常需要共享文件.因此,Kube ...
- CSS中的定位与浮动
CSS中的定位与浮动 本文主要讲述CSS中的三种定位样式static.relative和absolute的区别以及浮动元素的特征. 定位样式 CSS中定位样式position的取值有三个,默认值:st ...
- bat脚本设置系统环境变量即时生效
关于bat的资料多但零碎,记录一下. 1.设置环境变量即时生效:通过重启explorer来实现即时生效(亲测有效) @echo off set curPath=%cd% wmic ENVIRONMEN ...
- Cookies的实际存储位置
检查下注册表中: HKEY_CRURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVESION\EXPLORER\USER SHELL FOLDERSCoo ...
- Django框架之正则表达式URL误区
问题:我学习的视频大概是2015年录的,里面用的Django版本比较老关于正则表达式URL这一块都是用的url("url(r'^admin/', admin.site.urls)," ...
- Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测
0.引言 利用机器学习的方法训练微笑检测模型,给一张人脸照片,判断是否微笑: 使用的数据集中69张没笑脸,65张有笑脸,训练结果识别精度在95%附近: 效果: 图1 示例效果 工程利用pytho ...
- 把一个DIV放到另一个div右下角
父对象相对定位,子对象以父对象为参考点绝对定位:外层的div设置为相对定位,内层的div设置为绝对定位: <div id="box1"> <div id=&quo ...
- WinForm中,设置不显示窗口的标题栏
1:ControlBox设置False,然后标题为""的时候标题就不显示了2:把窗体设置为无边的窗体 FormBoderStyle 设为 None (在Mdi中,关闭按钮会还在) ...
- linux 动态库的符号冲突问题
最近,给同事定位了一个符号表的冲突问题,简单记录一下. A代码作为静态链接库,被包含进了B代码,然后编译成了动态链接库,B.so A代码同时作为静态链接库,被编译进入了main的主代码. main函数 ...
- javascript属性之get/set
var o = { get x(){ return 7; }, set x(val){ console.info("不能设置x的值"); } } o.x //7 读取x值的时候,会 ...