0167:004BACDE MOV EAX,[EBP-0C]
EAX中是我的使用者名稱
0167:004BACE1 CALL 00403E38
0167:004BACE6 MOV EDI,EAX
0167:004BACE8 TEST EDI,EDI
0167:004BACEA JNG 004BAD24
0167:004BACEC MOV EBX,01
這個1後來要用到
0167:004BACF1 LEA EAX,[EBP-10]
0167:004BACF4 PUSH EAX
0167:004BACF5 MOV ECX,01
0167:004BACFA MOV EDX,EBX
0167:004BACFC MOV EAX,[EBP-0C]
0167:004BACFF CALL 00404040
0167:004BAD04 MOV EAX,[EBP-10]
0167:004BAD07 CALL 00403FFC
0167:004BAD0C MOV AL,[EAX]
將使用者名稱的第一個字元放入AL
0167:004BAD0E LEA EDX,[EBX+17]
EDX=1+23=24
0167:004BAD11 IMUL EDX,ESI
此時ESI=0,EDX=0
0167:004BAD14 AND EAX,FF
0167:004BAD19 IMUL EAX,EAX,BYTE +17 AL乘以23(即第一個字元乘以23)
0167:004BAD1C ADD EDX,EAX
EDX=EDX+EAX
0167:004BAD1E MOV ESI,EDX
ESI=EDX
0167:004BAD20 INC EBX
EBX+1
0167:004BAD21 DEC EDI
EDI-1(EDI是使用者名稱的長度)
0167:004BAD22 JNZ 004BACF1
不為零則跳(即還有使用者名稱字元沒有計算)
0167:004BAD24 CMP ESI,[EBP-08]
ESI中是正確的註冊碼,EBP-8中是你輸入的註冊碼
示例:使用者名稱為123,註冊碼輸入321
計算:真實註冊碼={[(49x23+24x0)x25+50x23]x26+51x23}=763623
序號產生器寫起來不難~~~~~~~~~~~~~~