大家好,我是公众号3分钟学堂的郭立员~
前言
为了增加脚本被破解的难度,今天来说一个向脚本里面注入大量“无用”函数。
举个例子:
原始代码:
Dim str = "abc"
TracePrint str
增加“无用”代码后:
//脚本开始。。
TracePrint c5ONCyRUbK4DzFil()
Function c5ONCyRUbK4DzFil()
c5ONCyRUbK4DzFil=d6Ib2yKt6IjlDezZ()
End Function
Function d6Ib2yKt6IjlDezZ()
d6Ib2yKt6IjlDezZ=TKIc8lQgY6br6s5Q()
End Function
Function TKIc8lQgY6br6s5Q()
TKIc8lQgY6br6s5Q=d2QmN6hyPzkrc6dW()
End Function
Function d2QmN6hyPzkrc6dW()
d2QmN6hyPzkrc6dW=HUrtqF9l0ezbS9hW()
End Function
Function HUrtqF9l0ezbS9hW()
HUrtqF9l0ezbS9hW=sgAunJkOSVzdWzMa()
End Function
Function sgAunJkOSVzdWzMa()
sgAunJkOSVzdWzMa=FgJ71yHnZDSBPXR7()
End Function
Function FgJ71yHnZDSBPXR7()
FgJ71yHnZDSBPXR7=Od27Q83eZUqdmkZ4()
End Function
Function Od27Q83eZUqdmkZ4()
Od27Q83eZUqdmkZ4=rzjrz2vJbJ1UIVRP()
End Function
Function rzjrz2vJbJ1UIVRP()
rzjrz2vJbJ1UIVRP="abc"
End Function
从功能上来说都是输出一个"abc"的变量。
一、这种混淆有什么用
一般脚本被破解后,别人会直接删除掉脚本激活码部分,从而使脚本不需要进行卡密验证就能正常使用。
如果激活码部分的代码中有涉及到变量的,使用上混淆函数替换了,使得原本1行或者几行的代码,增加到几百行几千行,这样破解时删除的难度增加,同时把脚本内的其他变量也使用一些混淆函数,再把所有混淆函数穿插在正常脚本中,基本就很难删除了。
这样有人想破解,基本就是牵一发而动全身。
二、混淆函数的编写逻辑
先看两个混淆函数:
Function c5ONCyRUbK4DzFil()
c5ONCyRUbK4DzFil=d6Ib2yKt6IjlDezZ()
End Function
Function d6Ib2yKt6IjlDezZ()
d6Ib2yKt6IjlDezZ=TKIc8lQgY6br6s5Q()
End Function
它们之间的关系是一个函数的返回值是调用另外一个函数,如果看多个函数就会发现它们是“链条”关系,一环套一环的进行数据传递。
并且这样编写混淆函数,编写的数量无上限。
三、脚本代码:
①、把命令都当做字符串处理,然后写入到文本中。
②、函数名是一个16位的随机数字和字母,要求首位不能是数字。
③、一个函数是上一个函数的返回值。
其他细节就不说了,直接上代码:
Dim path = "/sdcard/pictures/code.txt"
file.Write(path,"//脚本开始。。\n")
Dim Str = "abc"
Dim n = 10
For i = 1 To n
Dim Rnd_Func_Name = Rnd_Func_Name_Next
Dim Rnd_Func_Name_next = RndStr()
If i = 1 Then
file.Append path, "TracePrint " & Rnd_Func_Name_next & "()\n"
ElseIf i = n Then
If IsNumeric(str) Then
file.Append path, "Function " & Rnd_Func_Name & "()\n" & Rnd_Func_Name & "=" & Str & "\nEnd Function\n"
Else
file.Append path, "Function " & Rnd_Func_Name & "()\n" & Rnd_Func_Name & "=""" & Str & """\nEnd Function\n"
End If
Else
file.Append path, "Function " & Rnd_Func_Name & "()\n" & Rnd_Func_Name & "=" & Rnd_Func_Name_next & "()\nEnd Function\n"
End If
Next
Function RndStr()
Dim words = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim num = "0123456789"
Dim Rndword,line
For i = 1 To 16
If i = 1 Then
Rndword = Mid(words, Int(52 * Rnd() 1), 1)
Else
Rndword = mid(words&num,Int(62*rnd() 1),1)
End If
line = line&Rndword
Next
RndStr = line
End Function
四、补充
①、顺序生成混淆函数后,需要把函数随机打乱穿插在正常代码里面。
②、混淆函数里面最好加上停止脚本命令,这样当任意一个混淆函数丢失后,都会让脚本自动停止。
③、最重要一点在做混淆代码前一定要最好脚本备份,因为混淆后点在加新功能就比较困难了。
正文完
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved