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 在线工具内转换,展示如下:
- 第一步:复制 Decryption函数的绿色部分。DZSH加密的核心代码。
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 在线工具内转换,展示如下:
- 如果输出的不是源码,就继续 复制 Decryption函数的绿色部分。进行转化。(每次解密后的核心代码是不一样)如果不是源码。就一直循环执行。
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 .....
结尾:
文中涉及到加密,解密都是 给一个思路。具体还需要自己多研究。多琢磨。
最终目的,都是是为了促进大家相互学习。不存在任何侵权行为。
请发表评论