这是我第一次在这里发帖 - 请保持温和。当我在谷歌搜索无关的问题时,我从这个网站上获得了很多有用的提示,看起来这里的每个人都非常了解发生了什么。
我最近接任一家小公司的运输经理,该公司使用专有软件来管理流入和流出。有一个特殊编辑按钮,要求输入密码进行重要更改,而前一个人没有通过这些信息。
我使用VB Decompiler Pro来反编译可执行文件,但它看起来像是在汇编代码中出现的,我似乎无法弄清楚它在哪里引用了正确的密码。我们有旧版本软件的源代码,但旧代码中列出的密码与删除源代码的当前密码不同。
非常感谢任何帮助找到密码。
Private Sub Command1_Click() '519FD0
loc_00519FF5: var_8 = &H403058
loc_0051A041: var_28 = 9
loc_0051A052: var_60 = &H52A090
loc_0051A059: var_68 = &H4008
loc_0051A060: var_48 = Ucase(&H52A090)
loc_0051A06A: Var_Ret_1 = (Ucase(vbObject) = var_48)
loc_0051A076: var_9C = Var_Ret_1
loc_0051A097: If Var_Ret_1 = 0 Then GoTo loc_0051A12F
loc_0051A0A7: var_68 = 11
loc_0051A0AA: eax = var_48 Or FFFFFFFFh
loc_0051A0B7: var_60 = var_48 Or FFFFFFFFh
loc_0051A0CA: esi+34h."canSpEdit" = var_5C
loc_0051A0F5: var_AC = &H52AA00
loc_0051A0FB: Set var_18 = Me
loc_0051A109: Global.Unload var_18
loc_0051A12F:
loc_0051A139: var_50 = 80020004h
loc_0051A13C: var_40 = 80020004h
loc_0051A13F: var_30 = 80020004h
loc_0051A151: var_60 = "Password Incorrect"
loc_0051A158: var_68 = 8
loc_0051A15F: var_28 = "Password Incorrect"
loc_0051A177: MsgBox var_28, 48
loc_0051A18F: call 0052AA00h(00000004h, var_28, 10, 10, 10, 0052AA00h, 004137ECh, 00000010h, 00000003h)
loc_0051A19B: var_68 = 11
loc_0051A1BD: Me.SaveProp.%StkVar2 = var_5C
loc_0051A1CB: GoTo loc_0051A1F2
loc_0051A1F1: Exit Sub
loc_0051A1F2: Exit Sub
End Sub
答案 0 :(得分:0)
如果删除不相关的代码部分,最终会得到以下结果:
Private Sub Command1_Click()
Var_Ret_1 = (Ucase(vbObject) = Ucase(&H52A090))
'Zero means False
If Var_Ret_1 = 0 Then GoTo some_obscure_label
Global.Unload Me
some_obscure_label:
'Inform user that supplied password is incorrect
End Sub
从这里可以看出,当vbObject
等于十六进制数&H52A090
(或十进制5415056
)时,执行没有跳转到关于错误密码的通知的唯一情况相对容易
问题中的代码摘录并未显示vbObject
实际上是什么。假设vbObject
(或其默认属性的值)是用户提供的密码,5415056
是您所追求的神奇值。