VBA代碼混淆
VBA代碼混淆示例:
源碼(支持中文):
'隨機(jī)數(shù)1到100需要多少步數(shù)?
Option Explicit
Sub 示例()
? ?With ThisWorkbook.Sheets("樣本")
? ? ? ?.Range("A:A").Clear
? ? ? ?Dim over_possible As Boolean
? ? ? ?Dim rnd_Number As Double
? ? ? ?Dim row As Integer
? ? ? ?Dim start_position As Integer
? ? ? ?Dim over_position As Integer
? ? ? ?Dim dice_all As Variant
? ? ? ?over_possible = False
? ? ? ?dice_all = Array(1, 2, 3, 4, 5, 6)
? ? ? ?row = 1
? ? ? ?start_position = 1
? ? ? ?over_position = 100
? ? ? ?Do While over_possible = False
? ? ? ? ? ?Randomize (Timer)
? ? ? ? ? ?rnd_Number = dice_all(Int(6 * Rnd))
? ? ? ? ? ?If move_possible(rnd_Number, start_position) = True Then
? ? ? ? ? ? ? ?If rnd_Number = 2 Or rnd_Number = 4 Or rnd_Number = 6 Then
? ? ? ? ? ? ? ? ? ?start_position = start_position + rnd_Number
? ? ? ? ? ? ? ?Else
? ? ? ? ? ? ? ? ? ?start_position = start_position - rnd_Number
? ? ? ? ? ? ? ?End If
? ? ? ? ? ?End If
? ? ? ? ? ?.Cells(row, 1).Value = start_position
? ? ? ? ? ?row = row + 1
? ? ? ? ? ?If start_position = over_position Then over_possible = True
? ? ? ?Loop
? ? ? ?.Cells(2, 3).Value = row
? ?End With
End Sub
Function move_possible(ByVal rnd_Number As Integer, ByVal start_position As Integer) As Boolean
? ?move_possible = True
? ?If rnd_Number = 2 Or rnd_Number = 4 Or rnd_Number = 6 Then
? ? ? ?start_position = start_position + rnd_Number
? ?Else
? ? ? ?start_position = start_position - rnd_Number
? ?End If
? ?If start_position < 1 Or start_position > 100 Then move_possible = False
End Function
深度加密以后(可運(yùn)行):
'隨機(jī)數(shù)1到100需要多少步數(shù)?
Option Explicit
Sub 示例()
With ThisWorkbook.Sheets(O1O10OO011101O1001O0O111101OO1OOO000OOOOO01O00OO0O0O01OO11OO10O1("26679|26412"))
.Range(O1O10OO011101O1001O0O111101OO1OOO000OOOOO01O00OO0O0O01OO11OO10O1("65|58|65")).Clear
Dim O110100011011010011OO1OO11OO00O01OO1001OO010O1O1O1010O1011O10OO0 As Boolean
Dim OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 As Double
Dim O1OOO1000O1011OO111O11OOO100O11O1101010OOO00100O1OOOO0O101O0OOOO As Integer
Dim O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 As Integer
Dim O111OO1010OO0O1011O011O1OO0O1O01000O101OO100111O1001101101110000 As Integer
Dim O1O101O0011O000111OOO0OO1O111OOO10O01O00O1110O11O101O100O1111110 As Variant
O110100011011010011OO1OO11OO00O01OO1001OO010O1O1O1010O1011O10OO0 = False
O1O101O0011O000111OOO0OO1O111OOO10O01O00O1110O11O101O100O1111110 = Array(1, 2, 3, 4, 5, 6)
O1OOO1000O1011OO111O11OOO100O11O1101010OOO00100O1OOOO0O101O0OOOO = 1
O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 = 1
O111OO1010OO0O1011O011O1OO0O1O01000O101OO100111O1001101101110000 = 100
Do While O110100011011010011OO1OO11OO00O01OO1001OO010O1O1O1010O1011O10OO0 = False
Randomize (Timer)
OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = O1O101O0011O000111OOO0OO1O111OOO10O01O00O1110O11O101O100O1111110(Int(6 * Rnd))
If move_possible(OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010, O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11) = True Then
If OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = 2 Or OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = 4 Or OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = 6 Then
O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 = O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 + OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010
Else
O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 = O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 - OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010
End If
End If
.Cells(O1OOO1000O1011OO111O11OOO100O11O1101010OOO00100O1OOOO0O101O0OOOO, 1).Value = O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11
O1OOO1000O1011OO111O11OOO100O11O1101010OOO00100O1OOOO0O101O0OOOO = O1OOO1000O1011OO111O11OOO100O11O1101010OOO00100O1OOOO0O101O0OOOO + 1
If O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 = O111OO1010OO0O1011O011O1OO0O1O01000O101OO100111O1001101101110000 Then O110100011011010011OO1OO11OO00O01OO1001OO010O1O1O1010O1011O10OO0 = True
Loop
.Cells(2, 3).Value = O1OOO1000O1011OO111O11OOO100O11O1101010OOO00100O1OOOO0O101O0OOOO
End With
End Sub
Function move_possible(ByVal OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 As Integer, ByVal O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 As Integer) As Boolean
move_possible = True
If OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = 2 Or OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = 4 Or OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010 = 6 Then
O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 = O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 + OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010
Else
O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 = O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 - OO0O10O11000OO1OO11O0OO0O011001O00O000OO0O11O100OO0O0O0O1100O010
End If
If O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 < 1 Or O0O01O00111OOO01100OO000101O0101O01O101OO0O1OO0O01O0000100O0OO11 > 100 Then move_possible = False
End Function
Private Function O1O10OO011101O1001O0O111101OO1OOO000OOOOO01O00OO0O0O01OO11OO10O1(ByVal OOO01OO1OO1O0000O0101O00OOOO00101O0O01110OOO0O10100O00O01O0O100O As String)
Dim O0O101O0O000O11OOO101OOO010OOO01OO10O1O110101OO000OOOOO110O010OO As String
Dim OO00O00011OO011O1010000OO101O01OO1O0100OO011OO010OO11O1OOO1O10O0 As Variant
Dim OO11100111O0000O110OOO0110OO00001O0101110001110OO0O1O110O01O0OO1 As Integer
O0O101O0O000O11OOO101OOO010OOO01OO10O1O110101OO000OOOOO110O010OO = ""
OO00O00011OO011O1010000OO101O01OO1O0100OO011OO010OO11O1OOO1O10O0 = Split(OOO01OO1OO1O0000O0101O00OOOO00101O0O01110OOO0O10100O00O01O0O100O, Chr(124))
For OO11100111O0000O110OOO0110OO00001O0101110001110OO0O1O110O01O0OO1 = LBound(OO00O00011OO011O1010000OO101O01OO1O0100OO011OO010OO11O1OOO1O10O0) To UBound(OO00O00011OO011O1010000OO101O01OO1O0100OO011OO010OO11O1OOO1O10O0)
O0O101O0O000O11OOO101OOO010OOO01OO10O1O110101OO000OOOOO110O010OO = O0O101O0O000O11OOO101OOO010OOO01OO10O1O110101OO000OOOOO110O010OO & ChrW(OO00O00011OO011O1010000OO101O01OO1O0100OO011OO010OO11O1OOO1O10O0(OO11100111O0000O110OOO0110OO00001O0101110001110OO0O1O110O01O0OO1))
Next
O1O10OO011101O1001O0O111101OO1OOO000OOOOO01O00OO0O0O01OO11OO10O1 = O0O101O0O000O11OOO101OOO010OOO01OO10O1O110101OO000OOOOO110O010OO
End Function
VBA代碼混淆工具:
代碼粘貼以后,點(diǎn)擊 "普通加密"或者 ”深度加密“ 即可。

使用說明
1.自定義混淆的函數(shù)、過程名、錯(cuò)誤處理斷點(diǎn)、或工具未能檢測到的變量
2.深度加密絕對(duì)可以運(yùn)行
3.變量聲明的注意事項(xiàng):
1)所有變量使用前必須聲明,包含 For 語句中用到的變量
2)變量的類型必須指定,類型未定的聲明為 Variant
3)不能在一行代碼中聲明多個(gè)變量,不允許如下:
? 例1:Dim a,b,c As String
? 例2:Dim a As String, b as String, c as String
4)常量,變量必須聲明作用域,即用關(guān)鍵詞 Public, Private 或 Dim 聲明,不允許如下:
? 例3:Const a = 20
5)暫不支持字符串類型的常量,請(qǐng)用變量取代
6)注意關(guān)鍵字的大小寫,例如不要把 Dim 寫成 dim
7)代碼中不要包含多余的空格、制表符,尤其是在變量之間
8)注意代碼行的單引號(hào),有時(shí)會(huì)被解析為注解??捎?Chr(39) 替換
9)函數(shù)、過程名在不指定的情況下默認(rèn)不混淆
4.V100版本不支持中文,Ver101支持中文