"Pietro Gambadilegno" ha scritto nel messaggio
Post by Pietro Gambadilegnohttp://www.vb-decompiler.org/index.php?p=Products
La versione PRO, per carpire qualche "segreto" da riutilizzare, penso
vada bene.
Chissà se il codice (modificato e) ricompilato poi funziona, almeno nei
casi più semplici...
Ti dirò. ho provato la versione lite, con un prog in VB5, estremamente
semplice (è solo un test, praticamente non fa niente).
Ha ricreato l'interfaccia, più o meno, e ti dirò che non mi aspettavo
neanche quello :-).
Ma ovviamente le routine, il codice insomma, non viene decompilato,
solo disassemblato, che è una cosa ben diversa.
Per esempio, una delle routine originali è questa:
***************
Private Sub Command1_Click()
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
For D = 0 To 4
For C = 0 To 4
For B = 0 To 4
For A = 0 To 4
Debug.Print 8 * A & ", " & 8 * B & ", " & 8 * C & ", " & 8 * D
Next
Next
Next
Next
***************
Il risultato del disassembler è stato questo (posto solo l'inizio, eh):
***************
Private Function Command1__405FF0
00405FF0: push ebp
00405FF1: mov ebp, esp
00405FF3: sub esp, 0000000Ch
00405FF6: push 004011B6h ; MSVBVM50.DLL.__vbaExceptHandler
00405FFB: mov eax, fs:[00h]
00406001: push eax
00406002: mov fs:[00000000h], esp
00406009: sub esp, 00000060h
0040600C: mov eax, [ebp+08h]
0040600F: push ebx
00406010: mov ecx, eax
00406012: push esi
00406013: and al, FEh
00406015: push edi
00406016: mov var_0C, esp
00406019: and ecx, 00000001h
0040601C: mov edx, [eax]
0040601E: mov var_08, 00401110h
00406025: push eax
***************
Col compilato in native mode, che ovviamente è il default, e quindi
quello che tutti usano, non si tira fuori di più. Ricompilando in p-code,
dalla stessa sub si ottiene questo:
***************
Private Function Command1__40575C
'Data Table: 4044FC
loc_405704: LitI2_Byte 0
loc_405706: FLdRfVar var_8C
loc_405709: LitI2_Byte 4
loc_40570B: ForI2
loc_405711: LitI2_Byte 0
loc_405713: FLdRfVar var_8A
loc_405716: LitI2_Byte 4
loc_405718: ForI2
loc_40571E: LitI2_Byte 0
loc_405720: FLdRfVar var_88
loc_405723: LitI2_Byte 4
loc_405725: ForI2
loc_40572B: LitI2_Byte 0
loc_40572D: FLdRfVar var_86
loc_405730: LitI2_Byte 4
loc_405732: ForI2
loc_405738: FLdRfVar var_86
loc_40573B: NextI2 var_9C, loc_405738
loc_405740: FLdRfVar var_88
loc_405743: NextI2 var_98, loc_40572B
loc_405748: FLdRfVar var_8A
loc_40574B: NextI2 var_94, loc_40571E
loc_405750: FLdRfVar var_8C
loc_405753: NextI2 var_90, loc_405711
loc_405758: ExitProcHresult
loc_405759: LargeBos loc_405759 'Ignore this
loc_40575B: LargeBos loc_4057DF 'Ignore this
End Function
***************
Converrai che non è proprio codice ricompilabile, modificabile
e/o riutilizzabile. Credo di aver capito che nella versione Pro
questo tipo di codice venga ritradotto in VB, per quanto con delle
limitazioni... ma la realtà è che io non conosco nessun buon motivo
per compilare in p-code e nessun programmatore che lo faccia.
E, come dice anche l'help: "If a program was compiled in the native
code, restoration of the initial code from machine instructions is out of
questions."
Chiaro, no ?
Bye, G.