註冊PSXVIDEO Ver1.12詳細演算法 (14千字)

看雪資料發表於2001-04-11

        註冊PSXVIDEO Ver1.12詳細演算法

軟體名稱:PSXVIDEO Ver1.12
軟體下載:等我漢化完傳到HTTP://ZOMBIEYS.126.COM去
主要功能:PSXVIDEO 是一個能將 PS 遊戲 CD-ROM 上的動畫檔案轉換成 PC 平臺能播放的
AVI 檔案的一個轉檔程式, 是由一位日本人 tany 先生所寫, 目前為最新版v1.12
已經可以將大部分的 PS 遊戲動畫轉出, 幾乎沒有轉不出的動畫

PSXVIDEO v1.07由tany先生於97/10/20完成 , 增加了 FF7 的檢查選項,以及一
些細部的修正等.
主要目的:尋找合適的註冊碼
破解難度:非常簡單(適合初學者)


    正規方法:選註冊填自己的大名,註冊碼填78787878,進s-ice下s 30:0 l ffffffff '78787878',下bpm "搜到的地址",按f5返回,點註冊被攔到,按幾次f12知道進入PSXVIDEO領空,再按幾次f10到這裡

* Possible Reference to Dialog: REGIST, CONTROL_ID:03F7, ""
                                  |
:004099FA 68F7030000              push 000003F7
:004099FF 56                      push esi
:00409A00 FFD7                    call edi
:00409A02 8D4C240C                lea ecx, dword ptr [esp+0C]
:00409A06 51                      push ecx
:00409A07 E844B6FFFF              call 00405050                        //算KEY的CALL
:00409A0C 83C404                  add esp, 00000004
:00409A0F 85C0                    test eax, eax
:00409A11 740E                    je 00409A21                          //跳下去就成功了
:00409A13 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"ERROR"
                                  |
:00409A15 68E0514100              push 004151E0

* Possible StringData Ref from Data Obj ->"Password Error."
                                  |
:00409A1A 689C664100              push 0041669C
:00409A1F EB18                    jmp 00409A39                        //騙子-_-(TANY語)

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409A11(C)
|
:00409A21 C7056C9C450001000000    mov dword ptr [00459C6C], 00000001  //成功了,沒被抓到^Q^
:00409A2B EB0F                    jmp 00409A3C



我們來看看它怎碼算的KEY吧@_@,還好了很短,也很簡單:)

