[按键精灵]代码混淆——生成一堆“无用”的函数代码

大家好,我是公众号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

四、补充

①、顺序生成混淆函数后,需要把函数随机打乱穿插在正常代码里面。

②、混淆函数里面最好加上停止脚本命令,这样当任意一个混淆函数丢失后,都会让脚本自动停止。

③、最重要一点在做混淆代码前一定要最好脚本备份,因为混淆后点在加新功能就比较困难了。

正文完