如何計算 “IQ網際搜尋家99” 註冊碼 (4千字)

看雪資料發表於2000-05-15

如何計算 “IQ網際搜尋家99” 註冊碼

  “IQ網際搜尋家99”是資訊人公司出品的一個功能十分強大的搜尋引擎,獲得zdnet五星獎。
  下載地址http://www.inforian.com/ ,約3M左右,可以支援中文GB、BIG5、英文等語言。
    開始我在網上找了一個註冊碼,但每次執行時程式都會叫你去資訊人公司主頁註冊。當然你是不能註冊的,因為這個註冊碼早就被註冊了。忍無可忍之下,今天我準備將其註冊碼計算方式找到,自己註冊一個。
    IQ99.exe被shrink3.4壓過,你可以用deshrink1.6解壓,不過不這樣作也沒關係,因為其比較程式是在checknodll.dll中。

首先,你要隨便輸入一個註冊碼,01234567895 (11位)
trw2000中下斷點
bpx hmemcpy
g
回到IQ99.exe中,按下“註冊”按鈕,trw跳出。
bd  中斷斷點
F12  14下
F10  走到

* Possible StringData Ref from Code Obj ->"bCheckSerialNumber"
                                  |
:004C2CD1 A168205000      mov eax, dword ptr [00502068]
:004C2CD6 E8B512F4FF      call 00403F90
:004C2CDB 50              push eax
:004C2CDC 8B45F4          mov eax, dword ptr [ebp-0C]
:004C2CDF 50              push eax

* Reference To: kernel32.GetProcAddress, Ord:0000h
                                  |
:004C2CE0 E8BB2EF4FF      Call 00405BA0
:004C2CE5 8BF8            mov edi, eax
:004C2CE7 89FB            mov ebx, edi
:004C2CE9 85FF            test edi, edi  <--沒有輸入,失敗
:004C2CEB 7417            je 004C2D04
:004C2CED 8B45FC          mov eax, dword ptr [ebp-04]
:004C2CF0 E89B12F4FF      call 00403F90
:004C2CF5 50              push eax
:004C2CF6 56              push esi
:004C2CF7 FFD3            call ebx      <--**
:004C2CF9 83C408          add esp, 00000008
:004C2CFC 3C01            cmp al, 01    <--以al=1作為註冊標誌
:004C2CFE 7504            jne 004C2D04  <--跳則失敗
:004C2D00 C645FB00        mov [ebp-05], 00

現在你要進入:004C2CF7 FFD3          call ebx 中看看al是如何被賦值的,F8進入
這就進入了checknodll.dll領域了。
:100010EB 83F90B          cmp ecx, 0000000B  <--註冊碼是否11位?
:100010EE 0F85AA000000    jne 1000119E
:100010F4 33FF            xor edi, edi
......
:10001111  mov [esp+0C], 00000007  <-- 1  -
:10001119  mov [esp+10], 00000011  <-- 2  |
:10001121  mov [esp+14], 00000017  <-- 3  |
:10001129  mov [esp+18], 00000025  <-- 4  |
:10001131  mov [esp+1C], 0000002F  <-- 5  |--依次對應註冊碼
:10001139  mov [esp+20], 00000035  <-- 6  |  1-9位
:10001141  mov [esp+24], 00000043  <-- 7  |
:10001149  mov [esp+28], 00000049  <-- 8  |
:10001151  mov [esp+2C], 00000053  <-- 9  -
:10001159  mov eax, ebx
:1000115B  xor ecx, ecx
:1000115D  lea edx, dword ptr [esp+0C]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10001174(C)
|
:10001161 0FBE3C31          movsx edi, byte ptr [ecx+esi]
:10001165 83EF30            sub edi, 00000030       
                            <--依次取1-9位註冊碼的數字
:10001168 0FAF3A            imul edi, dword ptr [edx]
                            <--各位數與上述數字對應相乘
:1000116B 03C7              add eax, edi  <--總和給eax
:1000116D 41                inc ecx
:1000116E 83C204            add edx, 00000004
:10001171 83F909            cmp ecx, 00000009
:10001174 7CEB              jl 10001161
:10001176 0FBE4E09          movsx ecx, byte ptr [esi+09]
                            <-- 第十位註冊碼的ascii碼給ecx
:1000117A 0FBE560A          movsx edx, byte ptr [esi+0A]
                            <-- 第十一位註冊碼的ascii碼給edx
:1000117E 8D0C89            lea ecx, dword ptr [ecx+4*ecx]
                            <-- ecx=5*第十位註冊碼的ascii碼
:10001181 BE64000000        mov esi, 00000064
:10001186 5F                pop edi
:10001187 8D8C4AF0FDFFFF    lea ecx, dword ptr [edx+2*ecx-00000210]
                            <-- ecx=  第十一位註冊碼的ascii碼
                                    + (A*第十位註冊碼的ascii碼)
                                    - 210
:1000118E 99                cdq
:1000118F F7FE              idiv esi      <-- edx為eax/64的餘數
:10001191 33C0              xor eax, eax
:10001193 5E                pop esi
:10001194 5B                pop ebx
:10001195 3BCA              cmp ecx, edx  <-- 比較
:10001197 0F94C0            sete al      <-- al賦值

所以我計算出一個:01234567804
不要用這個去網站註冊,因為我已經用了。要註冊,自己算。
不知誰將這個計算式作一序號產生器?請在其中寫上我的名字:小樓
謝謝。

相關文章