缺少MSVBVM50.DLL

该程序是编号2程序。

image-20231126163610790

如果最开始遇到了说缺少MSVBVM50.DLL 的话可以看通过:https://cn.dll-files.com/msvbvm50.dll.html

这个地址下载,并且放在你的:

1
2
C:\Windows\SysWOW64\
C:\Windows\System32\

这2个位置。

分析程序,首先是运行:可以查看字符串,以便于我们快速定位

image-20231126163922599

然后是

调查程序信息

image-20231126164042147

知道是一个VB 没有壳的程序32位的程序

VB程序可以使用:VB Decompiler它来进行反编译

使用X32dbg来动态调试

image-20231126164410410

通过字符串来进行定位:网上找到函数的入口点然后下断点。

也就是找到push ebp的位置

然后F9 运行,当这个程序运行起来后,输入用户名Dgor和密码12345678点击OK , 就会发现程序断在了push ebp这个位置。

然后我们F8单步调试一直往下:
找到程序读取我们输入的用户名和密码的位置:

image-20231126165503100

然后一步一步的分析:可以看我写的注释

image-20231126173724073

然后中间有一部一份代码不知道是干什么的。就接着往下走,找到出现密码12345678的位置。

image-20231126173840307

可以看到的是:这里有一个比较的函数,将通过用户名计算出来的字符串和密码传入了

跟进:

image-20231126173926157

然后在跟进这个call:

image-20231126174004797

这个call 里面首先是判断了输入的东西是否为空然后又调用了一个call

再次跟进:

image-20231126174101862

通过repe cmpsw 可以得知,将输入的密码和通过用户名计算出来的值进行一位一位的比较,最后就跳出了

image-20231126174254067

最后就是有一个关键的call 但是中间的代码不知道有什么用。

最后我们尝试一下:

image-20231126174348527

便成功了。

python实现算法

这里我们将算法用python实现一遍:

1
2
3
4
UserName = input("请输入你的用户名:")
Password = "AKA-" + str(len(UserName) * 0x17CFB + ord(UserName[0]))
print("生成的密码是:", Password)

image-20231126175332841