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



这是我第一次在这里发布 - 请保持温柔。当我搜索Google搜索无关的问题时,我从本网站获得了很多有用的技巧,而且似乎每个人都对正在发生的事情有一个很好的了解。

我最近接管了一家使用专有软件来管理流入和流出的小型公司的运输经理。有一个特殊的编辑按钮,要求一个密码来进行关键更改,而上一个人没有出于恶意而传递信息。

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

如果剥离代码的无关部分,则最终会得到以下内容:

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等于hex编号&H52A090(或DECIMAL中的5415056)。

问题中的代码摘录并未显示vbObject实际是什么。假设vbObject(或其默认属性的值)是用户提供的密码,则5415056是您所追求的魔术值。

最新更新