【文章标题】: 飞雪桌面日历的算法分析
【文章作者】: dewar
【作者主页】: 无
【软件名称】: 飞雪桌面日历2.0
【下载地址】: 自己搜索下载
【加壳方式】: UPX
【保护方式】: 注册码重启验证
【编写语言】: VB
【使用工具】: OD
【操作平台】: WINXP
【软件介绍】: 集合了:万年历、时钟、定时运行、定时关机等
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
该软件小巧而强大!集合了以下超多功能:万年历、时钟、定时运行、定时关机(2000/XP关机仅需3秒!)、限时用机、休息提醒(可锁定系统)、备忘录、系统热键、世界时间、光驱控制、定期清理电脑、语音报时、整点/半点报时等,并支持自定义软件皮肤,能以四种界面存在,即:日历、挂历、时钟、迷你栏。但其是共享版,动不动就弹出“您还未注册”的提示,让人看着就烦~~于是只好将它搬上手术台^_^
1.先试用该程序,发现注册码的验证为重启验证。
2.PEID查壳,原来是UPX的壳,这个壳很基本,三下五除二脱了,脱了之后再查壳,无壳了是VB编写的程序,试运行,轰的一声,电脑关机了。我晕,好恶劣的行径,看来是非破不可了,重启电脑再来。
3.既然会关机,就说明有暗桩,多半是检查文件的大小,OD载入脱壳之后的程序,在所有对模块MSVBVM60.DLL的输出函数rtcFileLen的调用上下断(一共8处)。F9运行,中断在如下的地方:
........
00531B57 . FF15 C8104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcRand>; 产生一个随机数
00531B5D . D80D 0C394000 FMUL DWORD PTR DS:[40390C] ; ×10
00531B63 . FF15 F0124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8>; 转为整数
00531B69 . 8BF8 MOV EDI, EAX
00531B6B . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00531B6E . FFD6 CALL ESI
00531B70 . 0FBFC7 MOVSX EAX, DI
00531B73 . 83F8 09 CMP EAX, 9 ; Switch (cases 0..9)
00531B76 . 0F87 A5020000 JA 00531E21
00531B7C . FF2485 8C1E53>JMP DWORD PTR DS:[EAX*4+531E8C]
00531B83 > 8B4D E0 MOV ECX, DWORD PTR SS:[EBP-20] ; Case 1 of switch 00531B73
00531B86 . 51 PUSH ECX
00531B87 . E9 3C010000 JMP 00531CC8
00531B8C > 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20] ; Case 2 of switch 00531B73
00531B8F . 52 PUSH EDX
00531B90 . FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; 检查运行程序的大小,下同
00531B96 . 3D 004E0500 CMP EAX, 54E00 ; 与0x54e00比较,下同
00531B9B . 0F84 80020000 JE 00531E21 ; 相等就跳向正确的代码,下同//改JE为JMP
00531BA1 . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531BA4 . 85C0 TEST EAX, EAX
00531BA6 . 75 12 JNZ SHORT 00531BBA
00531BA8 . 8D45 D8 LEA EAX, DWORD PTR SS:[EBP-28]
00531BAB . 50 PUSH EAX
00531BAC . 68 A8784000 PUSH 004078A8
00531BB1 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNe>; MSVBVM60.__vbaNew2
00531BB7 . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531BBA > 8BF0 MOV ESI, EAX
00531BBC . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00531BBE . 50 PUSH EAX
00531BBF . FF51 24 CALL DWORD PTR DS:[ECX+24] ; 否则关机~!
00531BC2 . DBE2 FCLEX
00531BC4 . 85C0 TEST EAX, EAX
00531BC6 . 7D 0F JGE SHORT 00531BD7
00531BC8 . 6A 24 PUSH 24
00531BCA . 68 64C24100 PUSH 0041C264
00531BCF . 56 PUSH ESI
00531BD0 . 50 PUSH EAX
00531BD1 . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHr>; MSVBVM60.__vbaHresultCheckObj
00531BD7 > 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531BDA . 85C0 TEST EAX, EAX
00531BDC . 75 12 JNZ SHORT 00531BF0
00531BDE . 8D55 D8 LEA EDX, DWORD PTR SS:[EBP-28]
00531BE1 . 52 PUSH EDX
00531BE2 . 68 A8784000 PUSH 004078A8
00531BE7 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNe>; MSVBVM60.__vbaNew2
00531BED . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531BF0 > 8BF0 MOV ESI, EAX
00531BF2 . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00531BF4 . 50 PUSH EAX
00531BF5 . FF51 20 CALL DWORD PTR DS:[ECX+20]
00531BF8 . DBE2 FCLEX
00531BFA . 85C0 TEST EAX, EAX
00531BFC . 0F8D 1F020000 JGE 00531E21
00531C02 . 6A 20 PUSH 20
00531C04 . 68 64C24100 PUSH 0041C264
00531C09 . 56 PUSH ESI
00531C0A . 50 PUSH EAX
00531C0B . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHr>; MSVBVM60.__vbaHresultCheckObj
00531C11 . E9 0B020000 JMP 00531E21
00531C16 > 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20] ; Case 3 of switch 00531B73
00531C19 . 52 PUSH EDX
00531C1A . FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; MSVBVM60.rtcFileLen
00531C20 . 3D 004E0500 CMP EAX, 54E00
00531C25 . 0F84 F6010000 JE 00531E21 ; 改JE为JMP
00531C2B . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531C2E . 85C0 TEST EAX, EAX
00531C30 . 75 12 JNZ SHORT 00531C44
00531C32 . 8D45 D8 LEA EAX, DWORD PTR SS:[EBP-28]
00531C35 . 50 PUSH EAX
00531C36 . 68 A8784000 PUSH 004078A8
00531C3B . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNe>; MSVBVM60.__vbaNew2
00531C41 . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531C44 > 8BF0 MOV ESI, EAX
00531C46 . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00531C48 . 50 PUSH EAX
00531C49 . FF51 24 CALL DWORD PTR DS:[ECX+24]
00531C4C . DBE2 FCLEX
00531C4E . 85C0 TEST EAX, EAX
00531C50 . 7D 0F JGE SHORT 00531C61
00531C52 . 6A 24 PUSH 24
00531C54 . 68 64C24100 PUSH 0041C264
00531C59 . 56 PUSH ESI
00531C5A . 50 PUSH EAX
00531C5B . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHr>; MSVBVM60.__vbaHresultCheckObj
00531C61 > 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531C64 . 85C0 TEST EAX, EAX
00531C66 . 75 36 JNZ SHORT 00531C9E
00531C68 . EB 22 JMP SHORT 00531C8C
00531C6A > 8B45 E0 MOV EAX, DWORD PTR SS:[EBP-20] ; Case 5 of switch 00531B73
00531C6D . 50 PUSH EAX
00531C6E . EB 58 JMP SHORT 00531CC8
00531C70 > 8B4D E0 MOV ECX, DWORD PTR SS:[EBP-20] ; Case 6 of switch 00531B73
00531C73 . 51 PUSH ECX
00531C74 . FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; MSVBVM60.rtcFileLen
00531C7A . 3D 004E0500 CMP EAX, 54E00
00531C7F . 0F84 9C010000 JE 00531E21 ; 改JE为JMP
00531C85 . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531C88 . 85C0 TEST EAX, EAX
00531C8A . 75 12 JNZ SHORT 00531C9E
00531C8C > 8D55 D8 LEA EDX, DWORD PTR SS:[EBP-28]
00531C8F . 52 PUSH EDX
00531C90 . 68 A8784000 PUSH 004078A8
00531C95 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNe>; MSVBVM60.__vbaNew2
00531C9B . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531C9E > 8BF0 MOV ESI, EAX
00531CA0 . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00531CA2 . 50 PUSH EAX
00531CA3 . FF51 20 CALL DWORD PTR DS:[ECX+20]
00531CA6 . DBE2 FCLEX
00531CA8 . 85C0 TEST EAX, EAX
00531CAA . 0F8D 71010000 JGE 00531E21
00531CB0 . 6A 20 PUSH 20
00531CB2 . 68 64C24100 PUSH 0041C264
00531CB7 . 56 PUSH ESI
00531CB8 . 50 PUSH EAX
00531CB9 . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHr>; MSVBVM60.__vbaHresultCheckObj
00531CBF . E9 5D010000 JMP 00531E21
00531CC4 > 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20] ; Cases 4,7 of switch 00531B73
00531CC7 . 52 PUSH EDX
00531CC8 > FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; MSVBVM60.rtcFileLen
00531CCE . 3D 004E0500 CMP EAX, 54E00
00531CD3 . 0F84 48010000 JE 00531E21 ; 改JE为JMP
00531CD9 . E9 3D010000 JMP 00531E1B
00531CDE > DD05 885F4000 FLD QWORD PTR DS:[405F88] ; Case 8 of switch 00531B73
00531CE4 . E8 1B4AEDFF CALL
00531CE9 . DD5D A0 FSTP QWORD PTR SS:[EBP-60]
00531CEC . 8B45 E0 MOV EAX, DWORD PTR SS:[EBP-20]
00531CEF . 50 PUSH EAX
00531CF0 . FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; MSVBVM60.rtcFileLen
00531CF6 . 8985 78FFFFFF MOV DWORD PTR SS:[EBP-88], EAX
00531CFC . DB85 78FFFFFF FILD DWORD PTR SS:[EBP-88]
00531D02 . DD9D 70FFFFFF FSTP QWORD PTR SS:[EBP-90]
00531D08 . 68 00805840 PUSH 40588000
00531D0D . 6A 00 PUSH 0
00531D0F . DD45 A0 FLD QWORD PTR SS:[EBP-60]
00531D12 . FF15 54134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFP>; MSVBVM60.__vbaFPInt
00531D18 . 83EC 08 SUB ESP, 8
00531D1B . DD1C24 FSTP QWORD PTR SS:[ESP]
00531D1E . FF15 94124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaPo>; MSVBVM60.__vbaPowerR8
00531D24 . DC0D 805F4000 FMUL QWORD PTR DS:[405F80]
00531D2A . FF15 14114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFp>; MSVBVM60.__vbaFpR8
00531D30 . DC9D 70FFFFFF FCOMP QWORD PTR SS:[EBP-90]
00531D36 . DFE0 FSTSW AX
00531D38 . F6C4 40 TEST AH, 40
00531D3B . 75 07 JNZ SHORT 00531D44
00531D3D . B8 01000000 MOV EAX, 1
00531D42 . EB 02 JMP SHORT 00531D46
00531D44 > 33C0 XOR EAX, EAX
00531D46 > F7D8 NEG EAX
00531D48 . 66:85C0 TEST AX, AX
00531D4B . 0F84 D0000000 JE 00531E21 ; 改JE为JMP
00531D51 . E9 C5000000 JMP 00531E1B
00531D56 > DD05 885F4000 FLD QWORD PTR DS:[405F88] ; Case 9 of switch 00531B73
00531D5C . E8 A349EDFF CALL
00531D61 . DD5D A0 FSTP QWORD PTR SS:[EBP-60]
00531D64 . 8B4D E0 MOV ECX, DWORD PTR SS:[EBP-20]
00531D67 . 51 PUSH ECX
00531D68 . FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; MSVBVM60.rtcFileLen
00531D6E . 8985 6CFFFFFF MOV DWORD PTR SS:[EBP-94], EAX
00531D74 . DB85 6CFFFFFF FILD DWORD PTR SS:[EBP-94]
00531D7A . DD9D 64FFFFFF FSTP QWORD PTR SS:[EBP-9C]
00531D80 . 68 00805840 PUSH 40588000
00531D85 . 6A 00 PUSH 0
00531D87 . DD45 A0 FLD QWORD PTR SS:[EBP-60]
00531D8A . FF15 54134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFP>; MSVBVM60.__vbaFPInt
00531D90 . 83EC 08 SUB ESP, 8
00531D93 . DD1C24 FSTP QWORD PTR SS:[ESP]
00531D96 . FF15 94124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaPo>; MSVBVM60.__vbaPowerR8
00531D9C . DC0D 805F4000 FMUL QWORD PTR DS:[405F80]
00531DA2 . FF15 14114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFp>; MSVBVM60.__vbaFpR8
00531DA8 . DC9D 64FFFFFF FCOMP QWORD PTR SS:[EBP-9C]
00531DAE . DFE0 FSTSW AX
00531DB0 . F6C4 40 TEST AH, 40
00531DB3 . 75 07 JNZ SHORT 00531DBC
00531DB5 . B8 01000000 MOV EAX, 1
00531DBA . EB 02 JMP SHORT 00531DBE
00531DBC > 33C0 XOR EAX, EAX
00531DBE > F7D8 NEG EAX
00531DC0 . 66:85C0 TEST AX, AX
00531DC3 . 74 5C JE SHORT 00531E21 ; 改JE为JMP
00531DC5 . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531DC8 . 85C0 TEST EAX, EAX
00531DCA . 75 12 JNZ SHORT 00531DDE
00531DCC . 8D55 D8 LEA EDX, DWORD PTR SS:[EBP-28]
00531DCF . 52 PUSH EDX
00531DD0 > 68 A8784000 PUSH 004078A8
00531DD5 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNe>; MSVBVM60.__vbaNew2
00531DDB . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531DDE > 8BF0 MOV ESI, EAX
00531DE0 . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00531DE2 . 50 PUSH EAX
00531DE3 . FF51 20 CALL DWORD PTR DS:[ECX+20]
00531DE6 . DBE2 FCLEX
00531DE8 . 85C0 TEST EAX, EAX
00531DEA . 7D 35 JGE SHORT 00531E21
00531DEC . 6A 20 PUSH 20
00531DEE . 68 64C24100 PUSH 0041C264
00531DF3 . 56 PUSH ESI
00531DF4 . 50 PUSH EAX
00531DF5 . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHr>; MSVBVM60.__vbaHresultCheckObj
00531DFB . EB 24 JMP SHORT 00531E21
00531DFD > 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20] ; Case 0 of switch 00531B73
00531E00 . 52 PUSH EDX
00531E01 . FF15 9C124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>; MSVBVM60.rtcFileLen
00531E07 . 3D 004E0500 CMP EAX, 54E00
00531E0C . 74 13 JE SHORT 00531E21 ; 改JE为JMP
00531E0E . 8B45 D8 MOV EAX, DWORD PTR SS:[EBP-28]
00531E11 . 85C0 TEST EAX, EAX
00531E13 .^ 75 C9 JNZ SHORT 00531DDE
00531E15 . 8D45 D8 LEA EAX, DWORD PTR SS:[EBP-28]
00531E18 . 50 PUSH EAX
00531E19 .^ EB B5 JMP SHORT 00531DD0
00531E1B > FF15 38104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaEn>; 跳到这里也关机
00531E21 > FF15 D4104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaEx>; 跳到这里就对了
00531E27 . 9B WAIT
00531E28 . 68 6C1E5300 PUSH 00531E6C
00531E2D . EB 2A JMP SHORT 00531E59
......
从这段程序开头可看出,它先产生一个随机数,然后根据这个随机数跳向不同的分支。因此程序可能中断在上面任意一个CALL DWORD PTR DS:[<&MSVBVM60.rtcFile>处。然后我们F8单步,知道后面是根据返回的文件大小来决定生死,不符合就关你的机没商量。因此我们要修改上面的跳转,使它都跳向正确的地方,改完后记得保存。具体见上面的注释(共修改七处)。
4.我们运行修改后的程序,找到输入注册码的地方,先输入一组假信息,然后退出程序。重新OD载入,由于是重启验证,所以一定会读取文件或注册表。然后由于MSVBVM60.DLL输入表中并无注册表相关函数,故在打开文件函数_vbaFileOpen上下断。F9运行,跳过检查文件大小,继续F9就会中断在下面的读取文件的地方:
......
00536829 . FF15 4C124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFileOpe>; <==断在这里,单步向下//打开安装目录下\FXSYS\FXSYS.INI文件
0053682F . 53 PUSH EBX
00536830 . 8D55 B8 LEA EDX, DWORD PTR SS:[EBP-48]
00536833 . 52 PUSH EDX
00536834 . FF15 48104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLine>; 读取第1行的内容
0053683A . 68 3C414200 PUSH 0042413C ; UNICODE "[F"
0053683F . 68 48414200 PUSH 00424148
00536844 . FFD7 CALL EDI
00536846 . 8BD0 MOV EDX, EAX
00536848 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
0053684B . FFD6 CALL ESI
0053684D . 50 PUSH EAX
0053684E . 68 50414200 PUSH 00424150
00536853 . FFD7 CALL EDI
00536855 . 8BD0 MOV EDX, EAX
00536857 . 8D4D 9C LEA ECX, DWORD PTR SS:[EBP-64]
0053685A . FFD6 CALL ESI
0053685C . 50 PUSH EAX
0053685D . 6A 0B PUSH 0B
0053685F . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrI>; MSVBVM60.__vbaStrI2
00536865 . 8BD0 MOV EDX, EAX
00536867 . 8D4D 98 LEA ECX, DWORD PTR SS:[EBP-68]
0053686A . FFD6 CALL ESI
0053686C . 50 PUSH EAX
0053686D . FFD7 CALL EDI
0053686F . 8BD0 MOV EDX, EAX
00536871 . 8D4D 94 LEA ECX, DWORD PTR SS:[EBP-6C]
00536874 . FFD6 CALL ESI
00536876 . 50 PUSH EAX
00536877 . 68 E0FC4100 PUSH 0041FCE0
0053687C . FFD7 CALL EDI ; 得字符串‘[FXV11]’
0053687E . 8945 88 MOV DWORD PTR SS:[EBP-78], EAX
00536881 . C745 80 08800>MOV DWORD PTR SS:[EBP-80], 8008
00536888 . 8D45 B8 LEA EAX, DWORD PTR SS:[EBP-48]
0053688B . 50 PUSH EAX
0053688C . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
0053688F . 51 PUSH ECX
00536890 . FF15 70114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarT>; 第1行的内容与'[FXV11]'比较
00536896 . 66:8BF8 MOV DI, AX ; 相等则EAX=FFFFFFFF,不等则EAX=00000000
00536899 . 8D55 94 LEA EDX, DWORD PTR SS:[EBP-6C]
0053689C . 52 PUSH EDX
0053689D . 8D45 98 LEA EAX, DWORD PTR SS:[EBP-68]
005368A0 . 50 PUSH EAX
005368A1 . 8D4D 9C LEA ECX, DWORD PTR SS:[EBP-64]
005368A4 . 51 PUSH ECX
005368A5 . 8D55 A0 LEA EDX, DWORD PTR SS:[EBP-60]
005368A8 . 52 PUSH EDX
005368A9 . 6A 04 PUSH 4
005368AB . FF15 84124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStrList
005368B1 . 83C4 14 ADD ESP, 14
005368B4 . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
005368B7 . FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
005368BD . 66:85FF TEST DI, DI
005368C0 . 74 1B JE SHORT 005368DD ; (不能跳)上面相等这里就不会跳
005368C2 . 53 PUSH EBX
005368C3 . 8D45 AC LEA EAX, DWORD PTR SS:[EBP-54]
005368C6 . 50 PUSH EAX
005368C7 . 8B3D 2C104000 MOV EDI, DWORD PTR DS:[<&MSVBVM60.__vb>; MSVBVM60.__vbaLineInputStr
005368CD . FFD7 CALL EDI ; 取得机器码; <&MSVBVM60.__vbaLineInputStr>
005368CF . 53 PUSH EBX
005368D0 . 8D4D E0 LEA ECX, DWORD PTR SS:[EBP-20]
005368D3 . 51 PUSH ECX
005368D4 . FFD7 CALL EDI ; 取得用户名
005368D6 . 53 PUSH EBX
005368D7 . 8D55 A8 LEA EDX, DWORD PTR SS:[EBP-58]
005368DA . 52 PUSH EDX
005368DB . FFD7 CALL EDI ; 取得注册码
005368DD > 53 PUSH EBX
005368DE . FF15 4C114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFile>; MSVBVM60.__vbaFileClose
005368E4 . 8B45 AC MOV EAX, DWORD PTR SS:[EBP-54]
005368E7 . 50 PUSH EAX
005368E8 . FF15 70134000 CALL DWORD PTR DS:[<&MSVBVM60.rtcR8ValF>; 机器码转为浮点数
005368EE . DD9D FCFEFFFF FSTP QWORD PTR SS:[EBP-104]
005368F4 . DB45 B4 FILD DWORD PTR SS:[EBP-4C]
005368F7 . DD9D B0FEFFFF FSTP QWORD PTR SS:[EBP-150]
005368FD . DD85 FCFEFFFF FLD QWORD PTR SS:[EBP-104]
00536903 . FF15 14114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpR8>; MSVBVM60.__vbaFpR8
00536909 . DC9D B0FEFFFF FCOMP QWORD PTR SS:[EBP-150]
0053690F . DFE0 FSTSW AX
00536911 . F6C4 40 TEST AH, 40
00536914 . 75 07 JNZ SHORT 0053691D
00536916 . B8 01000000 MOV EAX, 1
0053691B . EB 02 JMP SHORT 0053691F
0053691D > 33C0 XOR EAX, EAX
0053691F > F7D8 NEG EAX
00536921 . 66:85C0 TEST AX, AX
00536924 . 74 42 JE SHORT 00536968 ; 这里必须跳(检查机器码正确就跳)
00536926 . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
00536929 . 85C0 TEST EAX, EAX
0053692B . 75 12 JNZ SHORT 0053693F
0053692D . 8D4D A4 LEA ECX, DWORD PTR SS:[EBP-5C]
00536930 . 51 PUSH ECX
00536931 . 68 88774000 PUSH 00407788
00536936 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNew2>; MSVBVM60.__vbaNew2
0053693C . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
0053693F > 8BF0 MOV ESI, EAX
00536941 . C785 0CFFFFFF>MOV DWORD PTR SS:[EBP-F4], 0
0053694B . 8B10 MOV EDX, DWORD PTR DS:[EAX]
0053694D . 8D8D 08FFFFFF LEA ECX, DWORD PTR SS:[EBP-F8]
00536953 . 51 PUSH ECX
00536954 . 8D8D 0CFFFFFF LEA ECX, DWORD PTR SS:[EBP-F4]
0053695A . 51 PUSH ECX
0053695B . 8D4D DC LEA ECX, DWORD PTR SS:[EBP-24]
0053695E . 51 PUSH ECX
0053695F . 50 PUSH EAX
00536960 . FF52 24 CALL DWORD PTR DS:[EDX+24]
00536963 . E9 1E020000 JMP 00536B86
00536968 > 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20]
0053696B . 52 PUSH EDX
0053696C . FF15 30104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenB>; 取注册名长度
00536972 . 83F8 02 CMP EAX, 2
00536975 . 7D 14 JGE SHORT 0053698B ; 大于等于就跳
00536977 . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
0053697A . 85C0 TEST EAX, EAX
0053697C . 0F85 E0010000 JNZ 00536B62
00536982 . 8D45 A4 LEA EAX, DWORD PTR SS:[EBP-5C]
00536985 . 50 PUSH EAX
00536986 . E9 C9010000 JMP 00536B54
0053698B > C745 88 01000>MOV DWORD PTR SS:[EBP-78], 1
00536992 . C745 80 02000>MOV DWORD PTR SS:[EBP-80], 2
00536999 . 8D45 80 LEA EAX, DWORD PTR SS:[EBP-80]
0053699C . 50 PUSH EAX ; 取1位
0053699D . 6A 01 PUSH 1 ; 从第1位起
0053699F . 8B4D E0 MOV ECX, DWORD PTR SS:[EBP-20]
005369A2 . 51 PUSH ECX ; 用户名
005369A3 . 8B3D 24114000 MOV EDI, DWORD PTR DS:[<&MSVBVM60.rtcM>; MSVBVM60.rtcMidCharBstr
005369A9 . FFD7 CALL EDI ; 取用户名第1位; <&MSVBVM60.rtcMidCharBstr>
005369AB . 8BD0 MOV EDX, EAX
005369AD . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
005369B0 . FFD6 CALL ESI
005369B2 . 50 PUSH EAX
005369B3 . FF15 50104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcAnsiVa>; 取用户名字符ASCII码
005369B9 . 8985 0CFFFFFF MOV DWORD PTR SS:[EBP-F4], EAX
005369BF . 6A 01 PUSH 1
005369C1 . 8B55 A8 MOV EDX, DWORD PTR SS:[EBP-58]
005369C4 . 52 PUSH EDX
005369C5 . FF15 E4124000 CALL DWORD PTR DS:[<&MSVBVM60.rtcLeftCh>; 取注册码的左边第一位
005369CB . 8BD0 MOV EDX, EAX
005369CD . 8D4D 98 LEA ECX, DWORD PTR SS:[EBP-68]
005369D0 . FFD6 CALL ESI
005369D2 . 50 PUSH EAX
005369D3 . 6A 01 PUSH 1
005369D5 . 8B85 0CFFFFFF MOV EAX, DWORD PTR SS:[EBP-F4]
005369DB . 50 PUSH EAX
005369DC . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrI>; 用户名第1位的ASCII码转为十进制字串
005369E2 . 8BD0 MOV EDX, EAX
005369E4 . 8D4D 9C LEA ECX, DWORD PTR SS:[EBP-64]
005369E7 . FFD6 CALL ESI
005369E9 . 50 PUSH EAX
005369EA . FF15 08134000 CALL DWORD PTR DS:[<&MSVBVM60.rtcRightC>; 取十进制字串的右边的1位字符
005369F0 . 8BD0 MOV EDX, EAX
005369F2 . 8D4D 94 LEA ECX, DWORD PTR SS:[EBP-6C]
005369F5 . FFD6 CALL ESI
005369F7 . 50 PUSH EAX
005369F8 . FF15 68114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrC>; 与注册码左边第1位进行比较
005369FE . 8BD8 MOV EBX, EAX
00536A00 . F7DB NEG EBX
00536A02 . 1BDB SBB EBX, EBX
00536A04 . F7DB NEG EBX
00536A06 . F7DB NEG EBX
00536A08 . 8D4D 94 LEA ECX, DWORD PTR SS:[EBP-6C]
00536A0B . 51 PUSH ECX
00536A0C . 8D55 98 LEA EDX, DWORD PTR SS:[EBP-68]
00536A0F . 52 PUSH EDX
00536A10 . 8D45 9C LEA EAX, DWORD PTR SS:[EBP-64]
00536A13 . 50 PUSH EAX
00536A14 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536A17 . 51 PUSH ECX
00536A18 . 6A 04 PUSH 4
00536A1A . FF15 84124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStrList
00536A20 . 83C4 14 ADD ESP, 14
00536A23 . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536A26 . FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
00536A2C . 66:85DB TEST BX, BX
00536A2F . 74 5B JE SHORT 00536A8C ; 这里要跳(要爆就要改为JMP)
00536A31 . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
00536A34 . 85C0 TEST EAX, EAX
00536A36 . 75 12 JNZ SHORT 00536A4A
00536A38 . 8D55 A4 LEA EDX, DWORD PTR SS:[EBP-5C]
00536A3B . 52 PUSH EDX
00536A3C . 68 88774000 PUSH 00407788
00536A41 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNew2>; MSVBVM60.__vbaNew2
00536A47 . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
00536A4A > 8BF0 MOV ESI, EAX
00536A4C . C785 0CFFFFFF>MOV DWORD PTR SS:[EBP-F4], 0
00536A56 . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00536A58 . 8D95 08FFFFFF LEA EDX, DWORD PTR SS:[EBP-F8]
00536A5E . 52 PUSH EDX
00536A5F . 8D95 0CFFFFFF LEA EDX, DWORD PTR SS:[EBP-F4]
00536A65 . 52 PUSH EDX
00536A66 . 8D55 DC LEA EDX, DWORD PTR SS:[EBP-24]
00536A69 . 52 PUSH EDX
00536A6A . 50 PUSH EAX
00536A6B . FF51 24 CALL DWORD PTR DS:[ECX+24]
00536A6E . DBE2 FCLEX
00536A70 . 85C0 TEST EAX, EAX
00536A72 . 0F8D 51080000 JGE 005372C9
00536A78 . 6A 24 PUSH 24
00536A7A . 68 F0684100 PUSH 004168F0
00536A7F . 56 PUSH ESI
00536A80 . 50 PUSH EAX
00536A81 . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHres>; MSVBVM60.__vbaHresultCheckObj
00536A87 . E9 3D080000 JMP 005372C9
00536A8C > BB 01000000 MOV EBX, 1
00536A91 . 899D 78FFFFFF MOV DWORD PTR SS:[EBP-88], EBX
00536A97 . C785 70FFFFFF>MOV DWORD PTR SS:[EBP-90], 2
00536AA1 . 8D85 70FFFFFF LEA EAX, DWORD PTR SS:[EBP-90]
00536AA7 . 50 PUSH EAX
00536AA8 . 6A 02 PUSH 2
00536AAA . 8B4D E0 MOV ECX, DWORD PTR SS:[EBP-20]
00536AAD . 51 PUSH ECX
00536AAE . FFD7 CALL EDI ; 取用户名第2位
00536AB0 . 8BD0 MOV EDX, EAX
00536AB2 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536AB5 . FFD6 CALL ESI
00536AB7 . 50 PUSH EAX
00536AB8 . FF15 50104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcAnsiVa>; 取第2位ASCII码
00536ABE . 8985 0CFFFFFF MOV DWORD PTR SS:[EBP-F4], EAX
00536AC4 . 895D 88 MOV DWORD PTR SS:[EBP-78], EBX
00536AC7 . C745 80 02000>MOV DWORD PTR SS:[EBP-80], 2
00536ACE . 8D55 80 LEA EDX, DWORD PTR SS:[EBP-80]
00536AD1 . 52 PUSH EDX
00536AD2 . 6A 02 PUSH 2
00536AD4 . 8B45 A8 MOV EAX, DWORD PTR SS:[EBP-58]
00536AD7 . 50 PUSH EAX
00536AD8 . FFD7 CALL EDI ; 取注册码的第2位
00536ADA . 8BD0 MOV EDX, EAX
00536ADC . 8D4D 98 LEA ECX, DWORD PTR SS:[EBP-68]
00536ADF . FFD6 CALL ESI
00536AE1 . 50 PUSH EAX
00536AE2 . 53 PUSH EBX
00536AE3 . 8B8D 0CFFFFFF MOV ECX, DWORD PTR SS:[EBP-F4]
00536AE9 . 51 PUSH ECX
00536AEA . FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrI>; 第2位用户名的ASCII码转为十进制串
00536AF0 . 8BD0 MOV EDX, EAX
00536AF2 . 8D4D 9C LEA ECX, DWORD PTR SS:[EBP-64]
00536AF5 . FFD6 CALL ESI
00536AF7 . 50 PUSH EAX
00536AF8 . FF15 08134000 CALL DWORD PTR DS:[<&MSVBVM60.rtcRightC>; 取十进制串的右边一位
00536AFE . 8BD0 MOV EDX, EAX
00536B00 . 8D4D 94 LEA ECX, DWORD PTR SS:[EBP-6C]
00536B03 . FFD6 CALL ESI
00536B05 . 50 PUSH EAX
00536B06 . FF15 68114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrC>; 与注册码第2位进行比较
00536B0C . 8BD8 MOV EBX, EAX
00536B0E . F7DB NEG EBX
00536B10 . 1BDB SBB EBX, EBX
00536B12 . F7DB NEG EBX
00536B14 . F7DB NEG EBX
00536B16 . 8D55 94 LEA EDX, DWORD PTR SS:[EBP-6C]
00536B19 . 52 PUSH EDX
00536B1A . 8D45 98 LEA EAX, DWORD PTR SS:[EBP-68]
00536B1D . 50 PUSH EAX
00536B1E . 8D4D 9C LEA ECX, DWORD PTR SS:[EBP-64]
00536B21 . 51 PUSH ECX
00536B22 . 8D55 A0 LEA EDX, DWORD PTR SS:[EBP-60]
00536B25 . 52 PUSH EDX
00536B26 . 6A 04 PUSH 4
00536B28 . FF15 84124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStrList
00536B2E . 8D85 70FFFFFF LEA EAX, DWORD PTR SS:[EBP-90]
00536B34 . 50 PUSH EAX
00536B35 . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536B38 . 51 PUSH ECX
00536B39 . 6A 02 PUSH 2
00536B3B . FF15 3C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVarList
00536B41 . 83C4 20 ADD ESP, 20
00536B44 . 66:85DB TEST BX, BX
00536B47 . 74 5B JE SHORT 00536BA4 ; 这里要跳(要爆就改为JMP)
00536B49 . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
00536B4C . 85C0 TEST EAX, EAX
00536B4E . 75 12 JNZ SHORT 00536B62
00536B50 . 8D55 A4 LEA EDX, DWORD PTR SS:[EBP-5C]
00536B53 . 52 PUSH EDX
00536B54 > 68 88774000 PUSH 00407788
00536B59 . FF15 58124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaNew2>; MSVBVM60.__vbaNew2
00536B5F . 8B45 A4 MOV EAX, DWORD PTR SS:[EBP-5C]
00536B62 > 8BF0 MOV ESI, EAX
00536B64 . C785 0CFFFFFF>MOV DWORD PTR SS:[EBP-F4], 0
00536B6E . 8B08 MOV ECX, DWORD PTR DS:[EAX]
00536B70 . 8D95 08FFFFFF LEA EDX, DWORD PTR SS:[EBP-F8]
00536B76 . 52 PUSH EDX
00536B77 . 8D95 0CFFFFFF LEA EDX, DWORD PTR SS:[EBP-F4]
00536B7D . 52 PUSH EDX
00536B7E . 8D55 DC LEA EDX, DWORD PTR SS:[EBP-24]
00536B81 . 52 PUSH EDX
00536B82 . 50 PUSH EAX
00536B83 . FF51 24 CALL DWORD PTR DS:[ECX+24]
00536B86 > DBE2 FCLEX
00536B88 . 85C0 TEST EAX, EAX
00536B8A . 0F8D 39070000 JGE 005372C9
00536B90 . 6A 24 PUSH 24
00536B92 . 68 F0684100 PUSH 004168F0
00536B97 . 56 PUSH ESI
00536B98 . 50 PUSH EAX
00536B99 . FF15 A8104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHres>; MSVBVM60.__vbaHresultCheckObj
00536B9F . E9 25070000 JMP 005372C9
00536BA4 > C745 88 04000>MOV DWORD PTR SS:[EBP-78], 80020004
00536BAB . C745 80 0A000>MOV DWORD PTR SS:[EBP-80], 0A
00536BB2 . 8D45 80 LEA EAX, DWORD PTR SS:[EBP-80]
00536BB5 . 50 PUSH EAX
00536BB6 . 6A 03 PUSH 3
00536BB8 . 8B4D A8 MOV ECX, DWORD PTR SS:[EBP-58]
00536BBB . 51 PUSH ECX
00536BBC . FFD7 CALL EDI ; 从注册码第3位起取10位(不足就取到尾)
00536BBE . 8BD0 MOV EDX, EAX
00536BC0 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536BC3 . FFD6 CALL ESI
00536BC5 . 50 PUSH EAX
00536BC6 . FF15 70134000 CALL DWORD PTR DS:[<&MSVBVM60.rtcR8ValF>; 转化为浮点数
00536BCC . FF15 E8124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>; 转为整数
00536BD2 . 8BD8 MOV EBX, EAX
00536BD4 . 895D C8 MOV DWORD PTR SS:[EBP-38], EBX
00536BD7 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536BDA . FF15 68134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStr
00536BE0 . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536BE3 . FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
00536BE9 . 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20]
00536BEC . 52 PUSH EDX
00536BED . FF15 30104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenB>; 取用户名长度
00536BF3 . 83F8 01 CMP EAX, 1 ; 长度与1比较
00536BF6 . 7E 0C JLE SHORT 00536C04
00536BF8 . 81FB 3F420F00 CMP EBX, 0F423F ; 注册码后几位与0xf423f=999999比较
00536BFE . 7E 04 JLE SHORT 00536C04
00536C00 . 33DB XOR EBX, EBX ; 大于则EBX=0
00536C02 . EB 05 JMP SHORT 00536C09
00536C04 > BB 01000000 MOV EBX, 1 ; 小于等于则EBX=1
00536C09 > 8B45 AC MOV EAX, DWORD PTR SS:[EBP-54]
00536C0C . 50 PUSH EAX
00536C0D . FF15 54124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8St>; 机器码转为浮点数
00536C13 . DC1D 38244000 FCOMP QWORD PTR DS:[402438] ; 与101.0比较
00536C19 . DFE0 FSTSW AX
00536C1B . F6C4 41 TEST AH, 41
00536C1E . 74 07 JE SHORT 00536C27
00536C20 . B8 01000000 MOV EAX, 1 ; 机器码=101则EAX=1
00536C25 . EB 02 JMP SHORT 00536C29
00536C27 > 33C0 XOR EAX, EAX ; 机器码不等于101则EAX=0
00536C29 > 0BD8 OR EBX, EAX
00536C2B 0F85 98060000 JNZ 005372C9 ; 不能跳(注册码应该在9位以上),要爆就NOP掉
00536C31 . C785 48FFFFFF>MOV DWORD PTR SS:[EBP-B8], 1
00536C3B . C785 40FFFFFF>MOV DWORD PTR SS:[EBP-C0], 2
00536C45 . 8D95 40FFFFFF LEA EDX, DWORD PTR SS:[EBP-C0]
00536C4B . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536C4E . FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarM>; MSVBVM60.__vbaVarMove
00536C54 . C785 DCFEFFFF>MOV DWORD PTR SS:[EBP-124], 3
00536C5E . BB 01000000 MOV EBX, 1 ; 循环变量BX初始置1
00536C63 > 66:3B9D DCFEF>CMP BX, WORD PTR SS:[EBP-124]
00536C6A . 7F 7C JG SHORT 00536CE8 ; BX大于3退出循环
00536C6C . C745 88 01000>MOV DWORD PTR SS:[EBP-78], 1
00536C73 . C745 80 02000>MOV DWORD PTR SS:[EBP-80], 2
00536C7A . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536C7D . 51 PUSH ECX
00536C7E . 0FBFD3 MOVSX EDX, BX
00536C81 . 52 PUSH EDX
00536C82 . 8B45 AC MOV EAX, DWORD PTR SS:[EBP-54]
00536C85 . 50 PUSH EAX
00536C86 . FFD7 CALL EDI ; 机器码从第BX位起取1位
00536C88 . 8BD0 MOV EDX, EAX
00536C8A . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536C8D . FFD6 CALL ESI
00536C8F . 50 PUSH EAX
00536C90 . FF15 50104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcAnsiVa>; 得其ASCII
00536C96 . 66:8985 38FFF>MOV WORD PTR SS:[EBP-C8], AX
00536C9D . C785 30FFFFFF>MOV DWORD PTR SS:[EBP-D0], 2
00536CA7 . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536CAA . 51 PUSH ECX
00536CAB . 8D95 30FFFFFF LEA EDX, DWORD PTR SS:[EBP-D0]
00536CB1 . 52 PUSH EDX
00536CB2 . 8D85 70FFFFFF LEA EAX, DWORD PTR SS:[EBP-90]
00536CB8 . 50 PUSH EAX
00536CB9 . FF15 BC124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarA>; ASCII累加(初始为1),得数A
00536CBF . 8BD0 MOV EDX, EAX
00536CC1 . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536CC4 . FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarM>; MSVBVM60.__vbaVarMove
00536CCA . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536CCD . FF15 68134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStr
00536CD3 . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536CD6 . FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
00536CDC . B8 01000000 MOV EAX, 1
00536CE1 . 03D8 ADD EBX, EAX ; 循环变量加1
00536CE3 .^ E9 7BFFFFFF JMP 00536C63 ; 循环
00536CE8 > 8B4D AC MOV ECX, DWORD PTR SS:[EBP-54]
00536CEB . 51 PUSH ECX
00536CEC . FF15 30104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenB>; 取机器码长度
00536CF2 . 8985 D4FEFFFF MOV DWORD PTR SS:[EBP-12C], EAX
00536CF8 . BB 04000000 MOV EBX, 4 ; 循环变量BX=4
00536CFD > 66:3B9D D4FEF>CMP BX, WORD PTR SS:[EBP-12C] ; 与机器码长度进行比较
00536D04 . 7F 7C JG SHORT 00536D82 ; 大于就退出循环
00536D06 . C745 88 01000>MOV DWORD PTR SS:[EBP-78], 1
00536D0D . C745 80 02000>MOV DWORD PTR SS:[EBP-80], 2
00536D14 . 8D55 80 LEA EDX, DWORD PTR SS:[EBP-80]
00536D17 . 52 PUSH EDX
00536D18 . 0FBFC3 MOVSX EAX, BX
00536D1B . 50 PUSH EAX
00536D1C . 8B4D AC MOV ECX, DWORD PTR SS:[EBP-54]
00536D1F . 51 PUSH ECX
00536D20 . FFD7 CALL EDI ; 取机器码第BX位
00536D22 . 8BD0 MOV EDX, EAX
00536D24 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536D27 . FFD6 CALL ESI
00536D29 . 50 PUSH EAX
00536D2A . FF15 50104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcAnsiVa>; 得其ASCII
00536D30 . 66:8985 38FFF>MOV WORD PTR SS:[EBP-C8], AX
00536D37 . C785 30FFFFFF>MOV DWORD PTR SS:[EBP-D0], 2
00536D41 . 8D55 B8 LEA EDX, DWORD PTR SS:[EBP-48]
00536D44 . 52 PUSH EDX
00536D45 . 8D85 30FFFFFF LEA EAX, DWORD PTR SS:[EBP-D0]
00536D4B . 50 PUSH EAX
00536D4C . 8D8D 70FFFFFF LEA ECX, DWORD PTR SS:[EBP-90]
00536D52 . 51 PUSH ECX
00536D53 . FF15 D4114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarM>; 与A累乘,得数B
00536D59 . 8BD0 MOV EDX, EAX
00536D5B . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536D5E . FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarM>; MSVBVM60.__vbaVarMove
00536D64 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536D67 . FF15 68134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStr
00536D6D . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536D70 . FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
00536D76 . B8 01000000 MOV EAX, 1
00536D7B . 03D8 ADD EBX, EAX ; 循环变量加1
00536D7D .^ E9 7BFFFFFF JMP 00536CFD ; 循环
00536D82 > 8D55 B8 LEA EDX, DWORD PTR SS:[EBP-48]
00536D85 . 52 PUSH EDX
00536D86 . FF15 90124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8Va>; B转为浮点数
00536D8C . E8 6DF9ECFF CALL ; 开方
00536D91 . DD9D FCFEFFFF FSTP QWORD PTR SS:[EBP-104]
00536D97 . 6A 05 PUSH 5
00536D99 . 8B85 00FFFFFF MOV EAX, DWORD PTR SS:[EBP-100]
00536D9F . 50 PUSH EAX
00536DA0 . 8B8D FCFEFFFF MOV ECX, DWORD PTR SS:[EBP-104]
00536DA6 . 51 PUSH ECX
00536DA7 . FF15 B4114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrR>; 开方结果转为字串
00536DAD . 8BD0 MOV EDX, EAX
00536DAF . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536DB2 . FFD6 CALL ESI
00536DB4 . 50 PUSH EAX
00536DB5 . FF15 08134000 CALL DWORD PTR DS:[<&MSVBVM60.rtcRightC>; 取右边5位
00536DBB . 8BD0 MOV EDX, EAX
00536DBD . 8D4D 9C LEA ECX, DWORD PTR SS:[EBP-64]
00536DC0 . FFD6 CALL ESI
00536DC2 . 50 PUSH EAX
00536DC3 . FF15 70134000 CALL DWORD PTR DS:[<&MSVBVM60.rtcR8ValF>; 再转为浮点数,得数C
00536DC9 . DD9D F4FEFFFF FSTP QWORD PTR SS:[EBP-10C]
00536DCF . 8D55 B8 LEA EDX, DWORD PTR SS:[EBP-48]
00536DD2 . 52 PUSH EDX
00536DD3 . FF15 90124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8Va>; B转为浮点数
00536DD9 . E8 20F9ECFF CALL ; 开方
00536DDE . DC0D B8614000 FMUL QWORD PTR DS:[4061B8] ; 乘10000.0
00536DE4 . FF15 54134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFPIn>; 取整数部分,得D
00536DEA . DC85 F4FEFFFF FADD QWORD PTR SS:[EBP-10C] ; 与上面的得到的位(5位数)相加,得E
00536DF0 . DD9D 48FFFFFF FSTP QWORD PTR SS:[EBP-B8]
00536DF6 . C785 40FFFFFF>MOV DWORD PTR SS:[EBP-C0], 5
00536E00 . 8D95 40FFFFFF LEA EDX, DWORD PTR SS:[EBP-C0]
00536E06 . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536E09 . FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarM>; MSVBVM60.__vbaVarMove
00536E0F . 8D45 9C LEA EAX, DWORD PTR SS:[EBP-64]
00536E12 . 50 PUSH EAX
00536E13 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536E16 . 51 PUSH ECX
00536E17 . 6A 02 PUSH 2
00536E19 . FF15 84124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStrList
00536E1F . 83C4 0C ADD ESP, 0C
00536E22 . C745 88 01000>MOV DWORD PTR SS:[EBP-78], 1
00536E29 . C745 80 02000>MOV DWORD PTR SS:[EBP-80], 2
00536E30 . 8D55 80 LEA EDX, DWORD PTR SS:[EBP-80]
00536E33 . 52 PUSH EDX
00536E34 . 6A 01 PUSH 1
00536E36 . 8B45 E0 MOV EAX, DWORD PTR SS:[EBP-20]
00536E39 . 50 PUSH EAX
00536E3A . FFD7 CALL EDI ; 取用户名的第1位
00536E3C . 8BD0 MOV EDX, EAX
00536E3E . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536E41 . FFD6 CALL ESI
00536E43 . 50 PUSH EAX
00536E44 . FF15 50104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcAnsiVa>; 取其ASCII码
00536E4A . 8985 0CFFFFFF MOV DWORD PTR SS:[EBP-F4], EAX
00536E50 . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536E53 . 51 PUSH ECX
00536E54 . FF15 90124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8Va>; 取上面两浮点数相加的结果E
00536E5A . E8 9FF8ECFF CALL ; 开方
00536E5F . E8 8EF8ECFF CALL ; ln
00536E64 . DD9D FCFEFFFF FSTP QWORD PTR SS:[EBP-104]
00536E6A . DB45 C8 FILD DWORD PTR SS:[EBP-38] ; 注册码的后10位转为浮点数(第3位起)
00536E6D . DD9D A8FEFFFF FSTP QWORD PTR SS:[EBP-158]
00536E73 . DD85 FCFEFFFF FLD QWORD PTR SS:[EBP-104]
00536E79 . DC0D B0614000 FMUL QWORD PTR DS:[4061B0] ; ln结果乘100
00536E7F . FF15 54134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFPIn>; 取整数部分,得数F
00536E85 . 8B95 0CFFFFFF MOV EDX, DWORD PTR SS:[EBP-F4] ; 用户名第1位ASCII码
00536E8B . 83C2 F9 ADD EDX, -7 ; 减7
00536E8E . 0FBFC2 MOVSX EAX, DX
00536E91 . 8985 A4FEFFFF MOV DWORD PTR SS:[EBP-15C], EAX
00536E97 . DB85 A4FEFFFF FILD DWORD PTR SS:[EBP-15C]
00536E9D . DD9D 9CFEFFFF FSTP QWORD PTR SS:[EBP-164] ; 转为浮点数
00536EA3 . DC8D 9CFEFFFF FMUL QWORD PTR SS:[EBP-164] ; 乘F
00536EA9 . DCAD A8FEFFFF FSUBR QWORD PTR SS:[EBP-158] ; 注册码的后10位-上面的结果
00536EAF . FF15 E8124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpI4>; 转为16进制数,得G
00536EB5 . 8945 C8 MOV DWORD PTR SS:[EBP-38], EAX
00536EB8 . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536EBB . FF15 68134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStr
00536EC1 . 8D4D 80 LEA ECX, DWORD PTR SS:[EBP-80]
00536EC4 . FF15 20104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVar
00536ECA . 8B4D E0 MOV ECX, DWORD PTR SS:[EBP-20]
00536ECD . 51 PUSH ECX
00536ECE . FF15 30104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenB>; 取用户名长度
00536ED4 . 8BD8 MOV EBX, EAX ; 循环变量BX初值=用户名长度
00536ED6 > B8 02000000 MOV EAX, 2
00536EDB . 66:3BD8 CMP BX, AX
00536EDE . 8B55 C8 MOV EDX, DWORD PTR SS:[EBP-38]
00536EE1 . 8995 48FFFFFF MOV DWORD PTR SS:[EBP-B8], EDX
00536EE7 . C785 40FFFFFF>MOV DWORD PTR SS:[EBP-C0], 3
00536EF1 . 0F8C EA000000 JL 00536FE1 ; 循环变量小于2时退出循环
00536EF7 . C785 78FFFFFF>MOV DWORD PTR SS:[EBP-88], 1
00536F01 . 8985 70FFFFFF MOV DWORD PTR SS:[EBP-90], EAX
00536F07 . 8D85 70FFFFFF LEA EAX, DWORD PTR SS:[EBP-90]
00536F0D . 50 PUSH EAX
00536F0E . 0FBFCB MOVSX ECX, BX
00536F11 . 51 PUSH ECX
00536F12 . 8B55 E0 MOV EDX, DWORD PTR SS:[EBP-20]
00536F15 . 52 PUSH EDX
00536F16 . FFD7 CALL EDI ; 取用户名第BX位
00536F18 . 8BD0 MOV EDX, EAX
00536F1A . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536F1D . FFD6 CALL ESI
00536F1F . 50 PUSH EAX
00536F20 . FF15 50104000 CALL DWORD PTR DS:[<&MSVBVM60.rtcAnsiVa>; 得ASCII
00536F26 . 83E8 32 SUB EAX, 32 ; 减0x32,得H
00536F29 . 66:8985 28FFF>MOV WORD PTR SS:[EBP-D8], AX
00536F30 . C785 20FFFFFF>MOV DWORD PTR SS:[EBP-E0], 2
00536F3A . 8D45 B8 LEA EAX, DWORD PTR SS:[EBP-48]
00536F3D . 50 PUSH EAX
00536F3E . FF15 90124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaR8Va>; 数E
00536F44 . E8 A9F7ECFF CALL ; ln
00536F49 . DC0D B0614000 FMUL QWORD PTR DS:[4061B0] ; 乘100
00536F4F . FF15 54134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFPIn>; 取整,得I
00536F55 . DD9D 18FFFFFF FSTP QWORD PTR SS:[EBP-E8]
00536F5B . C785 10FFFFFF>MOV DWORD PTR SS:[EBP-F0], 5
00536F65 . 8D8D 40FFFFFF LEA ECX, DWORD PTR SS:[EBP-C0]
00536F6B . 51 PUSH ECX
00536F6C . 8D55 B8 LEA EDX, DWORD PTR SS:[EBP-48]
00536F6F . 52 PUSH EDX
00536F70 . 8D45 80 LEA EAX, DWORD PTR SS:[EBP-80]
00536F73 . 50 PUSH EAX
00536F74 . FF15 04104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarS>; E-G
00536F7A . 50 PUSH EAX
00536F7B . 8D8D 20FFFFFF LEA ECX, DWORD PTR SS:[EBP-E0]
00536F81 . 51 PUSH ECX
00536F82 . 8D95 60FFFFFF LEA EDX, DWORD PTR SS:[EBP-A0]
00536F88 . 52 PUSH EDX
00536F89 . FF15 BC124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarA>; +H
00536F8F . 50 PUSH EAX
00536F90 . 8D85 10FFFFFF LEA EAX, DWORD PTR SS:[EBP-F0]
00536F96 . 50 PUSH EAX
00536F97 . 8D8D 50FFFFFF LEA ECX, DWORD PTR SS:[EBP-B0]
00536F9D . 51 PUSH ECX
00536F9E . FF15 BC124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarA>; +I
00536FA4 . 50 PUSH EAX
00536FA5 . FF15 A8124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI4Va>; MSVBVM60.__vbaI4Var
00536FAB . 8945 C8 MOV DWORD PTR SS:[EBP-38], EAX ; G=E-G+H+I
00536FAE . 8D4D A0 LEA ECX, DWORD PTR SS:[EBP-60]
00536FB1 . FF15 68134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeStr
00536FB7 . 8D95 50FFFFFF LEA EDX, DWORD PTR SS:[EBP-B0]
00536FBD . 52 PUSH EDX
00536FBE . 8D85 60FFFFFF LEA EAX, DWORD PTR SS:[EBP-A0]
00536FC4 . 50 PUSH EAX
00536FC5 . 8D8D 70FFFFFF LEA ECX, DWORD PTR SS:[EBP-90]
00536FCB . 51 PUSH ECX
00536FCC . 6A 03 PUSH 3
00536FCE . FF15 3C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFree>; MSVBVM60.__vbaFreeVarList
00536FD4 . 83C4 10 ADD ESP, 10
00536FD7 . 83C8 FF OR EAX, FFFFFFFF
00536FDA . 03D8 ADD EBX, EAX ; BX减1
00536FDC .^ E9 F5FEFFFF JMP 00536ED6 ; 循环
00536FE1 > 8D95 40FFFFFF LEA EDX, DWORD PTR SS:[EBP-C0]
00536FE7 . 8D4D B8 LEA ECX, DWORD PTR SS:[EBP-48]
00536FEA . FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarM>; MSVBVM60.__vbaVarMove
00536FF0 . C785 48FFFFFF>MOV DWORD PTR SS:[EBP-B8], 0
00536FFA . C785 40FFFFFF>MOV DWORD PTR SS:[EBP-C0], 8002
00537004 . 8D45 B8 LEA EAX, DWORD PTR SS:[EBP-48]
00537007 . 50 PUSH EAX ; 最后结果G
00537008 . 8D8D 40FFFFFF LEA ECX, DWORD PTR SS:[EBP-C0]
0053700E . 51 PUSH ECX ; 0
0053700F . FF15 70114000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarT>; G=0?
00537015 . 66:85C0 TEST AX, AX
00537018 0F84 AB020000 JE 005372C9 ; 相等就注册成功(要爆就改为NOP)
......
5.算法总结
1.注册码的第1位等于用户名第1位字符的ASCII码十进制形式的右边第1位;
2.注册码的第2位等于用户名第2位字符的ASCII码十进制形式的右边第1位;
3.机器码前3位ASCII码累加+1,得数A;
4.数A乘以机器码从第4位起的各位ASCII码,得数B;
5.(数B开方×10000取整)+(数B开方结果右边5位),得数E;
6.ln(数E开方)×100取整,得数F;
7.注册码后几位(从第3位起)为:(E-INT(100*ln(E))+50)×(用户名长度-1)-用户名从第2位起的ASCII码之和+(第户名第1位的ASCII码-7)×F。
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢! 2007年02月04日 21:55:02
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!