lua 代码加密方案

本文介绍了在Lua中实现代码加密的方法,包括通过修改require实现、直接修改lua源代码以及外部修改加载器方案。具体涉及require的加载流程,如searcher_preload、searcher_Lua等,加密方案推荐使用xxtea,并在打包时加入文件签名。同时讨论了如何在源代码层面和外部修改package.searchers来实现解密加载加密文件。
摘要由CSDN通过智能技术生成

require 实现

  • require函数在实现上是依次调用package.searchers(lua51中是package.loaders)中的加载函数,成功后返回。在loadlib.c文件中有四个加载函数的实现,分别为searcher_preload, searcher_Lua, searcher_C, searcher_Croot。
  • searcher_preload是从读取LUA_REGISTRYINDEX的_PRELOAD字段,已经require过的文件会写入到该表中
  • searcher_Lua是根据文件名查找package.path中的所有路径的lua文件,存在文件则返回
  • searcher_C是搜索package.cpath中的所有路径下的库文件
  • searcher_Croot是对require(“a.b.c”)的情况,读取a库,然后查找函数名为lua_a_b_c的lua_CFunction函数
static void findloader (lua_State *L, const char *name) {
  int i;
  luaL_Buffer msg;  /* to build error message */
  luaL_buffinit(L, &msg);
  lua_getfield(L, lua_upvalueindex(1), "searchers");  /* will be at index 3 */
  if (!lua_istable(L, 3))
    luaL_error(L, LUA_QL("package.searchers") " must be a table");
  /*  iterate over available searchers to find a loader */
  for (i = 1; ; i++) {
    lua_rawgeti(L
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值