【软件大小】: 339 KB
【软件语言】: 简体中文
【软件类别】: 国产软件 / 共享版 / 理科工具
【应用平台】: Win9x/NT/2000/XP
【界面预览】: 无
【加入时间】: 2005-01-24 10:50:14
【下载地址】: 天空软件站
【推荐等级】: ★★★
【在线注册】: 点击这里进入注册中心==>
【软件简介】:《神算超人Ⅲ》是第三代“神算超人”口算练习软件。适合小学到成人各不同年龄层次的
人使用,练习形式生动活泼,内容有加法、减法、乘法、除法、乘方、开方、阶乘、解一元二次方程、排
列组合。可自由选择练习,自设题量,做题时间限制、不同难度等级、错题加罚强化练习等功能。也可由
电脑进程式控制提高练习效率,强化练习等。所有功能都可以自己定义。练习形式较为灵活,可以自选练
习,也可以由电脑随机练习,练习过程中每一小题都采用倒计时,人机对话形式,轻松而又不乏刺激的环
境里提高你的口算速度和心算能力,这将是炼就你一生的本领,预祝你成为新一代神算超人。
《神算超人Ⅲ》在前一版基础上对练习界面做了调整,增设了“暂停”功能,以便可以让你在练习中
不影响其它事,也不必终止练习。取消了上一版本中途退出拦截设置,你可以随时终止练习,或重新选择
练习。
【作者声明】:初学破解,仅作学习交流之用,失误之处敬请大侠赐教!
【破解工具】:Ollydbg1.10
这个程序有点意思,调试一次后再调试会出错(Run-time error'62',Input past end of file),必须重新
安装后方可正常调试,好像是对安装文件夹下的文件大小进行比较什么的(regedit和cus文件),不大清楚,
希望大侠指点!
这个程序中用了大量的浮点运算,由于浮点知识溃乏,以下分析错误在所难免,欢迎大家指正,也请哪位大侠
有浮点知识的文章或链接给我一份!
程序为VB编写,定位VB程序最好是用_vbastrcmp(或者其他VB函数,如果你对VB熟的话,我是VB白痴,只会一
点汇编与TC),这篇文章并未能全部把算法分析清楚,因为其中有一个函数MSVBVM60.__vbaPowerR8不是很明
白,而且VB的参数传递基本在堆栈中,感觉与汇编中有所不同,希望大家多多指正!
如上所说,用_vbastrcmp定位到如下代码(我是第一次接触VB,把反汇编的程序从头粗略看到尾才定位到如
下代码)
........
0058DFFC push eax
0058DFFD push ecx
0058DFFE call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>>; 从字符串特定位置上获取其值
0058E004 push eax
0058E005 call dword ptr ds:[<&MSVBVM60.#696>] ; MSVBVM60.rtcCharValueBstr
0058E00B movsx edx,ax ; 上面那个Call看函数名猜想是按位取
字串的ASCII值
0058E00E mov dword ptr ss:[ebp-11C],edx ; 用户名第1位放到ss:[ebp-11c]中
0058E014 fild dword ptr ss:[ebp-11C] ; 浮点指令,装入整数到st0=115("s"的
Hex值)
0058E01A fstp qword ptr ss:[ebp-124] ; 浮点指令,再把st0弹出到ss:[ebp-
124]
0058E020 mov eax,dword ptr ss:[ebp-120]
0058E026 mov ecx,dword ptr ss:[ebp-124]
0058E02C push eax
0058E02D push ecx
0058E02E call dword ptr ds:[<&MSVBVM60.__vbaPowerR8>] ; 这个函数是求平方?似曾相识,往下看
0058E034 fmul qword ptr ds:[4011C8] ; 此时st0=13225=115*115,印证上面的
猜想,不知对不对,这个指令为st0=st0*ds:[4011c8]=13225*1010323
0058E03A mov ebx,dword ptr ds:[<&MSVBVM60.__vbaStrR8>] ; 字符串转换成双精度浮点数函数
0058E040 sub esp,8
0058E043 fstsw ax ; 只查到fst dest是保存st0到dest,而
fstsw是什么呢?
0058E045 test al,0D ; 这个判断有点不明白,0D是回车符的
Hex
0058E047 jnz 神算超人.0058E6AC
0058E04D fstp qword ptr ss:[esp] ; st0存入ss:[esp],再执行一次出栈操
作
0058E050 call ebx ; 还记得上面吗,字串转换成双精度数;
<&MSVBVM60.__vbaStrR8>
0058E052 mov edx,eax ; edx=eax="13361521675",呵呵,返回
值在eax中
0058E054 lea ecx,dword ptr ss:[ebp-78]
0058E057 call esi
0058E059 push eax ; 大家记住一点,VB程序是利用堆栈传
递参数的
0058E05A call dword ptr ds:[<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
0058E060 mov edi,dword ptr ds:[<&MSVBVM60.__vbaVarMove>; MSVBVM60.__vbaVarMove
0058E066 lea edx,dword ptr ss:[ebp-DC]
0058E06C fstp qword ptr ss:[ebp-D4] ; 不注释了,此时st0中的值仍为
13361521675
0058E072 lea ecx,dword ptr ss:[ebp-70]
0058E075 mov dword ptr ss:[ebp-DC],5
0058E07F call edi ; <&MSVBVM60.__vbaVarMove>
0058E081 lea edx,dword ptr ss:[ebp-78]
0058E084 lea eax,dword ptr ss:[ebp-74]
0058E087 push edx
0058E088 push eax
0058E089 push 2 ; 以下都是释放内存空间
0058E08B call dword ptr ds:[<&MSVBVM60.__vbaFreeStrLis>; MSVBVM60.__vbaFreeStrList
0058E091 add esp,0C
0058E094 lea ecx,dword ptr ss:[ebp-8C]
0058E09A call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>] ; MSVBVM60.__vbaFreeVar
0058E0A0 lea edx,dword ptr ss:[ebp-CC]
0058E0A6 push 1
0058E0A8 lea eax,dword ptr ss:[ebp-8C]
0058E0AE lea ecx,dword ptr ss:[ebp-38]
0058E0B1 push edx
0058E0B2 push eax
0058E0B3 mov dword ptr ss:[ebp-C4],ecx
0058E0B9 mov dword ptr ss:[ebp-CC],4008
0058E0C3 call dword ptr ds:[<&MSVBVM60.#619>] ; MSVBVM60.rtcRightCharVar
0058E0C9 push 40000000 ; 上面那个函数从字符串右边取相应字
符
0058E0CE lea ecx,dword ptr ss:[ebp-8C]
0058E0D4 push 0
0058E0D6 lea edx,dword ptr ss:[ebp-74]
0058E0D9 push ecx
0058E0DA push edx
0058E0DB call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>>; MSVBVM60.__vbaStrVarVal
0058E0E1 push eax
0058E0E2 call dword ptr ds:[<&MSVBVM60.#696>] ; MSVBVM60.rtcCharValueBstr
0058E0E8 movsx eax,ax ; 又一轮循环开始,下面不多注释了,取
用户名第2个字符"h"
0058E0EB mov dword ptr ss:[ebp-128],eax
0058E0F1 fild dword ptr ss:[ebp-128]
0058E0F7 fstp qword ptr ss:[ebp-130]
0058E0FD mov ecx,dword ptr ss:[ebp-12C]
0058E103 mov edx,dword ptr ss:[ebp-130]
0058E109 push ecx
0058E10A push edx
0058E10B call dword ptr ds:[<&MSVBVM60.__vbaPowerR8>] ; MSVBVM60.__vbaPowerR8
0058E111 fmul qword ptr ds:[4011C8] ; 在这里ds:[4011c8]中的值还为
1010323,莫非为固定值
0058E117 sub esp,8 ; 程序在ds:[4011c8]内存段中存放了4
个固定值,后面会还将继续看到
0058E11A fstsw ax
0058E11C test al,0D
0058E11E jnz 神算超人.0058E6AC
0058E124 fstp qword ptr ss:[esp]
0058E127 call ebx
0058E129 mov edx,eax ; edx=eax="13130157708"
0058E12B lea ecx,dword ptr ss:[ebp-78]
0058E12E call esi ; MSVBVM60.__vbaStrMove
0058E130 push eax
0058E131 call dword ptr ds:[<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
0058E137 fstp qword ptr ss:[ebp-D4] ; 上面那个Call将字符串转化成双精度
数=13130157708
0058E13D lea edx,dword ptr ss:[ebp-DC]
0058E143 lea ecx,dword ptr ss:[ebp-24]
0058E146 mov dword ptr ss:[ebp-DC],5
0058E150 call edi ; MSVBVM60.__vbaVarMove
0058E152 lea eax,dword ptr ss:[ebp-78]
0058E155 lea ecx,dword ptr ss:[ebp-74]
0058E158 push eax
0058E159 push ecx
0058E15A push 2
0058E15C call dword ptr ds:[<&MSVBVM60.__vbaFreeStrLis>; MSVBVM60.__vbaFreeStrList
0058E162 add esp,0C
0058E165 lea ecx,dword ptr ss:[ebp-8C]
0058E16B call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>] ; MSVBVM60.__vbaFreeVar
0058E171 mov edx,dword ptr ss:[ebp-38] ; 取用户名到edx中
0058E174 push edx
0058E175 call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>] ; MSVBVM60.__vbaLenBstr
0058E17B push eax ; 上面函数不用说了吧,eax=8,用户名
长度
0058E17C call dword ptr ds:[<&MSVBVM60.__vbaStrI4>] ; MSVBVM60.__vbaStrI4
0058E182 mov edx,eax ; 上面的Call将一个长整型数转换成字
符串,eax中返回的为地址
0058E184 lea ecx,dword ptr ss:[ebp-74]
0058E187 call esi ; MSVBVM60._vbaStrMove
0058E189 push eax
0058E18A call dword ptr ds:[<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
0058E190 fstp qword ptr ss:[ebp-C4] ; 此时st0中为8,用户名的长度,上面的
Call按字面理解为双精度数到字符串
0058E196 lea edx,dword ptr ss:[ebp-CC]
0058E19C lea ecx,dword ptr ss:[ebp-34]
0058E19F mov dword ptr ss:[ebp-CC],5
0058E1A9 call edi ; MSVBVM60._vbaVarMove
0058E1AB lea ecx,dword ptr ss:[ebp-74]
0058E1AE call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0058E1B4 lea eax,dword ptr ss:[ebp-70]
0058E1B7 lea ecx,dword ptr ss:[ebp-24]
0058E1BA push eax
0058E1BB lea edx,dword ptr ss:[ebp-8C]
0058E1C1 push ecx ;
0058E1C2 push edx
0058E1C3 mov dword ptr ss:[ebp-C4],1
0058E1CD mov dword ptr ss:[ebp-CC],2
0058E1D7 call dword ptr ds:[<&MSVBVM60.__vbaVarAdd>] ; MSVBVM60.__vbaVarAdd
0058E1DD push eax ; 上面的Call将
13130157708+13361521675=26491679383
0058E1DE lea eax,dword ptr ss:[ebp-34]
0058E1E1 lea ecx,dword ptr ss:[ebp-CC]
0058E1E7 push eax
0058E1E8 lea edx,dword ptr ss:[ebp-34]
0058E1EB push ecx
0058E1EC lea eax,dword ptr ss:[ebp-9C]
0058E1F2 push edx
0058E1F3 push eax
0058E1F4 call dword ptr ds:[<&MSVBVM60.__vbaVarDiv>] ; MSVBVM60.__vbaVarDiv
0058E1FA lea ecx,dword ptr ss:[ebp-AC] ; 两数相除:1/8=0.125,8为用户名位数
0058E200 push eax
0058E201 push ecx
0058E202 call dword ptr ds:[<&MSVBVM60.__vbaVarPow>] ; MSVBVM60.__vbaVarPow
0058E208 lea edx,dword ptr ss:[ebp-BC] ; 上面的值为0.125,按前面这个函数为
求平方,实际操作结果却不是
0058E20E push eax
0058E20F push edx
0058E210 call dword ptr ds:[<&MSVBVM60.__vbaVarMul>] ; MSVBVM60.__vbaVarMul
0058E216 mov edx,eax ; 上面的Call实现
26491679383*1.296839554651010=34355457693.00705
0058E218 lea ecx,dword ptr ss:[ebp-50]
0058E21B call edi ; MSVBVM60.__vbaVarMove
0058E21D lea ecx,dword ptr ss:[ebp-8C]
0058E223 call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>] ; MSVBVM60.__vbaFreeVar
0058E229 fld qword ptr ds:[4011C0] ; ds:[4011c0]中为29(定值),存入st0
中
0058E22F cmp dword ptr ds:[5C8000],0 ;
0058E236 jnz short 神算超人.0058E240
0058E238 fdiv qword ptr ds:[4011B8] ; ds:[4011b8]中为28,st0=st0/ds:
[4011b8]=1.0357142857142857140
0058E23E jmp short 神算超人.0058E251
0058E240 push dword ptr ds:[4011BC]
0058E246 push dword ptr ds:[4011B8]
0058E24C call <jmp.&MSVBVM60._adj_fdiv_m64>
0058E251 mov dword ptr ss:[ebp-CC],5
0058E25B fstp qword ptr ss:[ebp-C4]
0058E261 fstsw ax
0058E263 test al,0D
0058E265 jnz 神算超人.0058E6AC
0058E26B lea eax,dword ptr ss:[ebp-50]
0058E26E lea ecx,dword ptr ss:[ebp-CC]
0058E274 push eax
0058E275 lea edx,dword ptr ss:[ebp-8C]
0058E27B push ecx
0058E27C push edx ; 又来了,下面这个Call确实不大明白,
也懒得往里再跟了
0058E27D call dword ptr ds:[<&MSVBVM60.__vbaVarPow>] ; MSVBVM60.__vbaVarPow
0058E283 push eax
0058E284 call dword ptr ds:[<&MSVBVM60.__vbaR8Var>] ; MSVBVM60.__vbaR8Var
0058E28A sub esp,8 ; 上面的Call将一个字符串转换成双精
度浮点数形式
0058E28D fstp qword ptr ss:[esp] ; 结果为81711145863.91840
0058E290 call dword ptr ds:[<&MSVBVM60.#614>] ; MSVBVM60.rtcSqr 求平方根
=285851.615115112448
0058E296 call dword ptr ds:[<&MSVBVM60.__vbaFPInt>] ; MSVBVM60.__vbaFPInt 浮点数转换成
整形数=285851
0058E29C sub esp,8
0058E29F fstp qword ptr ss:[esp] ; 结果存入堆栈
0058E2A2 call ebx ; MSVBVM60.__vbaStrR8 浮点数转换成
字符串形式
0058E2A4 mov edx,eax
0058E2A6 lea ecx,dword ptr ss:[ebp-74]
0058E2A9 call esi ; MSVBVM60.__vbaStrMove
0058E2AB push eax ; eax="285851",上面求平方根后的结
果
0058E2AC call dword ptr ds:[<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
0058E2B2 fadd qword ptr ds:[4011B0] ; ds:[4011b0]中为6060218610(定值),
与-st0相加=6050218610存入st0中
0058E2B8 lea edx,dword ptr ss:[ebp-DC]
0058E2BE lea ecx,dword ptr ss:[ebp-60]
0058E2C1 mov dword ptr ss:[ebp-DC],5
0058E2CB fstp qword ptr ss:[ebp-D4]
0058E2D1 fstsw ax
0058E2D3 test al,0D
0058E2D5 jnz 神算超人.0058E6AC
0058E2DB call edi ; MSVBVM60.__vbaVarMove
0058E2DD lea ecx,dword ptr ss:[ebp-74]
0058E2E0 call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0058E2E6 lea eax,dword ptr ss:[ebp-60]
0058E2E9 push eax
0058E2EA call dword ptr ds:[<&MSVBVM60.__vbaStrVarCopy>; MSVBVM60.__vbaStrVarCopy
0058E2F0 mov edx,eax ; edx="6050504461",累加和转换成字
符串形式,真码!
0058E2F2 lea ecx,dword ptr ss:[ebp-3C]
0058E2F5 call esi ; MSVBVM60.__vbaStrMove
0058E2F7 mov edi,dword ptr ss:[ebp+8]
0058E2FA xor ebx,ebx
0058E2FC jmp 神算超人.0058E3E5
0058E301 mov ecx,0A
0058E306 mov eax,80020004
0058E30B mov dword ptr ss:[ebp-BC],ecx
0058E311 mov dword ptr ss:[ebp-AC],ecx
0058E317 mov dword ptr ss:[ebp-9C],ecx
0058E31D lea edx,dword ptr ss:[ebp-CC]
0058E323 lea ecx,dword ptr ss:[ebp-8C]
0058E329 mov dword ptr ss:[ebp-B4],eax
0058E32F mov dword ptr ss:[ebp-A4],eax
0058E335 mov dword ptr ss:[ebp-94],eax
0058E33B mov dword ptr ss:[ebp-C4],神算超人.005719DC
0058E345 mov dword ptr ss:[ebp-CC],8
0058E34F call dword ptr ds:[<&MSVBVM60.__vbaVarDup>] ; MSVBVM60.__vbaVarDup
0058E355 lea ecx,dword ptr ss:[ebp-BC]
0058E35B lea edx,dword ptr ss:[ebp-AC]
0058E361 push ecx
0058E362 lea eax,dword ptr ss:[ebp-9C]
0058E368 push edx
0058E369 push eax
0058E36A lea ecx,dword ptr ss:[ebp-8C]
0058E370 push 10
0058E372 push ecx
0058E373 call dword ptr ds:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox
0058E379 lea edx,dword ptr ss:[ebp-BC]
0058E37F lea eax,dword ptr ss:[ebp-AC]
0058E385 push edx
0058E386 lea ecx,dword ptr ss:[ebp-9C]
0058E38C push eax
0058E38D lea edx,dword ptr ss:[ebp-8C]
0058E393 push ecx
0058E394 push edx
0058E395 push 4
0058E397 call dword ptr ds:[<&MSVBVM60.__vbaFreeVarLis>; MSVBVM60.__vbaFreeVarList
0058E39D mov eax,dword ptr ds:[edi]
0058E39F add esp,14
0058E3A2 push edi
0058E3A3 call dword ptr ds:[eax+30C]
0058E3A9 lea ecx,dword ptr ss:[ebp-7C]
0058E3AC push eax
0058E3AD push ecx
0058E3AE call dword ptr ds:[<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0058E3B4 mov esi,eax
0058E3B6 push 神算超人.005719DC
0058E3BB push esi
0058E3BC mov edx,dword ptr ds:[esi]
0058E3BE call dword ptr ds:[edx+A4]
0058E3C4 cmp eax,ebx
0058E3C6 fclex
0058E3C8 jge short 神算超人.0058E3DC
0058E3CA push 0A4
0058E3CF push 神算超人.005719C0
0058E3D4 push esi
0058E3D5 push eax
0058E3D6 call dword ptr ds:[<&MSVBVM60.__vbaHresultChe>; MSVBVM60.__vbaHresultCheckObj
0058E3DC lea ecx,dword ptr ss:[ebp-7C]
0058E3DF call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0058E3E5 mov eax,dword ptr ds:[edi]
0058E3E7 push edi
0058E3E8 call dword ptr ds:[eax+30C] ; 这个Call有点意思,弄不明白
0058E3EE lea ecx,dword ptr ss:[ebp-7C]
0058E3F1 push eax
0058E3F2 push ecx
0058E3F3 call dword ptr ds:[<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0058E3F9 mov esi,eax
0058E3FB lea eax,dword ptr ss:[ebp-74]
0058E3FE push eax
0058E3FF push esi
0058E400 mov edx,dword ptr ds:[esi]
0058E402 call dword ptr ds:[edx+A0]
0058E408 cmp eax,ebx
0058E40A fclex ; 清除异常
0058E40C jge short 神算超人.0058E420
0058E40E push 0A0
0058E413 push 神算超人.005719C0
0058E418 push esi
0058E419 push eax
0058E41A call dword ptr ds:[<&MSVBVM60.__vbaHresultChe>; MSVBVM60.__vbaHresultCheckObj
0058E420 mov ecx,dword ptr ss:[ebp-74] ; 这里可看到假码
0058E423 mov edx,dword ptr ss:[ebp-3C] ; 这里存放着计算出来的真码
0058E426 push ecx ; 后面是经典句式,不用多说了吧
0058E427 push edx
0058E428 call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp
0058E42E mov esi,eax
0058E430 lea ecx,dword ptr ss:[ebp-74]
0058E433 neg esi
0058E435 sbb esi,esi
0058E437 inc esi
0058E438 neg esi
0058E43A call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0058E440 lea ecx,dword ptr ss:[ebp-7C]
0058E443 call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0058E449 mov eax,80020004
0058E44E mov ecx,0A
0058E453 cmp si,bx
0058E456 mov dword ptr ss:[ebp-B4],eax
0058E45C mov dword ptr ss:[ebp-BC],ecx
0058E462 mov dword ptr ss:[ebp-A4],eax
0058E468 mov dword ptr ss:[ebp-AC],ecx
0058E46E je 神算超人.0058E56F
0058E474 mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarDup>] ; MSVBVM60.__vbaVarDup
0058E47A lea edx,dword ptr ss:[ebp-DC]
0058E480 lea ecx,dword ptr ss:[ebp-9C]
0058E486 mov dword ptr ss:[ebp-D4],神算超人.00571A20
0058E490 mov dword ptr ss:[ebp-DC],8
0058E49A call esi ; <&MSVBVM60.__vbaVarDup>
0058E49C lea edx,dword ptr ss:[ebp-CC]
0058E4A2 lea ecx,dword ptr ss:[ebp-8C]
0058E4A8 mov dword ptr ss:[ebp-C4],神算超人.005719F0
0058E4B2 mov dword ptr ss:[ebp-CC],8
0058E4BC call esi
0058E4BE lea eax,dword ptr ss:[ebp-BC]
0058E4C4 lea ecx,dword ptr ss:[ebp-AC]
0058E4CA push eax
0058E4CB lea edx,dword ptr ss:[ebp-9C]
0058E4D1 push ecx
0058E4D2 push edx
0058E4D3 lea eax,dword ptr ss:[ebp-8C]
0058E4D9 push 40
0058E4DB push eax
0058E4DC call dword ptr ds:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox
0058E4E2 lea ecx,dword ptr ss:[ebp-BC]
0058E4E8 lea edx,dword ptr ss:[ebp-AC]
0058E4EE push ecx
0058E4EF lea eax,dword ptr ss:[ebp-9C]
0058E4F5 push edx
0058E4F6 lea ecx,dword ptr ss:[ebp-8C]
0058E4FC push eax
0058E4FD push ecx
0058E4FE push 4
0058E500 call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>>; MSVBVM60.__vbaFreeVarList
0058E506 mov eax,dword ptr ds:[5C8958]
0058E50B add esp,14
0058E50E cmp eax,ebx
0058E510 jnz short 神算超人.0058E522
0058E512 push 神算超人.005C8958
0058E517 push 神算超人.00571538
0058E51C call dword ptr ds:[<&MSVBVM60.__vbaNew2>] ; MSVBVM60.__vbaNew2
0058E522 mov esi,dword ptr ds:[5C8958]
0058E528 lea eax,dword ptr ss:[ebp-7C]
0058E52B push edi
0058E52C push eax
0058E52D mov edx,dword ptr ds:[esi]
0058E52F mov dword ptr ss:[ebp-134],edx
0058E535 call dword ptr ds:[<&MSVBVM60.__vbaObjSetAddref>; MSVBVM60.__vbaObjSetAddref
0058E53B mov ecx,dword ptr ss:[ebp-134]
0058E541 push eax
0058E542 push esi
0058E543 call dword ptr ds:[ecx+10]
0058E546 cmp eax,ebx
0058E548 fclex
0058E54A jge short 神算超人.0058E55B
0058E54C push 10
0058E54E push 神算超人.00571528
0058E553 push esi
0058E554 push eax
0058E555 call dword ptr ds:[<&MSVBVM60.__vbaHresultCheck>; MSVBVM60.__vbaHresultCheckObj
0058E55B lea ecx,dword ptr ss:[ebp-7C]
0058E55E call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0058E564 call dword ptr ds:[<&MSVBVM60.__vbaEnd>] ; MSVBVM60.__vbaEnd
0058E56A jmp 神算超人.0058E601
0058E56F mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarDup>] ; MSVBVM60.__vbaVarDup
0058E575 mov edi,8
0058E57A lea edx,dword ptr ss:[ebp-DC]
0058E580 lea ecx,dword ptr ss:[ebp-9C]
......
算法虽然未能详细分析出来,但基本框架我们知道了,注册码只与用户名前两位及用户名长度有关,本来想
一如既往做个让程序自显示注册码的程式,可本人对于VB及它的堆栈调用确实很不清楚,只好作罢,有知道
的大侠还请给小弟指点一二.
给出一个可用注册码用户名:sharpair注册码:6050504461
欢迎发信到sharpair@163.com交流,QQ:402800474
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)