美文网首页Lua
GameGuardian Lua base64加密

GameGuardian Lua base64加密

作者: binx6 | 来源:发表于2020-03-24 19:29 被阅读0次

    利用GG进行base64加密,不喜勿喷,友情提示:不能直接使用

    ----------------------------------------打上花火----------------------------------------


    1.首先我们需要简单科普一下base64是什么:

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。

    Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

    Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。

    【中文名】 基于64个可打印字符来表示二进制数据 外文名 base64 属    性 编码方式 应    用 用于传输8Bit字节代码 定    义 8Bit字节代码的编码方式之一 可用于 在HTTP环境下传递较长的标识信息 特    性 Base64编码具有不可读性

    标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。

    为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

    另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

    此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

    Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。


    2.那么知道了工作原理,我们就可以开始写加密,那么加密原理又是什么呢?请看以下代码:

    local function encodeBase64(source_str)

        local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

        local s64 = ''

        local str = source_str

        while #str > 0 do

            local bytes_num = 0

            local buf = 0

            for byte_cnt=1,3 do

                buf = (buf * 256)

                if #str > 0 then

                    buf = buf + string.byte(str, 1, 1)

                    str = string.sub(str, 2)

                    bytes_num = bytes_num + 1

                end

            end

            for group_cnt=1,(bytes_num+1) do

                local b64char = math.fmod(math.floor(buf/262144), 64) + 1

                s64 = s64 .. string.sub(b64chars, b64char, b64char)

                buf = buf * 64

            end

            for fill_cnt=1,(3-bytes_num) do

                s64 = s64 .. '='

            end

        end

        return s64

    end


    3.从上面我们得到了思路,开始写支持GG执行的代码,让GG兼容这个工作:

    baseEecrypt = gg.prompt({[1]="输入代码(复制粘贴即可)"}, {  },{[1]="text"}) -- 利用prompt框来进行操作

    if baseEecrypt == nil then  -- 如果没有选择或取消选择

    gg.setVisible(true) -- 弹出界面

    os.exit() -- 结束

    end -- 到这里已经结束了,也就就不存在运行bug一说

    操作项执行效果如图1-1:

    1-1

    4.好,那么有了操作项我们就可以把base64的加密原理写入(写在操作项的后面,执行体的前面),这里不再复述


    5.接下来我们写执行体,什么是执行体呢?总体来说就是让代码运作起来的东西,也叫做工作体

    这里我们将会用到全局变量,替换,还有简单的文件写入方式

    废话不多说,看代码:

    JMDM = baseEecrypt[1] -- 设置变量

    setcodes = encodeBase64(JMDM) -- 设置执行体

    setcodes = string.gsub(setcodes, "'", "'") -- 逐字替换

    file = io.open("/storage/emulated/0/base64加密结果.txt", "w") -- 写出路径,如果有原文件将会覆盖写出

    file:write(setcodes) -- 写入文件

    xpcall(print(setcodes),error) --这里是打印出结果,方便查看,如果有错误将会抛出

    file:close() -- 结束写入

    base_src = loadfile("/storage/emulated/0/base64加密结果.txt") -- 加载

    pcall(base_src) -- 保护调用加载


    好了,该干的我们已经做完了,是不是觉得很简单?

    下面我们来开始实战测试

    例:我们输入:ABCDEFGHIJKLMNOPQRSTUVWXYZ

    加密效果如图1-2,1-3

    1-2 1-3

    总结:以上就是利用GG来进行base64加密的教程

    解码原理:其实解码原理也很简单,逆推即可,这里也不多复述

    如果小伙伴们怕被别人秒解怎么办?问题不大,你只需要按照我给出的思路将base64和RC4写在一起即可,不要忘了写密码哦,也不要随意的把密码给出去,如果有能力的可以加入XOR来进行简单的异或操作。

    Thats All.

    相关文章

      网友评论

        本文标题:GameGuardian Lua base64加密

        本文链接:https://www.haomeiwen.com/subject/xtyayhtx.html