各位高手,下面是一个用VBDecompiler9.8破解的VB程序,但里面还带有寄存器的信息,很难看得懂。请问有高手们帮忙指导一下这个加密函数的实现原理么,谢谢!
Public Sub Proc_1_0_1137D7D0
call __vbaAptOffset(var_11008928, edi, esi, ebx)
var_20 = arg_8
ReDim var_2C(edi To 4096)
var_9C = Len(var_20)
If 00000001h <= 0 Then
var_44 = Mid$(var_20, 1, 1)
var_60 = Asc(var_44)
var_28 = Hex$(Asc(var_44))
If Len(var_28) = 4 Then
If var_2C Then
If var_2C <> 1 Then GoTo loc_1137D92A
esi = esi - eax+00000014h
If esi < 0 Then GoTo loc_1137D932
var_eax = Err.Raise
GoTo loc_1137D932
loc_1137D92A:
loc_1137D92A:
loc_1137D932:
call __vbaUI1Str("&H" & Mid$(var_28, 1, 2))
esi-eax+00000014h = esi-eax+00000014h + 00000001h
If var_2C Then
If var_2C <> 1 Then GoTo loc_1137D9BE
esi-eax+00000014h = esi-eax+00000014h - eax+00000014h
If esi-eax+00000014h < 0 Then GoTo loc_1137D9C6
var_eax = Err.Raise
GoTo loc_1137D9C6
loc_1137D9BE:
loc_1137D9BE:
loc_1137D9C6:
call __vbaUI1Str("&H" & Mid$(var_28, 3, 2))
GoTo loc_1137DA78
End If
If var_2C Then
If var_2C <> 1 Then GoTo loc_1137DA41
esi-eax+00000014h = esi-eax+00000014h - eax+00000014h
If esi-eax+00000014h < 0 Then GoTo loc_1137DA49
var_eax = Err.Raise
GoTo loc_1137DA49
loc_1137DA41:
loc_1137DA41:
loc_1137DA49:
call __vbaUI1Str("&H" & var_28)
loc_1137DA78:
esi-eax+00000014h = esi-eax+00000014h + 00000001h
00000001h = 00000001h + var_18
GoTo loc_1137D87A
End If
var_eax = call Proc_1_1_1137DF70(, , )
esi-eax+00000014h = esi-eax+00000014h - 00000001h
var_A4 = esi-eax+00000014h
If eax <= 0 Then
If var_2C Then
If var_2C <> 1 Then GoTo loc_1137DAE1
eax = eax - ecx+00000014h
If eax < 0 Then GoTo loc_1137DAEC
var_eax = Err.Raise
GoTo loc_1137DAE9
loc_1137DAE1:
loc_1137DAE1:
loc_1137DAE9:
loc_1137DAEC:
var_94 = eax+edi
If eax+edi >= 256 Then
var_eax = Err.Raise
End If
If var_2C Then
If var_2C <> 1 Then GoTo loc_1137DB39
var_18 = var_18 - ecx+00000014h
If var_18 >= 0 Then
var_eax = Err.Raise
End If
GoTo loc_1137DB42
loc_1137DB39:
loc_1137DB39:
loc_1137DB42:
00000001h = 00000001h + var_18
GoTo loc_1137DAB6
End If
esi-eax+00000014h = esi-eax+00000014h - 00000001h
ReDim var_34(edi To esi-eax+00000014h)
esi-eax+00000014h = esi-eax+00000014h - 00000001h
var_18 = esi-eax+00000014h
If esi-eax+00000014h >= 0 Then
If var_2C Then
If var_2C <> 1 Then GoTo loc_1137DBDD
esi-eax+00000014h = esi-eax+00000014h - ecx+00000014h
If esi-eax+00000014h >= 0 Then
var_eax = Err.Raise
End If
var_C4 = esi-eax+00000014h
GoTo loc_1137DBE9
loc_1137DBDD:
loc_1137DBDD:
var_C4 = Err.Raise
loc_1137DBE9:
If var_34 Then
If var_34 <> 1 Then GoTo loc_1137DC25
esi-eax+00000014h = esi-eax+00000014h - var_18
esi-eax+00000014h = esi-eax+00000014h - 00000001h
esi-eax+00000014h = esi-eax+00000014h - ecx+00000014h
If esi-eax+00000014h >= 0 Then
var_eax = Err.Raise
End If
GoTo loc_1137DC2E
loc_1137DC25:
loc_1137DC25:
loc_1137DC2E:
True = True + var_18
var_18 = True
GoTo loc_1137DBAA
End If
esi-eax+00000014h = esi-eax+00000014h - 00000001h
var_B4 = esi-eax+00000014h
If esi <= 0 Then
esi = esi * 2
If Not Sign(-2147483137 - 0) Then
eax = -2147483137 - 1
eax = -512 + 1
End If
-512 + 1 = -512 + 1 + 00000001h
var_44 = Mid$("72281E66C6F7997B32EA54CA0668337C5F6756EE9F18399413D3F8D40322F273C83E97EF58A56F77E00589B0D95CF5311F62B1EB7420A1F32ADBF1812649BC360BCFB9A7A6527021B5F678A0C34A11247FC50F1CF94EC44F932984BAD50EF4E99AB4408F9C53C90A1486C2A9AE79ADD1DC5A1B8217ECD82EBB6A428DFBB3BE35E3AAB8AB23E592AF5D6E27CD7D34F0BF9BE66D2CAC450109107ADF076B8748754D85E71D1A592BB212983D1938B70C8B5146DE25CCA36383FA3A0D3B47D7C060550271D680FD6C8E8AC19E9188502DA43C16E45B375E3F08D2437EFE41E14B6544E8DDDA15FCB6A82F9D0464956976BDCB574CE2CE969030008CD0C761EDA2FF", -512 + 1, 2)
var_48 = "&H" & var_44
call __vbaUI1Str(var_48)
var_30 = __vbaUI1Str(var_48)
If var_34 Then
If var_34 <> 1 Then GoTo loc_1137DD1E
esi*2 = esi*2 - ecx+00000014h
If esi*2 >= 0 Then
var_eax = Err.Raise
End If
GoTo loc_1137DD29
loc_1137DD1E:
loc_1137DD1E:
loc_1137DD29:
If var_34 Then
If var_34 <> 1 Then GoTo loc_1137DD4A
var_18 = var_18 - ecx+00000014h
If var_18 < 0 Then GoTo loc_1137DD55
var_eax = Err.Raise
GoTo loc_1137DD52
loc_1137DD4A:
loc_1137DD4A:
loc_1137DD52:
loc_1137DD55:
If var_34 Then
If var_34 <> 1 Then GoTo loc_1137DD8C
var_18 = var_18 - ecx+00000014h
If var_18 >= 0 Then
var_eax = Err.Raise
End If
GoTo loc_1137DD95
loc_1137DD8C:
loc_1137DD8C:
loc_1137DD95:
If edx+eax < 16 Then
If var_40 Then
If var_40 <> 1 Then GoTo loc_1137DDD6
var_18 = var_18 - ecx+00000014h
If var_18 >= 0 Then
var_eax = Err.Raise
End If
GoTo loc_1137DDDF
loc_1137DDD6:
loc_1137DDD6:
loc_1137DDDF:
ecx+0000000Ch = ecx+0000000Ch + Err.Raise
var_70 = ecx+0000000Ch
var_3C = var_3C & var_1100A724 & Hex$(ecx+0000000Ch)
GoTo loc_1137DECB
End If
If var_40 Then
If var_40 <> 1 Then GoTo loc_1137DE7A
var_18 = var_18 - ecx+00000014h
If var_18 >= 0 Then
var_eax = Err.Raise
End If
GoTo loc_1137DE83
loc_1137DE7A:
loc_1137DE7A:
loc_1137DE83:
ecx+0000000Ch = ecx+0000000Ch + Err.Raise
var_70 = ecx+0000000Ch
var_3C = var_3C & Hex$(ecx+0000000Ch)
loc_1137DECB:
00000001h = 00000001h + var_18
GoTo loc_1137DC6F
End If
GoTo loc_1137DF2B
If var_4 Then
End If
Exit Sub
loc_1137DF2B:
Exit Sub
End Sub