PCMark04的簡單演算法

看雪資料發表於2015-11-15

標 題: PCMark04的簡單演算法

發帖人:fchker

時 間: 2005-01-21 15:28 

詳細資訊: 



PCMark04的演算法,很簡單,高手略過吧。
PCMark04用來給電腦打分的,未註冊有好多功能限制,本來打算爆破的,沒想到它的演算法如此簡單,就算一下吧;
VC7.0+無殼,直接分析了;
用MessageBoxA直接就斷下了
00413DC0   /$  56                push esi
00413DC1   |.  8B7424 08         mov esi,dword ptr ss:[esp+8]
00413DC5   |.  57                push edi
00413DC6   |.  8BF9              mov edi,ecx
00413DC8   |.  6A 05             push 5                                    ;  提取第5位值
00413DCA   |.  8BCE              mov ecx,esi
00413DCC   |.  FF15 80E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413DD2   |.  8038 2D           cmp byte ptr ds:[eax],2D                  ;  檢測第5位是否“-”
00413DD5   |.  75 0D             jnz short PCMark04.00413DE4               ;  不是的話就檢測第4位
00413DD7   |.  56                push esi                                  ; /Arg1
00413DD8   |.  8BCF              mov ecx,edi                               ; |
00413DDA   |.  E8 D1F9FFFF       call PCMark04.004137B0                    ; \PCMark04.004137B0
00413DDF   |.  5F                pop edi
00413DE0   |.  5E                pop esi
00413DE1   |.  C2 0400           retn 4
00413DE4   |>  6A 04             push 4                                    ;  提取第4位值
00413DE6   |.  8BCE              mov ecx,esi
00413DE8   |.  FF15 80E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413DEE   |.  8038 2D           cmp byte ptr ds:[eax],2D                  ;  檢測第4位是否“-”
00413DF1   |.  75 0D             jnz short PCMark04.00413E00               ;  也不是的話就OVER
00413DF3   |.  56                push esi                                  ; /Arg1
00413DF4   |.  8BCF              mov ecx,edi                               ; |
00413DF6   |.  E8 15FDFFFF       call PCMark04.00413B10                    ; \PCMark04.00413B10
00413DFB   |.  5F                pop edi
00413DFC   |.  5E                pop esi
00413DFD   |.  C2 0400           retn 4
00413E00   |>  5F                pop edi
00413E01   |.  32C0              xor al,al                                 ;al=0 啦
00413E03   |.  5E                pop esi
00413E04   \.  C2 0400           retn 4

