Есть база, есть клиентская часть. В базе ключевые поля пошифрованы и выглядят отак. Естественно в клиентской части они вполне читабельны. При произвольной замене символов в этих полях клиент выдает ошибку. Можно ли как-то выяснить каким образом шифруются эти строки, расшифровать их, заменить на нужные мне значения и зашифровать обратно, чтобы програма их приняла? Вот как выдал процедуру дешифровки VB Decompiler Код: Public Sub Proc_105_0_559AE0 loc_00559B09: var_14 = &H405B08 loc_00559B10: var_10 = 0 loc_00559B17: var_C = 0 loc_00559B1E: var_4 = 1 loc_00559B25: var_4 = 2 loc_00559B2E: On Error Resume Next loc_00559B34: var_4 = 3 loc_00559B55: var_74 = 0042BB14h loc_00559B98: Proc_00479FF0("t8", var_84, "f6") loc_00559BD7: var_54 = StrConv(var_84, 128, 0) loc_00559C0D: var_4 = 4 loc_00559C2E: var_74 = 0042BB14h loc_00559C71: Proc_00479FF0(00447050h, "t2", var_84) loc_00559C95: var_58 = var_84 loc_00559CBE: var_4 = 5 loc_00559CDF: var_74 = 0042BB14h loc_00559CFB: var_6C = 00447064h loc_00559D22: Proc_00479FF0("t2", var_84, var_6C) loc_00559D46: var_28 = var_84 loc_00559D6F: var_4 = 6 loc_00559D89: ReDim var_50(0 To 31) loc_00559D92: var_4 = 7 loc_00559D99: var_B4 = 15 loc_00559DA3: var_B0 = 1 loc_00559DAD: var_24 = 0 loc_00559DB4: GoTo loc_00559DC8 loc_00559DB6: loc_00559DB9: 0 = 0 + 1 loc_00559DC8: If 0 > 0 Then GoTo loc_00559EC4 loc_00559DD7: var_4 = 8 loc_00559DF3: 0 = 0 - edx+14h If Then GoTo loc_00559E16 loc_00559E0A: var_D8 = 0 loc_00559E14: GoTo loc_00559E22 loc_00559E16: Err.Raise loc_00559E22: loc_00559E28: var_DC = var_AC loc_00559E2E: GoTo loc_00559E3C loc_00559E30: Err.Raise loc_00559E51: 0 = 0 - edx+14h If Then GoTo loc_00559E74 loc_00559E68: var_E0 = 0 loc_00559E72: GoTo loc_00559E80 loc_00559E74: Err.Raise loc_00559E80: loc_00559E86: var_E4 = var_A8 loc_00559E8C: GoTo loc_00559E9A loc_00559E8E: Err.Raise loc_00559E9A: loc_00559EB8: var_4 = 9 loc_00559EBF: GoTo loc_00559DB6 loc_00559EC4: var_4 = 10 loc_00559ED7: Proc_0050B2B0(var_28, var_50, var_58) loc_00559EDC: var_A4 = Proc_0050B2B0(var_28, var_50, var_58) loc_00559EED: var_2C = Proc_0050B2B0(var_28, var_50, var_58) loc_00559EF3: var_4 = 11 loc_00559EFA: var_BC = 13 loc_00559F04: var_B8 = 1 loc_00559F0E: var_24 = 0 loc_00559F15: GoTo loc_00559F29 loc_00559F17: loc_00559F1A: 0 = 0 + 1 loc_00559F29: If 0 > 0 Then GoTo loc_00559FEC loc_00559F38: var_4 = 12 loc_00559F54: 0 = 0 - edx+14h If Then GoTo loc_00559F77 loc_00559F6B: var_E8 = 0 loc_00559F75: GoTo loc_00559F83 loc_00559F77: Err.Raise loc_00559F83: loc_00559F89: var_EC = var_AC loc_00559F8F: GoTo loc_00559F9D loc_00559F91: Err.Raise loc_00559F9D: If var_A8 >= 0 Then GoTo loc_00559FBB loc_00559FAF: var_F0 = 0 loc_00559FB9: GoTo loc_00559FC7 loc_00559FBB: Err.Raise loc_00559FC7: loc_00559FE0: var_4 = 13 loc_00559FE7: GoTo loc_00559F17 loc_00559FFD: call __vbaCopyBytes(0000000Eh, var_3C, var_4C, var_6C) loc_0055A00E: Proc_005097B0(__vbaCopyBytes(0000000Eh, var_3C, var_4C, var_6C), var_3C, var_4C) If word ptr var_3C <> 0 Then GoTo loc_0055A06A loc_0055A017: var_4 = 16 loc_0055A021: var_39 = var_39 + var_36 If Not Asm.b_flag Then GoTo loc_0055A12F loc_0055A02A: var_39 = var_39 + var_35 If Not Asm.b_flag Then GoTo loc_0055A12F loc_0055A033: var_39 = var_39 + var_3A If Not Asm.b_flag Then GoTo loc_0055A12F loc_0055A03C: var_39 = var_39 + var_38 If Not Asm.b_flag Then GoTo loc_0055A12F loc_0055A045: var_39 = var_39 + var_37 If Not Asm.b_flag Then GoTo loc_0055A12F If var_34 <> 0 Then GoTo loc_0055A06A loc_0055A053: var_4 = &H11 loc_0055A064: call __vbaCopyBytes(0000000Eh, var_68, var_3C) loc_0055A06A: loc_0055A06F: GoTo loc_0055A0B1 loc_0055A0B0: Exit Sub loc_0055A0B1: loc_0055A0FC: Exit Sub End Sub
evggrig, скорее второе) было бы интересно увидеть саму программу (можно в личку) если это нереально, то коды процедур: Код: Proc_00479FF0 Proc_0050B2B0 Proc_005097B0
chimatii, Proc_00479FF0 Код: Public Sub Proc_5_6_479FF0 Dim var_30 As Me Dim var_48 As Me Dim var_4C As Me loc_0047A015: var_10 = &H401548 loc_0047A04D: On Error Resume Next If arg_1C = 0 Then GoTo loc_0047A0C2 loc_0047A0A7: var_34 = "SELECT `" & arg_C & "` FROM `" & arg_10 & 4398268 If (arg_14 = 4373268) = 0 Then GoTo loc_0047A151 loc_0047A146: var_34 = "SELECT" & arg_C & "FROM" & arg_10 & "WHERE" & arg_14 loc_0047A151: loc_0047A175: var_74 = 3 loc_0047A178: var_70 = 3 loc_0047A192: deClub.var_34 = Forms loc_0047A1B9: Set var_30 = vbEmpty loc_0047A1C9: Me.Caption = var_48 loc_0047A1F3: var_6C = 2 loc_0047A213: Me.var_4C = Forms If var_48 >= 0 Then GoTo loc_0047A22F loc_0047A241: call Me.SaveProp(var_5C, var_48, 00431D60h, 00000028h, var_30, var_30, 00431BCCh, 00000054h) loc_0047A25B: var_2C = var_5C loc_0047A27A: Me.SaveProp(var_5C, var_48, 00431D60h, 00000028h, var_30, var_30, 00431BCCh, 00000054h) = Me.Width If var_30 >= 0 Then GoTo loc_0047A2B7 loc_0047A297: call Exit Sub(var_30, var_30, 00431BCCh, 00000080h, var_4C, 00431D70h, 00000034h) loc_0047A2A2: GoTo loc_0047A304 loc_0047A2A4: var_6C = 1 loc_0047A2B1: var_2C = vbNull loc_0047A2B7: call Exit Sub(0047A31Eh) loc_0047A2C2: GoTo loc_0047A304 loc_0047A303: Exit Sub loc_0047A304: End Sub Proc_0050B2B0 Код: Public Sub Proc_77_7_50B2B0 loc_0050B2D5: var_8 = &H404730 loc_0050B31B: Proc_0050B0E0(arg_C, edx, ecx) loc_0050B333: ReDim var_24(ebx To Proc_0050B0E0(arg_C, edx, ecx)) loc_0050B344: Proc_0050AD50(Me, arg_10, var_24) loc_0050B357: var_44 = Proc_0050AD50(Me, arg_10, var_24) loc_0050B35A: var_28 = vbEmpty loc_0050B364: var_38 = var_28 loc_0050B367: var_40 = &H2011 If eax < 0 Then GoTo loc_0050B391 loc_0050B385: Err.Raise loc_0050B391: shl eax, 04h loc_0050B394: GoTo loc_0050B39F loc_0050B396: Err.Raise loc_0050B39F: loc_0050B3A5: Me.GetTypeInfoCount = Me.GetTypeInfoCount + Err.Raise loc_0050B3A7: ecx = var_28 loc_0050B3AF: var_18 = 1 loc_0050B3B6: Proc_0050B0E0(arg_C, edx, ecx) = Proc_0050B0E0(arg_C, edx, ecx) - 00000001h loc_0050B3BF: var_58 = Proc_0050B0E0(arg_C, edx, ecx) If 1 > 0 Then GoTo loc_0050B495 loc_0050B3D3: Proc_0050A720(Proc_0050B0E0(arg_C, edx, ecx), var_28, var_28) loc_0050B3D8: var_4C = Proc_0050A720(Proc_0050B0E0(arg_C, edx, ecx), var_28, var_28) loc_0050B3E3: var_74 = vbEmpty loc_0050B3EB: var_44 = var_74 loc_0050B3F6: var_6C = vbEmpty loc_0050B400: Proc_0050AD50(var_6C, var_6C, arg_10) loc_0050B405: var_48 = Proc_0050AD50(var_6C, var_6C, arg_10) loc_0050B410: var_28 = vbEmpty loc_0050B417: call Erase(ebx, var_6C, var_6C, arg_10, var_28, var_28, Proc_0050B0E0(arg_C, edx, ecx), Proc_0050B0E0(arg_C, edx, ecx), Proc_0050B0E0(arg_C, edx, ecx)) loc_0050B422: call Erase(ebx, var_74) loc_0050B42B: var_40 = &H2011 loc_0050B432: var_38 = var_28 loc_0050B44B: 1 = 1 - Me.%x1 = GetIDsOfNames(%x2) 'Ignore this If 1 < 0 Then GoTo loc_0050B45A loc_0050B451: Err.Raise loc_0050B45A: shl ebx, 04h loc_0050B461: GoTo loc_0050B46C loc_0050B463: Err.Raise loc_0050B46C: loc_0050B472: Me.GetTypeInfoCount = Me.GetTypeInfoCount + Err.Raise loc_0050B474: ecx = var_28 loc_0050B482: 00000001h = 00000001h + 1 loc_0050B48A: var_18 = 1 loc_0050B490: GoTo loc_0050B3C2 loc_0050B495: loc_0050B4AA: Proc_0050B0E0(arg_C, edx, ecx) = Proc_0050B0E0(arg_C, edx, ecx) - 00000001h loc_0050B4B3: Proc_0050B0E0(arg_C, edx, ecx) = Proc_0050B0E0(arg_C, edx, ecx) - Me.%x1 = GetIDsOfNames(%x2) 'Ignore this If Proc_0050B0E0(arg_C, edx, ecx) < 0 Then GoTo loc_0050B4C2 loc_0050B4B9: Err.Raise loc_0050B4C2: shl ebx, 04h loc_0050B4C9: GoTo loc_0050B4D4 loc_0050B4CB: Err.Raise loc_0050B4D4: loc_0050B4D7: Me.GetTypeInfoCount = Me.GetTypeInfoCount + Err.Raise loc_0050B4EC: var_2C = Me.GetTypeInfoCount loc_0050B4EE: Proc_0050B0E0(arg_C, edx, ecx) = Proc_0050B0E0(arg_C, edx, ecx) - 00000002h loc_0050B4F7: var_18 = Proc_0050B0E0(arg_C, edx, ecx) If Proc_0050B0E0(arg_C, edx, ecx) < 0 Then GoTo loc_0050B6BB loc_0050B516: edx = var_2C And 00000007h loc_0050B519: Proc_0050B0E0(arg_C, edx, ecx) = Proc_0050B0E0(arg_C, edx, ecx) + var_2C And 00000007h loc_0050B523: sar edi, 03h loc_0050B526: Proc_0050B0E0(arg_C, edx, ecx) = Proc_0050B0E0(arg_C, edx, ecx) - Me.%x1 = GetIDsOfNames(%x2) 'Ignore this If Proc_0050B0E0(arg_C, edx, ecx) < 0 Then GoTo loc_0050B532 loc_0050B52C: Err.Raise loc_0050B532: var_90 = Proc_0050B0E0(arg_C, edx, ecx) loc_0050B53B: GoTo loc_0050B549 loc_0050B53D: Err.Raise loc_0050B549: loc_0050B54B: eax = 1 And 80000007h If Sign(1 And 80000007h - 0) Then GoTo loc_0050B557 loc_0050B552: eax = 1 And 80000007h - 1 loc_0050B553: eax = 1 And 80000007h - 1 Or FFFFFFF8h loc_0050B556: eax = 1 And 80000007h - 1 Or FFFFFFF8h + 1 loc_0050B563: var_9C = var_94 loc_0050B57D: call __vbaPowerR8(ebx, 40000000h, var_94, var_98) loc_0050B59C: eax = eax And ecx+edi loc_0050B5B6: var_B0 = var_94 loc_0050B5D0: call __vbaPowerR8(ebx, 40000000h, var_94, var_AC) loc_0050B5DC: fcomp real8 ptr var_A0 If Err.Number = 0 Then GoTo loc_0050B6A3 loc_0050B603: 1 = 1 - Me.%x1 = GetIDsOfNames(%x2) 'Ignore this If 1 < 0 Then GoTo loc_0050B612 loc_0050B609: Err.Raise loc_0050B612: shl edi, 04h loc_0050B617: GoTo loc_0050B622 loc_0050B619: Err.Raise loc_0050B622: loc_0050B625: Me.GetTypeInfoCount = Me.GetTypeInfoCount + Err.Raise loc_0050B63A: var_28 = Me.GetTypeInfoCount loc_0050B644: Proc_0050A720(var_28, var_28, var_2C) loc_0050B649: var_4C = Proc_0050A720(var_28, var_28, var_2C) loc_0050B657: var_84 = vbEmpty loc_0050B66D: var_44 = var_84 loc_0050B670: var_7C = vbEmpty loc_0050B67A: Proc_0050AD50(arg_10, var_7C, var_7C) loc_0050B67F: var_48 = Proc_0050AD50(arg_10, var_7C, var_7C) loc_0050B68A: var_2C = vbEmpty loc_0050B697: call Erase(ebx, var_7C, var_7C, arg_10, var_2C, var_28) loc_0050B6A1: call Erase(ebx, var_84) loc_0050B6A3: loc_0050B6A6: eax = Erase(ebx, var_84) Or FFFFFFFFh loc_0050B6A9: Erase(ebx, var_84) Or FFFFFFFFh = Erase(ebx, var_84) Or FFFFFFFFh + 1 loc_0050B6B1: var_18 = Erase(ebx, var_84) Or FFFFFFFFh loc_0050B6BB: loc_0050B6C3: var_20 = var_2C loc_0050B6CB: GoTo loc_0050B6EC loc_0050B6EB: Exit Sub loc_0050B6EC: loc_0050B755: Exit Sub End Sub Proc_005097B0 В листинге декомпилятора найти не могу... Странно PS Прогу без БД скинуть могу если это поможет.