007C0F7C 51 PUSH ECX
007C0F7D 6A 40 PUSH 40
007C0F7F 8D95 3CFFFFFF LEA EDX,DWORD PTR SS:[EBP-C4]
007C0F85 52 PUSH EDX ; 注册成功的对话框
007C0F86 FF15 7C104000 CALL DWORD PTR DS:[〈&MSVBVM60.#595〉] ; MSVBVM60.rtcMsgBox
007C0F8C 8D45 8C LEA EAX,DWORD PTR SS:[EBP-74]
其实直接在__vbaVarTstEq上下断,就可以看到注册码了。
不过瘾,那就继续分析程序的注册码是怎么形成的:
程序在不同的电脑上有不同的注册码,可能跟硬盘序列号有关,于是命令行下断:bp GetVolumeInformationA
中断后,来到这里:
007BFD0B . 50 PUSH EAX
007BFD0C . E8 BBF2C4FF CALL 音乐海盗.0040EFCC ; 读取程序所在分区的硬盘序列号
偶的硬盘序号:80D252D7
下面的注释中的数据是偶机器上得到的:
007BFD11 . FF15 60104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaSetSystemErr〉; MSVBVM60.__vbaSetSystemError
007BFD17 . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
007BFD1A . 52 PUSH EDX
007BFD1B . 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
007BFD1E . 50 PUSH EAX
007BFD1F . FF15 2C114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrToUnicode〉; MSVBVM60.__vbaStrToUnicode
007BFD25 . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
007BFD28 . 8B35 14124000 MOV ESI,DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉] ; MSVBVM60.__vbaFreeStr
007BFD2E . FFD6 CALL ESI ; 〈&MSVBVM60.__vbaFreeStr〉
007BFD30 . 6A 06 PUSH 6 ; 堆栈中压入6
007BFD32 . 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]
007BFD35 . 51 PUSH ECX ; 硬盘序号转换成10进制字符串得到"-2133699881"
007BFD36 . FF15 18104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrI4〉] ; MSVBVM60.__vbaStrI4
007BFD3C . 8BD0 MOV EDX,EAX
007BFD3E . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
007BFD41 . 8B3D F8114000 MOV EDI,DWORD PTR DS:[〈&MSVBVM60.__vbaStrMove〉] ; MSVBVM60.__vbaStrMove
007BFD47 . FFD7 CALL EDI ; 〈&MSVBVM60.__vbaStrMove〉
007BFD49 . 50 PUSH EAX ; 上面堆栈中压入6,这里取硬盘序号的前6位"-21336"
007BFD4A . FF15 E4114000 CALL DWORD PTR DS:[〈&MSVBVM60.#616〉] ; MSVBVM60.rtcLeftCharBstr
007BFD50 . 8BD0 MOV EDX,EAX
007BFD52 . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
007BFD55 . FFD7 CALL EDI ; 〈&MSVBVM60.__vbaStrMove〉
007BFD57 . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
007BFD5A . FFD6 CALL ESI ; 〈&MSVBVM60.__vbaFreeStr〉
007BFD5C . FF15 78104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaExitProc〉] ; MSVBVM60.__vbaExitProc
007BFD62 . 68 A7FD7B00 PUSH 音乐海盗.007BFDA7
007BFD67 . EB 34 JMP SHORT 音乐海盗.007BFD9D
007BFD69 . BA 14FF4000 MOV EDX,音乐海盗.0040FF14
007BFD6E . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
007BFD71 . FF15 9C114000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaStrCopy〉] ; MSVBVM60.__vbaStrCopy
007BFD77 . FF15 78104000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaExitProc〉] ; MSVBVM60.__vbaExitProc
007BFD7D . 68 A7FD7B00 PUSH 音乐海盗.007BFDA7
007BFD82 . EB 19 JMP SHORT 音乐海盗.007BFD9D
007BFD84 . F645 F4 04 TEST BYTE PTR SS:[EBP-C],4
007BFD88 . 74 09 JE SHORT 音乐海盗.007BFD93
007BFD8A . 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
007BFD8D . FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉] ; MSVBVM60.__vbaFreeStr
007BFD93 〉 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
007BFD96 . FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉] ; MSVBVM60.__vbaFreeStr
007BFD9C . C3 RETN
007BFD9D 〉 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
007BFDA0 . FF15 14124000 CALL DWORD PTR DS:[〈&MSVBVM60.__vbaFreeStr〉] ; MSVBVM60.__vbaFreeStr
007BFDA6 . C3 RETN
这段代码是:取程序所在分区的序列号:80D2-52D7
转为10进制字符串得到:"-2133699881"
再取前6位得到:"-21336"