我追進00413DF6:
00413B10   /$  6A FF             push -1
00413B12   |.  68 21A04300       push PCMark04.0043A021                    ;  SE handler installation
00413B17   |.  64:A1 00000000    mov eax,dword ptr fs:[0]
00413B1D   |.  50                push eax
00413B1E   |.  64:8925 00000000  mov dword ptr fs:[0],esp
00413B25   |.  83EC 3C           sub esp,3C
00413B28   |.  A1 A02D4500       mov eax,dword ptr ds:[452DA0]
00413B2D   |.  55                push ebp
00413B2E   |.  57                push edi
00413B2F   |.  8B7C24 54         mov edi,dword ptr ss:[esp+54]
00413B33   |.  8BE9              mov ebp,ecx
00413B35   |.  8BCF              mov ecx,edi
00413B37   |.  894424 40         mov dword ptr ss:[esp+40],eax
00413B3B   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413B41   |.  83F8 18           cmp eax,18                                ;  長度=0x18
00413B44   |.  0F85 69020000     jnz PCMark04.00413DB3
00413B4A   |.  6A 04             push 4                                    ;  檢測第4位是否“-”
00413B4C   |.  8BCF              mov ecx,edi
00413B4E   |.  FF15 80E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413B54   |.  8038 2D           cmp byte ptr ds:[eax],2D                  ;  同上
00413B57   |.  0F85 56020000     jnz PCMark04.00413DB3
00413B5D   |.  6A 09             push 9
00413B5F   |.  8BCF              mov ecx,edi
00413B61   |.  FF15 80E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413B67   |.  8038 2D           cmp byte ptr ds:[eax],2D
00413B6A   |.  0F85 43020000     jnz PCMark04.00413DB3
00413B70   |.  6A 0E             push 0E
00413B72   |.  8BCF              mov ecx,edi
00413B74   |.  FF15 80E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413B7A   |.  8038 2D           cmp byte ptr ds:[eax],2D
00413B7D   |.  0F85 30020000     jnz PCMark04.00413DB3
00413B83   |.  6A 13             push 13
00413B85   |.  8BCF              mov ecx,edi
00413B87   |.  FF15 80E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413B8D   |.  8038 2D           cmp byte ptr ds:[eax],2D                  ;公6次,也就是說註冊碼格式要像.....往下看!!!
00413B90   |.  0F85 1D020000     jnz PCMark04.00413DB3
00413B96   |.  68 0C134400       push PCMark04.0044130C                    ;  ASCII "1XB4-ZVYV-72X4-QXJH-19LR"
00413B9B   |.  57                push edi
00413B9C   |.  FF15 74E74300     call dword ptr ds:[<&MSVCP71.??$?8DU?$cha>;  上面是黑名單
00413BA2   |.  83C4 08           add esp,8
00413BA5   |.  84C0              test al,al
00413BA7   |.  0F85 06020000     jnz PCMark04.00413DB3
00413BAD   |.  53                push ebx
00413BAE   |.  56                push esi
00413BAF   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413BB3   |.  FF15 4CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >
00413BB9   |.  8D4424 2C         lea eax,dword ptr ss:[esp+2C]
00413BBD   |.  33DB              xor ebx,ebx
00413BBF   |.  50                push eax
00413BC0   |.  8BCD              mov ecx,ebp
00413BC2   |.  895C24 58         mov dword ptr ss:[esp+58],ebx
00413BC6   |.  E8 E5F5FFFF       call PCMark04.004131B0                    ;  “B2D6FHJ1LN5ST9E3VWX8YZQ7U40KRAMCP”出來了
00413BCB   |.  8BCF              mov ecx,edi                               ;   關鍵的字串
00413BCD   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413BD3   |.  50                push eax
00413BD4   |.  8D4C24 20         lea ecx,dword ptr ss:[esp+20]
00413BD8   |.  E8 A3FBFFFF       call PCMark04.00413780
00413BDD   |.  8BCF              mov ecx,edi
00413BDF   |.  C64424 54 01      mov byte ptr ss:[esp+54],1
00413BE4   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413BEA   |.  85C0              test eax,eax
00413BEC   |.  8B7424 20         mov esi,dword ptr ss:[esp+20]
00413BF0   |.  76 37             jbe short PCMark04.00413C29
00413BF2   |>  53                /push ebx
00413BF3   |.  8BCF              |mov ecx,edi
00413BF5   |.  FF15 80E74300     |call dword ptr ds:[<&MSVCP71.std::basic_>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator[]
00413BFB   |.  33C9              |xor ecx,ecx
00413BFD   |.  8A08              |mov cl,byte ptr ds:[eax]                 ;  註冊碼第一組第一位
00413BFF   |.  6A 00             |push 0
00413C01   |.  51                |push ecx
00413C02   |.  8D4C24 34         |lea ecx,dword ptr ss:[esp+34]
00413C06   |.  FF15 20E74300     |call dword ptr ds:[<&MSVCP71.std::basic_>;  註冊碼在上面字串的位置
00413C0C   |.  8B15 88E74300     |mov edx,dword ptr ds:[<&MSVCP71.std::bas>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::npos
00413C12   |.  3B02              |cmp eax,dword ptr ds:[edx]               ;  不在的話就賦值0xFFFFFFFF
00413C14   |.  75 03             |jnz short PCMark04.00413C19
00413C16   |.  8B45 00           |mov eax,dword ptr ss:[ebp]
00413C19   |>  89049E            |mov dword ptr ds:[esi+ebx*4],eax         ;  轉移
00413C1C   |.  8BCF              |mov ecx,edi
00413C1E   |.  43                |inc ebx
00413C1F   |.  FF15 8CE74300     |call dword ptr ds:[<&MSVCP71.std::basic_>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413C25   |.  3BD8              |cmp ebx,eax                              ;  沒完繼續
00413C27   |.^ 72 C9             \jb short PCMark04.00413BF2
00413C29   |>  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413C2D   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  字串長度
00413C33   |.  8B3E              mov edi,dword ptr ds:[esi]                ;  第一組第一位
00413C35   |.  8B56 08           mov edx,dword ptr ds:[esi+8]              ;  第一組第三位
00413C38   |.  8BC8              mov ecx,eax                               ;  字串長度
00413C3A   |.  8B46 04           mov eax,dword ptr ds:[esi+4]              ;  第一組第二位
00413C3D   |.  03C7              add eax,edi
00413C3F   |.  03C2              add eax,edx
00413C41   |.  33D2              xor edx,edx
00413C43   |.  F7F1              div ecx                                   ;  相加後與字串長度(0x21)取餘
00413C45   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413C49   |.  8BFA              mov edi,edx                               ;  餘數轉移給edi
00413C4B   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413C51   |.  8B6E 18           mov ebp,dword ptr ds:[esi+18]
00413C54   |.  8B5E 1C           mov ebx,dword ptr ds:[esi+1C]
00413C57   |.  8BC8              mov ecx,eax
00413C59   |.  8B46 14           mov eax,dword ptr ds:[esi+14]
00413C5C   |.  03C5              add eax,ebp
00413C5E   |.  03C3              add eax,ebx
00413C60   |.  03C7              add eax,edi                               ;  同上,只不過加了上次運算的餘數
00413C62   |.  33D2              xor edx,edx
00413C64   |.  F7F1              div ecx
00413C66   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413C6A   |.  8BDA              mov ebx,edx
00413C6C   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413C72   |.  8B6E 2C           mov ebp,dword ptr ds:[esi+2C]
00413C75   |.  8BC8              mov ecx,eax
00413C77   |.  8B46 28           mov eax,dword ptr ds:[esi+28]
00413C7A   |.  03C5              add eax,ebp
00413C7C   |.  8B6E 30           mov ebp,dword ptr ds:[esi+30]
00413C7F   |.  03C3              add eax,ebx
00413C81   |.  03C5              add eax,ebp
00413C83   |.  33D2              xor edx,edx
00413C85   |.  F7F1              div ecx
00413C87   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413C8B   |.  8BEA              mov ebp,edx
00413C8D   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413C93   |.  8B56 3C           mov edx,dword ptr ds:[esi+3C]
00413C96   |.  8BC8              mov ecx,eax
00413C98   |.  8B46 44           mov eax,dword ptr ds:[esi+44]
00413C9B   |.  03C2              add eax,edx
00413C9D   |.  0346 40           add eax,dword ptr ds:[esi+40]
00413CA0   |.  03C5              add eax,ebp
00413CA2   |.  33D2              xor edx,edx
00413CA4   |.  F7F1              div ecx
00413CA6   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413CAA   |.  895424 5C         mov dword ptr ss:[esp+5C],edx
00413CAE   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413CB4   |.  8B56 10           mov edx,dword ptr ds:[esi+10]
00413CB7   |.  8BC8              mov ecx,eax
00413CB9   |.  8B46 34           mov eax,dword ptr ds:[esi+34]
00413CBC   |.  03C2              add eax,edx
00413CBE   |.  0346 20           add eax,dword ptr ds:[esi+20]
00413CC1   |.  33D2              xor edx,edx
00413CC3   |.  F7F1              div ecx
00413CC5   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413CC9   |.  895424 14         mov dword ptr ss:[esp+14],edx
00413CCD   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413CD3   |.  8B56 20           mov edx,dword ptr ds:[esi+20]
00413CD6   |.  8BC8              mov ecx,eax
00413CD8   |.  8B46 48           mov eax,dword ptr ds:[esi+48]
00413CDB   |.  03C2              add eax,edx
00413CDD   |.  0346 34           add eax,dword ptr ds:[esi+34]
00413CE0   |.  33D2              xor edx,edx
00413CE2   |.  F7F1              div ecx
00413CE4   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413CE8   |.  895424 18         mov dword ptr ss:[esp+18],edx
00413CEC   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413CF2   |.  8B56 54           mov edx,dword ptr ds:[esi+54]
00413CF5   |.  8BC8              mov ecx,eax
00413CF7   |.  8B46 14           mov eax,dword ptr ds:[esi+14]
00413CFA   |.  03C2              add eax,edx
00413CFC   |.  0306              add eax,dword ptr ds:[esi]
00413CFE   |.  33D2              xor edx,edx
00413D00   |.  F7F1              div ecx
00413D02   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413D06   |.  895424 10         mov dword ptr ss:[esp+10],edx
00413D0A   |.  FF15 8CE74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::size
00413D10   |.  8B56 58           mov edx,dword ptr ds:[esi+58]
00413D13   |.  8BC8              mov ecx,eax
00413D15   |.  8B46 54           mov eax,dword ptr ds:[esi+54]
00413D18   |.  03C2              add eax,edx
00413D1A   |.  0346 50           add eax,dword ptr ds:[esi+50]
00413D1D   |.  33D2              xor edx,edx
00413D1F   |.  F7F1              div ecx
00413D21   |.  397E 0C           cmp dword ptr ds:[esi+C],edi              ;  第一組第四位=(前三位之和%0x21)
00413D24   |.  75 6E             jnz short PCMark04.00413D94               ;  不相等跳下去xor al,al
00413D26   |.  395E 20           cmp dword ptr ds:[esi+20],ebx             ;  第二組第四位=(前三位之和%0x21)
00413D29   |.  75 69             jnz short PCMark04.00413D94
00413D2B   |.  396E 34           cmp dword ptr ds:[esi+34],ebp             ;  以下都基本相似
00413D2E   |.  75 64             jnz short PCMark04.00413D94
00413D30   |.  8B4424 5C         mov eax,dword ptr ss:[esp+5C]
00413D34   |.  3946 48           cmp dword ptr ds:[esi+48],eax
00413D37   |.  75 5B             jnz short PCMark04.00413D94
00413D39   |.  8B4C24 14         mov ecx,dword ptr ss:[esp+14]
00413D3D   |.  394E 50           cmp dword ptr ds:[esi+50],ecx
00413D40   |.  75 52             jnz short PCMark04.00413D94
00413D42   |.  8B4424 18         mov eax,dword ptr ss:[esp+18]
00413D46   |.  3946 54           cmp dword ptr ds:[esi+54],eax
00413D49   |.  75 49             jnz short PCMark04.00413D94
00413D4B   |.  8B4C24 10         mov ecx,dword ptr ss:[esp+10]
00413D4F   |.  394E 58           cmp dword ptr ds:[esi+58],ecx
00413D52   |.  75 40             jnz short PCMark04.00413D94
00413D54   |.  3956 5C           cmp dword ptr ds:[esi+5C],edx
00413D57   |.  75 3B             jnz short PCMark04.00413D94
00413D59   |.  8D4C24 1C         lea ecx,dword ptr ss:[esp+1C]
00413D5D   |.  E8 4EAE0000       call PCMark04.0041EBB0
00413D62   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413D66   |.  C74424 54 FFFFFFF>mov dword ptr ss:[esp+54],-1
00413D6E   |.  FF15 04E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
00413D74   |.  B0 01             mov al,1                                  ;  全都對的話就 mov al,1
00413D76   |>  5E                pop esi
00413D77   |.  5B                pop ebx
00413D78   |>  8B4C24 44         mov ecx,dword ptr ss:[esp+44]
00413D7C   |.  5F                pop edi
00413D7D   |.  64:890D 00000000  mov dword ptr fs:[0],ecx
00413D84   |.  8B4C24 3C         mov ecx,dword ptr ss:[esp+3C]
00413D88   |.  5D                pop ebp
00413D89   |.  E8 503E0200       call PCMark04.00437BDE
00413D8E   |.  83C4 48           add esp,48
00413D91   |.  C2 0400           retn 4
00413D94   |>  8D4C24 1C         lea ecx,dword ptr ss:[esp+1C]
00413D98   |.  E8 13AE0000       call PCMark04.0041EBB0
00413D9D   |.  8D4C24 2C         lea ecx,dword ptr ss:[esp+2C]
00413DA1   |.  C74424 54 FFFFFFF>mov dword ptr ss:[esp+54],-1
00413DA9   |.  FF15 04E74300     call dword ptr ds:[<&MSVCP71.std::basic_s>;  MSVCP71.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >
00413DAF   |.  32C0              xor al,al                                  ;在這兒可以爆破
00413DB1   |.^ EB C3             jmp short PCMark04.00413D76
00413DB3   |>  32C0              xor al,al                                  ;在這兒可以爆破
00413DB5   \.^ EB C1             jmp short PCMark04.00413D78 

演算法:
註冊碼可以是5位一組或4位一組,兩種演算法基本相同,我只說4位一組的;
註冊碼長度24位,每四位間隔一個“-”;
設註冊碼為1234-5678-9012-3456-7890
程式先把每一位註冊碼在字串“B2D6FHJ1LN5ST9E3VWX8YZQ7U40KRAMCP”中的位置化為int型別;
例如“1”在字串的位置就是是0x7,“2”在字串的位置就是是0x1,而“-”沒有出現在字串裡;就被賦值“0xFFFFFFFF”
這樣就是:
0x7 0x1 0xf 0x19 0xFFFFFFFF 0xa 0x3 0x17 0x13 0xFFFFFFFF 0xd 0x1a 0x7 0x1 0xFFFFFFFF
0xf 0x19 0xa 0x3 0xFFFFFFFF 0x17 0x13 0xd 0x1
第一組第四位的值=前三位之和%0x21;0x21是字串長度,這樣可以使餘數小於0x21,才能算出答案;
(0x7+0x1+0xf)%0x21=0x17 即“7”
所以第一組可改為“1237”;
則第二組可改為“5670”;
第1組第4位的值=前三位值之和與0x21取餘;
第2組第4位的值=(前三位值+上一組第4位值)與0x21取餘;
第3組第4位的值=(前三位值+上一組第4位值)與0x21取餘;
第4組第4位的值=(前三位值+上一組第4位值)與0x21取餘;
第5組第1位的值=(0xFFFFFFFF+第2組第4位值+第3組第4位值)與0x21取餘
第5組第2位的值=(第2組第4位值+第3組第4位值+第4組第4位值)與0x21取餘
第5組第3位的值=(第5組第2位值+第2組第1位值+第1組第1位值)與0x21取餘
第5組第4位的值=(第5組第3位值+第5組第2位值+第5組第1位值)與0x21取餘

然後開始寫序號產生器(C#):
                                                                             //省略初始化程式碼
                int[,] sn=new int[5,4];                                      //用個二維陣列來存放註冊碼的值;
    Random rand=new Random();                                    // Random類,用來產生隨機數;
    private void button1_Click(object sender, System.EventArgs e)
    {      
      work();                                              //計算前4組;
      sn[4,0]=work1(-1,sn[1,3],sn[2,3],0);
      sn[4,1]=work1(sn[1,3],sn[2,3],sn[3,3],0);
      sn[4,2]=work1(sn[4,1],sn[1,0],sn[0,0],0);
      sn[4,3]=work1(sn[4,2],sn[4,1],sn[4,0],0);            
      char[] codechar="B2D6FHJ1LN5ST9E3VWX8YZQ7U40KRAMCP".ToCharArray() ;
      string sntxt="";
      for (int i=0;i<5;i++)
      {
        for(int j=0;j<4;j++)
        {
          
          sntxt =sntxt+codechar[sn[i,j]];
          textBox1.Text =sntxt;
        }
        sntxt =sntxt+"-";
      }
    }  
    public void work()
    {    
      sn[0,3]=0;
      int div=0;
      for(int j=0;j<4;j++)
      {
        for(int i =0;i<3;i++)
        {
          sn[j,i]=rand.Next (32);
        }
        sn[j,3]=work1(sn[j,0],sn[j,1],sn[j,2],div);  //計算第四位的值;
        div = sn[j,3];
      }
    }
    public int work1(int sn0,int sn1,int sn2,int sn3)
    {
      sn3=(sn0+sn1+sn2+sn3) % 0x21;
      return sn3;      
    }

有不對的地方還請老大們多多指教!!
                                                             PCMark04序號產生器完成於04年的最後一天(雖然有點晚,但畢竟在04年^-^)

我的機器:
XP+SP1;
賽揚2.4超到2.58;
256MB DDR333記憶體(CL值調到2);
80G 2MB快取硬碟;
845GL主機板;
主機板整合音效卡,顯示卡;
能開的都開了,
顯示卡才400多分
總分2412分,鬱悶!!!

相關文章