试图从反编译的Visual Basic .exe获取密码 - 无法破译汇编语言

时间:2014-02-06 20:29:01

标签: assembly vb6

这是我第一次在这里发帖 - 请保持温和。当我在谷歌搜索无关的问题时,我从这个网站上获得了很多有用的提示,看起来这里的每个人都非常了解发生了什么。

我最近接任一家小公司的运输经理,该公司使用专有软件来管理流入和流出。有一个特殊编辑按钮,要求输入密码进行重要更改,而前一个人没有通过这些信息。

我使用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

1 个答案:

答案 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是您所追求的神奇值。