因为我评论 vb 有它自己的一组函数
,你必须在第三个破解版中寻找的功能是
rtcMidCharVar()
vbastrvarval() ,
rtcAnsiValueBstr()
_vbavarmul()
算法在名称字符上循环
添加一个常量,
将结果与另一个变量相乘,
然后将所有这些作为您的序列号相加,
如果您提供正确的序列号,您将获得一个带有密码axxxxxxo的 msgbox
powershell 中的一个简单的注册机看起来像
$b =0;$a = SOMECONSTANT;@('d','u','g','g') | % { $c= (([int][char]$_ + SOMEOTHERCONSTANT) * AVARIABLE);($b+=$c) };$b

编辑 ,
vb 主要不使用寄存器
它对几乎所有函数使用VARIANT结构并使用堆栈
如果您使用windbg,您可以查看结构
dt ole32!VARIANT
基本上它是一个由联合组成的十字节长的结构
0:000> dt -v ole32!Variant
struct tagVARIANT, 50 elements, 0x10 bytes
第一个成员 vt (SHORT int2b) 表示变体类型
(找到 Wtypes.h 并查找
enum VARENUM
{
VT_EMPTY = 0,
VT_NULL = 1,
VT_I2 = 2,
VT_I4 = 3,
接下来的 3 个 SHORTS 被保留
0x08 处的值将根据 vt 成员
的值解密0x0c 处
的成员是 pRecInfo 0x10处的成员是 tagDec 一个数组
现在这部分已经清楚了,函数 __vbaVarMul 接受三个 VARIANT 类型的参数
第一个是结果 第二个是乘数 第三个是被乘数
这是字符'd'的编辑windbg输出
0:000> ? poi(@esp)
Evaluate expression: 1241928 = 0012f348
0:000> ? poi(@esp+4)
Evaluate expression: 1241944 = 0012f358
0:000> ? poi(@esp+8)
Evaluate expression: 1241880 = 0012f318
0:000> dt ole32!Variant vt poi(@esp)
+0x000 vt : 0 <---- vb NULL / v_EMPTY
0:000> dt ole32!Variant vt poi(@esp+4)
+0x000 vt : 3 <-------vbLong
0:000> dt ole32!Variant vt poi(@esp+8)
+0x000 vt : 2 <-----vbInt
0:000> .enable_long_status 1
0:000> dt ole32!Variant lVal poi(@esp)
+0x008 lVal : 0x12f3f0
0:000> dt ole32!Variant lVal poi(@esp+4)
+0x008 lVal : 0xxx
0:000> dt ole32!Variant lVal poi(@esp+8)
+0x008 lVal : 0xxxx
0:000> ? 'd' + xxx
Evaluate expression: xxxx = 00000xxx