lua脚本加密与解密、luaR、ssulua、DZSH算法

lua脚本加密与解密。包括:luaR、ssulua、DZSH算法


前言:

在GG修改器,除了修改数据,精华就应该算是运行lua脚本了。

但是通常的lua脚本的编写者,都会把自己的脚本进行加密。

加密这种事情,交给软件就可以了,最没有成就感,还是解密让人会有阵阵快感。

这篇文章就简单来记录一下,自己遇到 lua脚本DZSH加密算法的解密过程。

推荐GG修改器与lua脚本学习地方:B站,自己搜索视频学习。

一、lua脚本加密

通常lua脚本,都会有3种加密方式,luaR、ssulua、DZSH算法加密。

加密过程,基本都是软件加密,这里就不多说了。自己百度,下载工具加密即可。

二、lua脚本解密

我通常碰到的lua加密脚本基本都是:luaR、ssulua、DZSH算法加密。其中:

  • luaR 解密:网上有很多,用java 即可就行解密。这里不多做陈述。百度即可解决。有时间后续会进行详细补充。
  • ssulua解密:ssulua加密也是相当简单。网上有很多解密的APP,下载,即可搞定。难度也不高。
  • DZSH算法解密:这里主要说一下DZSH算法加密的lua文件,因为这种解密方法,在网上并不容易找到。还需要自己多研究。

三、lua脚本DZSH算法的认识

要进行 lua脚本DZSH算法的解密,那就得先了解,DZSH 加密过的lua脚本长什么样?找到标识码,这样才能对症下药。

如果你打开,lua脚本文件,长以下这样,那基本就是 被 DZSH 加密过。我就不上图了,直接贴代码。

function Decryption(jian,Text)

  return (Text:gsub(\'..\', function (jian)

    return string.char((tonumber(jian,16))%256)

  end))

end

--  Decryption()函数中 667开头我做了省略,大概有上万个。特别长。
local jian = Decryption(\'DZSH\',\'667...............................n\')

local dzsh= load(jian)

load(dzsh)

这里有个番外,我简单说一下。避免大家踩坑。

网上,大多数教程,都是让改,最后的两个 dzsh ,改成大写。然后把最后一行的 load,改成 print 来运行脚本。就能解密。

反正我试了,是不行,因为 DZSH算法 它会加密很多次。一次的估计很少。

四、解密开始(双端):

lua脚本 DZSH算法 的解密。思路其实很简单,在手机,电脑都可进行。这篇文章都会简单进行说明。

1、手机端

    • 手机端解密脚本,需要 MT管理器。这个就比较坑。听说会员很贵。或许有人能用的上。附上:每款MT管理器下载地址

    • 别人给我推荐了 另一款 安卓逆向神器NP管理器。我用了其实也并不好用。停卡的。

MT管理器破解-步骤开始:
    • 第一步:用MT管理器,先在要操作的脚本的目录新建一个文件,有没有后缀不重要。先放着。
    • 第二步:打开加密的脚本。复制 Decryption函数的绿色部分。这一堆绿色代码,就是DZSH加密的核心部分,其他的都是混淆视听的。如下:
      • 绿色标注部分:local jian = Decryption(\'DZSH\',\'667...............................n\')
    • 第三步:用MT管理器复制的绿色部分特大,大概有几万个字节。复制不上,记得打开自动换行。
    • 第四步:用MT管理器,打开 第一步 新建的文件,打开方式 十六进制。
    • 第五步:直接粘贴进去。粘贴方式 粘贴从 十六进制。粘贴进去,你就会发现右边,就已经有转换后的代码了。如果加密一次的脚本,就已经能看见源码了。点击保存。
    • 第六步:如果第五步之后,打开新建的文件,显示的还是加密代码,说明脚本是被多次加密。继续像第二步一样,复制第五步转换完成的代码中的 Decryption函数的绿色部分。在进行第四步,第五步。
    • 第七步:这个时候你以为 Decryption函数的绿色部分核心代码一样,其实是不一样的。继续执行四五次,源码就出来了。

2、电脑端

理解了手机端方法,基本就知道,原理和大概思路就是 HEX和字符串互相转换,因此在电脑上操作,找个在线工具即可。(这里随便贴一个。失效了自己去百度)HEX和字符串互相转换在线工具

这里就不贴图了。只是简单模拟演示一下。

步骤:
    • 第一步:复制 Decryption函数的绿色部分。DZSH加密的核心代码。
      • 把DZSH加密的核心代码,复制到 模拟 HEX 在线工具内转换,展示如下:
6674A683D322043683D312043613D342043643D382043623D31362050533D32363231343420413D3332206D723D323632......n
      • 输出:
function Decryption(jian,Text)

  return (Text:gsub(\'..\', function (jian)

    return string.char((tonumber(jian,16))%256)

  end))

end

--  Decryption()函数中,每次解密转码后,核心代码是不一样的。这次是 \'F6E20.....n\'
local jian = Decryption(\'DZSH\',\'F6E20.....n\')

local dzsh= load(jian)

load(dzsh)
    • 如果输出的不是源码,就继续 复制 Decryption函数的绿色部分。进行转化。(每次解密后的核心代码是不一样)如果不是源码。就一直循环执行。
      • 把DZSH加密的核心代码,复制到 模拟 HEX 在线工具内转换,展示如下:
F6E202043643D382043623D31362050533D32363231343420413D3332206D723D323632......n
      • 输出:
--  执行 4 5 次后,源码基本就出来了。不出来就继续循环执行
function Main()
  menu1 = gg.choice({
  "1.功能一",
  "2.功能二",
  "3.功能三",
  "4.功能四",
  "5.功能五",
  "退出"
  }, nil, "不言谢独家制作")
  if menu1 == 1 then byx1() end
  if menu1 == 2 then byx2() end
  if menu1 == 3 then byx3() end
  if menu1 == 4 then byx4() end
  if menu1 == 5 then byx5() end
  if menu1 == 6 then Exit() end
  XGCK = -1
end

function byx1()
  gg.clearResults()
  gg.setRanges(32)
  gg.searchNumber("特征码", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
  gg.searchNumber("改善", gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1)
  gg.getResults(100)
  gg.editAll("修改的数值", gg.TYPE_DWORD)
  gg.toast("完成后的提示")
  gg.clearResults()
end
.....

结尾:

文中涉及到加密,解密都是 给一个思路。具体还需要自己多研究。多琢磨。

最终目的,都是是为了促进大家相互学习。不存在任何侵权行为。