如何計算 “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
不要用這個去網站註冊,因為我已經用了。要註冊,自己算。
不知誰將這個計算式作一序號產生器?請在其中寫上我的名字:小樓
謝謝。