一家朋友公司使用旧的 VB6 应用程序生成编码字符串,然后在他们同样陈旧和过时的数据库系统中使用。
他们让应用程序在独立模式下运行,因此我可以测试输入并让它生成编码输出,但他们希望将其迁移到基于 Web 的系统中以构建请求字符串,以防止有人必须在本地访问旧桌面。
Input: AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
Output: ~^}]|\sSrRqQpPwWvVuUtTkKjJiIhHoOnNmMlLcCbBaA`@gGfFeE
Input: 1234567890
Output: 4=<3210765
Input: 1
Output: 5
Input: 12
Output: 65
Input: 123
Output: 765
关于我可以从哪里开始解决这个问题的任何想法?看起来它进行了单个字符编码,然后反转了字符串。
编辑:看起来有点复杂……如果输入交叉到一个新列中,它似乎减去 4?
Input: ?
Output: ;
Input: 789:;<=>?
Output: ;:98?>=<3
看起来应用程序可能正在使用多个定义?或者做某种类型的数学范围来确定加减?
对我来说意义不大的反编译代码。
Private Sub CommandButton_Click() '408C90
Dim var_44 As TextBox
Dim var_48 As TextBox
loc_00408CB5: var_8 = &H4010C0
loc_00408D16: Set var_44 = Me
loc_00408D25: var_28 = password.Text
loc_00408D6D: Set var_44 = Len(var_28)
loc_00408D7C: var_28 = password.Text
loc_00408DBE:
loc_00408DC5: If Len(var_28) < 0 Then GoTo loc_00408EDA
loc_00408DE5: var_54 = Me
loc_00408DF2: var_64 = 1
loc_00408DF9: var_6C = 2
loc_00408E00: var_44 = 0
loc_00408E07: var_5C = 9
loc_00408E1C: var_28 = CStr(Mid$(vbObject, Len(var_28), 1))
loc_00408E34: call __vbaStrI2(Asc(var_28) xor eax, Me, var_28, var_44, 0040856Ch, 000000A0h, 000000A0h, 000000A0h, 000000A0h)
loc_00408E70: var_84 = var_24
loc_00408E76: var_8C = 8
loc_00408E81: Var_Ret_1 = CLng(__vbaStrI2(Asc(var_28) xor eax, Me, var_28, var_44, 0040856Ch, 000000A0h, 000000A0h, 000000A0h, 000000A0h))
loc_00408E8C: var_5C = Chr(Var_Ret_1)
loc_00408EA1: var_6C = var_24 & var_24
loc_00408EC5: eax = var_5C Or FFFFFFFFh
loc_00408ECB: var_5C Or FFFFFFFFh = var_5C Or FFFFFFFFh + Len(var_28)
loc_00408ED5: GoTo loc_00408DBE
loc_00408EDA:
loc_00408EF0: var_A0 = vbEmpty
loc_00408F04: Set var_44 = Me
loc_00408F0F: var_28 = ip.Text
loc_00408F3B: Set var_48 = var_28
loc_00408F4A: var_30 = User.Text
loc_00408FC0: var_40 = "http://" & var_28 & "/login?name=" & var_30 & "&password=" & var_24
loc_00408FCA: Me.MousePointer = var_40
loc_0040902F: GoTo loc_00409081
loc_00409080: Exit Sub
loc_00409081:
loc_00409091: Exit Sub
End Sub