:00405050 81EC08010000            sub esp, 00000108                    //準備抓騙子(TANY語)
:00405056 53                      push ebx
:00405057 55                      push ebp
:00405058 56                      push esi
:00405059 57                      push edi
:0040505A 8BBC241C010000          mov edi, dword ptr [esp+0000011C]      //取你輸的註冊碼->EDI
:00405061 33D2                    xor edx, edx                          //準備了:)
:00405063 BE1A000000              mov esi, 0000001A                      //做除數用
:00405068 BD1A000000              mov ebp, 0000001A                      //做除數用
:0040506D 0FBE4F04                movsx ecx, byte ptr [edi+04]          //註冊碼第5位->ECX
:00405071 F7D1                    not ecx                                //取反->ECX
:00405073 8A1F                    mov bl, byte ptr [edi]                //註冊碼第1位->BL
:00405075 8D414F                  lea eax, dword ptr [ecx+4F]            //(第5位取反結果+4F)的地址->EAX
:00405078 83F050                  xor eax, 00000050                      //拿它與50做異或->EAX
:0040507B F7F6                    div esi                                //接著用EAX整除1A,餘數在EDX
:0040507D 0FBEF3                  movsx esi, bl                          //註冊碼第1位->ESI
:00405080 F7D6                    not esi                                //取反->ESI
:00405082 8D4645                  lea eax, dword ptr [esi+45]            //(第1位取反結果+45)的地址->EAX
:00405085 83F053                  xor eax, 00000053                      //那它與53做異或->EAX
:00405088 80C241                  add dl, 41                            //餘數變成1個大寫字母?->DL
:0040508B 88542419                mov byte ptr [esp+19], dl              //好了,這是真註冊碼的第2位->[ESP+19]
:0040508F 33D2                    xor edx, edx                          //再來
:00405091 F7F5                    div ebp                                //用EAX(上次整除的商)整除1A,餘數放在EDX裡
:00405093 8D4144                  lea eax, dword ptr [ecx+44]            //(第5位取反結果+44)地址->EAX
:00405096 83F058                  xor eax, 00000058                      //拿它與58做異或->EAX
:00405099 80C241                  add dl, 41                            //餘數變成1個大寫字母?->DL
:0040509C 8854241A                mov byte ptr [esp+1A], dl              //作為真註冊碼的第3位->[ESP+1A]
:004050A0 33D2                    xor edx, edx                          //GOGOGO(TANY語) YUN~~(我)
:004050A2 F7F5                    div ebp                                //用EAX整除1A,餘數放EDX
:004050A4 8D4659                  lea eax, dword ptr [esi+59]            //(註冊碼第1位取反結果+59)的地址->EAX       
:004050A7 83F056                  xor eax, 00000056                      //拿它與56做異或->EAX
:004050AA 80C241                  add dl, 41                            //餘數變成1個大寫字母?
:004050AD 8854241B                mov byte ptr [esp+1B], dl              //作為真註冊碼的第4位->[ESP+1B]
:004050B1 33D2                    xor edx, edx                          //GOGOGO(TANY語) ......(我)
:004050B3 F7F5                    div ebp                                //用EAX(上次整除的商)整除1A,餘數放在EDX裡
:004050B5 8D4156                  lea eax, dword ptr [ecx+56]            //(第5位取反結果+56)的地址->EAX
:004050B8 83F049                  xor eax, 00000049                      //拿它與49做異或->EAX
:004050BB 80C241                  add dl, 41                            //餘數變成1個大寫字母?
:004050BE 8854241D                mov byte ptr [esp+1D], dl              //作為真註冊碼的第6位->[ESP+1D]
:004050C2 33D2                    xor edx, edx                          //暈死你(TANY語) -_-|(我)
:004050C4 F7F5                    div ebp                                //用EAX(上次整除的商)整除1A,餘數放在EDX裡
:004050C6 8D4658                  lea eax, dword ptr [esi+58]            //(註冊碼第1位取反結果+58)的地址-EAX
:004050C9 83F044                  xor eax, 00000044                      //拿它與44做異或->EAX
:004050CC 80C241                  add dl, 41                            //餘數變成1個大寫字母?
:004050CF 8854241E                mov byte ptr [esp+1E], dl              //作為真註冊碼的第7位->[ESP+1E]
:004050D3 33D2                    xor edx, edx                          //...... ......
:004050D5 F7F5                    div ebp                                //用EAX整除1A,餘數放EDX
:004050D7 8D4153                  lea eax, dword ptr [ecx+53]            //(第5位取反結果+53)的地址->EAX
:004050DA 8BCD                    mov ecx, ebp                          //1A->ECX
:004050DC 83F045                  xor eax, 00000045                      //EAX(商)與45做異或->EAX
:004050DF 80C241                  add dl, 41                            //餘數變成1個大寫字母?
:004050E2 8854241F                mov byte ptr [esp+1F], dl              //作為真註冊碼的第8位->[ESP+1F]
:004050E6 33D2                    xor edx, edx                          //:) :(
:004050E8 F7F1                    div ecx                                //用EAX整除1A,餘數放EDX
:004050EA 8D4650                  lea eax, dword ptr [esi+50]            //(註冊碼第1位取反結果+50)的地址->EAX
:004050ED 8BF5                    mov esi, ebp                          //1A->ESI
:004050EF 83F04F                  xor eax, 0000004F                      //EAX(商)與4F做異或->EAX
:004050F2 8BCA                    mov ecx, edx                          //餘數->ECX
:004050F4 33D2                    xor edx, edx                          //EDX清0
:004050F6 F7F6                    div esi                                //EAX(商)整除1A,餘數放EDX
:004050F8 80C141                  add cl, 41                            //真註冊碼的第9位->CL
:004050FB 80C241                  add dl, 41                            //真註冊碼的第10位->DL
:004050FE 80FB41                  cmp bl, 41                            //註冊碼第1位在A-Z之間?
:00405101 0F8CFD000000            jl 00405204
:00405107 80FB5A                  cmp bl, 5A
:0040510A 0F8FF4000000            jg 00405204
:00405110 8A5F01                  mov bl, byte ptr [edi+01]              //註冊碼第2位->BL且在A-Z之間?
:00405113 80FB41                  cmp bl, 41
:00405116 0F8CE8000000            jl 00405204
:0040511C 80FB5A                  cmp bl, 5A
:0040511F 0F8FDF000000            jg 00405204
:00405125 8A4702                  mov al, byte ptr [edi+02]              //註冊碼第3位在A-Z之間?
:00405128 3C41                    cmp al, 41
:0040512A 88442413                mov byte ptr [esp+13], al             
:0040512E 0F8CD0000000            jl 00405204
:00405134 3C5A                    cmp al, 5A
:00405136 0F8FC8000000            jg 00405204
:0040513C 8A4703                  mov al, byte ptr [edi+03]              //註冊碼第4位在A-Z之間?
:0040513F 3C41                    cmp al, 41
:00405141 88442417                mov byte ptr [esp+17], al
:00405145 0F8CB9000000            jl 00405204
:0040514B 3C5A                    cmp al, 5A
:0040514D 0F8FB1000000            jg 00405204
:00405153 8A4704                  mov al, byte ptr [edi+04]              //註冊碼第5位在A-Z之間?
:00405156 3C41                    cmp al, 41
:00405158 0F8CA6000000            jl 00405204
:0040515E 3C5A                    cmp al, 5A
:00405160 0F8F9E000000            jg 00405204
:00405166 8A4705                  mov al, byte ptr [edi+05]              //註冊碼第6位在A-Z之間?
:00405169 3C41                    cmp al, 41
:0040516B 88442415                mov byte ptr [esp+15], al
:0040516F 0F8C8F000000            jl 00405204
:00405175 3C5A                    cmp al, 5A
:00405177 0F8F87000000            jg 00405204
:0040517D 8A4706                  mov al, byte ptr [edi+06]              //註冊碼第7位在A-Z之間?
:00405180 3C41                    cmp al, 41
:00405182 88442412                mov byte ptr [esp+12], al
:00405186 7C7C                    jl 00405204
:00405188 3C5A                    cmp al, 5A
:0040518A 7F78                    jg 00405204
:0040518C 8A4707                  mov al, byte ptr [edi+07]              //註冊碼第8位在A-Z之間?
:0040518F 3C41                    cmp al, 41
:00405191 88442414                mov byte ptr [esp+14], al
:00405195 7C6D                    jl 00405204
:00405197 3C5A                    cmp al, 5A
:00405199 7F69                    jg 00405204
:0040519B 8A4708                  mov al, byte ptr [edi+08]              //註冊碼第9位在A-Z之間?
:0040519E 3C41                    cmp al, 41
:004051A0 88442416                mov byte ptr [esp+16], al
:004051A4 7C5E                    jl 00405204
:004051A6 3C5A                    cmp al, 5A
:004051A8 7F5A                    jg 00405204
:004051AA 8A4709                  mov al, byte ptr [edi+09]              //註冊碼第10位->AL且在A-Z之間?
:004051AD 3C41                    cmp al, 41
:004051AF 7C53                    jl 00405204
:004051B1 3C5A                    cmp al, 5A
:004051B3 7F4F                    jg 00405204
:004051B5 3A5C2419                cmp bl, byte ptr [esp+19]              //真假註冊碼第2位比較
:004051B9 7549                    jne 00405204
:004051BB 8A5C2413                mov bl, byte ptr [esp+13]              //假註冊碼第3位->[ESP+13]
:004051BF 3A5C241A                cmp bl, byte ptr [esp+1A]              //真假註冊碼第3位比較
:004051C3 753F                    jne 00405204
:004051C5 8A5C2417                mov bl, byte ptr [esp+17]              //假註冊碼第4位->[ESP+17]
:004051C9 3A5C241B                cmp bl, byte ptr [esp+1B]              //真假註冊碼第3位比較
:004051CD 7535                    jne 00405204
:004051CF 8A5C2415                mov bl, byte ptr [esp+15]              //假註冊碼第6位->[ESP+15]
:004051D3 3A5C241D                cmp bl, byte ptr [esp+1D]              //真假註冊碼第6位比較
:004051D7 752B                    jne 00405204
:004051D9 8A5C2412                mov bl, byte ptr [esp+12]              //假註冊碼第7位->[ESP+12]
:004051DD 3A5C241E                cmp bl, byte ptr [esp+1E]              //真假註冊碼第7位比較
:004051E1 7521                    jne 00405204
:004051E3 8A5C2414                mov bl, byte ptr [esp+14]              //假註冊碼第8位->[ESP+12]
:004051E7 3A5C241F                cmp bl, byte ptr [esp+1F]              //真假註冊碼第8位比較
:004051EB 7517                    jne 00405204
:004051ED 384C2416                cmp byte ptr [esp+16], cl              //真假註冊碼第9位比較
:004051F1 7511                    jne 00405204
:004051F3 3AC2                    cmp al, dl                            //真假註冊碼第10位比較
:004051F5 750D                    jne 00405204                          //想混過去沒門(TANY語)
:004051F7 33C0                    xor eax, eax                          //oo混過來了:)
:004051F9 5F                      pop edi
:004051FA 5E                      pop esi
:004051FB 5D                      pop ebp
:004051FC 5B                      pop ebx
:004051FD 81C408010000            add esp, 00000108
:00405203 C3                      ret



* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00405101(C), :0040510A(C), :00405116(C), :0040511F(C), :0040512E(C)
|:00405136(C), :00405145(C), :0040514D(C), :00405158(C), :00405160(C)
|:0040516F(C), :00405177(C), :00405186(C), :0040518A(C), :00405195(C)
|:00405199(C), :004051A4(C), :004051A8(C), :004051AF(C), :004051B3(C)
|:004051B9(C), :004051C3(C), :004051CD(C), :004051D7(C), :004051E1(C)
|:004051EB(C), :004051F1(C), :004051F5(C)
|
:00405204 5F                      pop edi                              //暈~~~沒混過來:(
:00405205 5E                      pop esi
:00405206 5D                      pop ebp
:00405207 83C8FF                  or eax, FFFFFFFF
:0040520A 5B                      pop ebx
:0040520B 81C408010000            add esp, 00000108
:00405211 C3                      ret

完活-_-,這是我第一次也是最後一次寫詳細的了,完全是為了初學者,自己努力吧:)
這個玩藝破解用10分鐘,寫出來花幾個小時,我暈~~~~~~

部分註冊碼:(使用者名稱任意)
Name:ZOMBIE
Code:RNFKCCNNWW
Code:ALCKENLEUN

―――――――――――――――――――――――――――――――>
                .-"      "-.      Cracked by zombieys      >
                /      \      My oicq is 1789655        >
              |              |    My hp is zombieys.yeah.net>
              |,  .-.  .-.  ,|    My hp is zombieys.126.com >
                |)(__/  \__)(|                                >
                |/    /\    \|      Thanks for your supports  >
      (@_@)    (_    ^^    _)                                >
    _  )\_______\__|IIIIII|__/_____                          >
_)@8@8{}<________|-\IIIIII/-|____zombieys_____________________>

相關文章