全面分析 解除安裝精靈v1.20 註冊演算法,僅此祝大家新年快樂! (23千字)

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

全面分析 解除安裝精靈v1.20 註冊演算法

軟體名稱:解除安裝精靈v1.20
軟體簡介:已經厭倦了WINDOWS控制皮膚那個功能很弱的“新增/刪除程式”了嗎?你是否發現你的電腦裡面有些軟體無法解除安裝?解除安裝精靈的智慧解除安裝功能可以乾淨徹底地解除安裝軟體,包括那些無法正常解除安裝的程式它都可以幫您解除安裝。
未註冊版限制:軟體只能被使用10次,即只能用該軟體解除安裝10個程式。
下載地址:http://cn.geocities.com/legendsoftcn/clean120.zip
破解工具:TRW2000 1.22漢化版、W32DASM 8.93漢化版、PE iDentifier 0.7 Beta 漢化版、Hiew6.76。
破解人:飛鷹[BCG]
E-mail:flithawk@263.net
網址:http://flithawk.longcity.net
破解步驟:

一、暴破軟體:(破除軟體只能使用10次的限制)

首先,用 W32DASM 編譯軟體,查詢註冊碼錯誤資訊“軟體試用期已到”,找到後,向上分析就可以知道軟體是如何限制使用次數的。分析過程如下:

* Possible StringData Ref from Data Obj ->"SOFTWARE\Legendsoft\SysCleaner"
                                  |
:00402FA2 68D0F04200              push 0042F0D0
:00402FA7 8D4C2434                lea ecx, dword ptr [esp+34]
:00402FAB C784248402000000000000  mov dword ptr [esp+00000284], 00000000
:00402FB6 89442418                mov dword ptr [esp+18], eax
:00402FBA 89442430                mov dword ptr [esp+30], eax
:00402FBE E8E88D0100              call 0041BDAB
:00402FC3 8B542430                mov edx, dword ptr [esp+30]
:00402FC7 8D4C2424                lea ecx, dword ptr [esp+24]
:00402FCB 51                      push ecx
:00402FCC 683F000F00              push 000F003F
:00402FD1 6A00                    push 00000000
:00402FD3 52                      push edx
:00402FD4 6802000080              push 80000002
:00402FD9 FFD5                    call ebp
:00402FDB 8D44242C                lea eax, dword ptr [esp+2C]
:00402FDF 8D4C2434                lea ecx, dword ptr [esp+34]
:00402FE3 50                      push eax
:00402FE4 8B442428                mov eax, dword ptr [esp+28]
:00402FE8 8D542418                lea edx, dword ptr [esp+18]
:00402FEC 51                      push ecx
:00402FED 52                      push edx
:00402FEE 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"UseCount"
                                  |
:00402FF0 68F0F04200              push 0042F0F0
:00402FF5 50                      push eax
==>上面的大概過程是:查詢並開啟登錄檔的相關的鍵值

* Reference To: ADVAPI32.RegQueryValueExA, Ord:017Bh
==>RegQueryValueExA 的意思是:與登錄檔中的鍵值相比較
                                  |
:00402FF6 FF1504504200            Call dword ptr [00425004]
:00402FFC 837C24340A              cmp dword ptr [esp+34], 0000000A
==>比較軟體是否已經使用了10次
:00403001 7632                    jbe 00403035
==>如果大於10,不跳轉就OVER了;小於10,跳轉則可繼續使用
:00403003 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"解除安裝精靈"
                                  |
:00403005 689CF24200              push 0042F29C

* Possible StringData Ref from Data Obj ->"軟體試用期已到,如果要繼續使用請註冊,軟體註冊"
                                        ->"方法請檢視幫助資訊"
                                  |
==>軟體的出錯資訊,就是我們查詢到的地方
:0040300A 6858F24200              push 0042F258
:0040300F 8BCE                    mov ecx, esi
:00403011 E875700100              call 0041A08B
:00403016 8B4C2424                mov ecx, dword ptr [esp+24]
:0040301A 51                      push ecx

* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh
                                  |
:0040301B FF1500504200            Call dword ptr [00425000]
:00403021 C7842480020000FFFFFFFF  mov dword ptr [esp+00000280], FFFFFFFF
:0040302C 8D4C2430                lea ecx, dword ptr [esp+30]
:00403030 E9A2040000              jmp 004034D7

所以,最終的修改方法有兩種:

1、將 00402FFC 處的 837C24340A 改為:837C2434FF,即把只能10次,改為可以使用255次。

2、將 00403001 處的 7632 改為:9090,即讓軟體沒有使用次數限制。

或者,你可以把登錄檔中 HKEY_LOCAL_MACHINE\Software\Legendsoft 下的 SysCleaner 項刪除,就又可以使用10次了,不過這樣做沒有多少意思。

二、追註冊碼:(分析出該軟體真正的註冊碼)

:00403BE1 8D6E5C                  lea ebp, dword ptr [esi+5C]
:00403BE4 8D442410                lea eax, dword ptr [esp+10]
:00403BE8 50                      push eax
:00403BE9 8BCD                    mov ecx, ebp
:00403BEB C644242C01              mov [esp+2C], 01
:00403BF0 E8DD580100              call 004194D2
:00403BF5 8D4C2414                lea ecx, dword ptr [esp+14]
:00403BF9 8DBE98000000            lea edi, dword ptr [esi+00000098]
:00403BFF 51                      push ecx
:00403C00 8BCF                    mov ecx, edi
:00403C02 E8CB580100              call 004194D2
:00403C07 8B542414                mov edx, dword ptr [esp+14]
:00403C0B 6874134300              push 00431374
:00403C10 52                      push edx
:00403C11 E89B830000              call 0040BFB1
:00403C16 83C408                  add esp, 00000008
:00403C19 85C0                    test eax, eax
==>判斷你輸入註冊名是否為空
:00403C1B 0F8458010000            je 00403D79
==>輸入的註冊名為空,將跳轉,出現錯誤資訊
:00403C21 8B442410                mov eax, dword ptr [esp+10]
:00403C25 6874134300              push 00431374
:00403C2A 50                      push eax
:00403C2B E881830000              call 0040BFB1
:00403C30 83C408                  add esp, 00000008
:00403C33 85C0                    test eax, eax
==>判斷你輸入註冊碼是否為空
:00403C35 0F843E010000            je 00403D79
==>輸入的註冊碼為空,將跳轉,出現錯誤資訊
:00403C3B 51                      push ecx
:00403C3C 8D542414                lea edx, dword ptr [esp+14]
:00403C40 8BCC                    mov ecx, esp
:00403C42 89642420                mov dword ptr [esp+20], esp
:00403C46 52                      push edx
:00403C47 E88F7D0100              call 0041B9DB
:00403C4C 8B0D70134300            mov ecx, dword ptr [00431370]
:00403C52 E8D9FCFFFF              call 00403930
==>此 Call 是註冊碼的演算法部分,應該跟蹤進入
:00403C57 3BC3                    cmp eax, ebx
==>判斷eax與ebx中的值是否相等
:00403C59 0F84DC000000            je 00403D3B
==>如果相等,跳轉將註冊失敗;不相等,不跳轉將註冊成功
:00403C5F A100F54200              mov eax, dword ptr [0042F500]
:00403C64 8944241C                mov dword ptr [esp+1C], eax

* Possible StringData Ref from Data Obj ->"SOFTWARE\Legendsoft\SysCleaner"
                                  |
:00403C68 68D0F04200              push 0042F0D0
:00403C6D 8D4C2420                lea ecx, dword ptr [esp+20]
:00403C71 C644242C02              mov [esp+2C], 02
:00403C76 E830810100              call 0041BDAB
:00403C7B 8B54241C                mov edx, dword ptr [esp+1C]
:00403C7F 8D4C2418                lea ecx, dword ptr [esp+18]
:00403C83 51                      push ecx
:00403C84 683F000F00              push 000F003F
:00403C89 53                      push ebx
:00403C8A 52                      push edx
:00403C8B 6802000080              push 80000002

* Reference To: ADVAPI32.RegOpenKeyExA, Ord:0172h
                                  |
:00403C90 FF1508504200            Call dword ptr [00425008]
:00403C96 8B442410                mov eax, dword ptr [esp+10]
:00403C9A 8D4C2410                lea ecx, dword ptr [esp+10]
:00403C9E 8B40F8                  mov eax, dword ptr [eax-08]
:00403CA1 50                      push eax
:00403CA2 50                      push eax
:00403CA3 E891820100              call 0041BF39
:00403CA8 8B4C241C                mov ecx, dword ptr [esp+1C]

* Reference To: ADVAPI32.RegSetValueExA, Ord:0186h
                                  |
:00403CAC 8B3D0C504200            mov edi, dword ptr [0042500C]
:00403CB2 50                      push eax
:00403CB3 6A01                    push 00000001
:00403CB5 53                      push ebx

* Possible StringData Ref from Data Obj ->"RegCode"
                                  |
:00403CB6 6800F14200              push 0042F100
:00403CBB 51                      push ecx
:00403CBC FFD7                    call edi
:00403CBE 6AFF                    push FFFFFFFF
:00403CC0 8D4C2414                lea ecx, dword ptr [esp+14]
:00403CC4 E8BF820100              call 0041BF88
:00403CC9 8B542414                mov edx, dword ptr [esp+14]
:00403CCD 8D4C2414                lea ecx, dword ptr [esp+14]
:00403CD1 8B42F8                  mov eax, dword ptr [edx-08]
:00403CD4 50                      push eax
:00403CD5 50                      push eax
:00403CD6 E85E820100              call 0041BF39
:00403CDB 50                      push eax
:00403CDC 8B442420                mov eax, dword ptr [esp+20]
:00403CE0 6A01                    push 00000001
:00403CE2 53                      push ebx

* Possible StringData Ref from Data Obj ->"RegName"
                                  |
:00403CE3 68C8F04200              push 0042F0C8
:00403CE8 50                      push eax
:00403CE9 FFD7                    call edi
:00403CEB 6AFF                    push FFFFFFFF
:00403CED 8D4C2418                lea ecx, dword ptr [esp+18]
:00403CF1 E892820100              call 0041BF88
:00403CF6 8B4C2418                mov ecx, dword ptr [esp+18]
:00403CFA 51                      push ecx

* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh
                                  |
:00403CFB FF1500504200            Call dword ptr [00425000]
:00403D01 6A40                    push 00000040
==>上面的大概過程是:把已註冊成功的名稱和註冊碼寫入到登錄檔相關的鍵值中

* Possible StringData Ref from Data Obj ->"軟體註冊"
                                  |
:00403D03 68F8F24200              push 0042F2F8

* Possible StringData Ref from Data Obj ->"註冊成功"
                                  |
:00403D08 68ECF24200              push 0042F2EC
:00403D0D 8BCE                    mov ecx, esi
:00403D0F E877630100              call 0041A08B
:00403D14 8B0D70134300            mov ecx, dword ptr [00431370]

* Possible StringData Ref from Data Obj ->"解除安裝精靈"
                                  |
:00403D1A 689CF24200              push 0042F29C
:00403D1F E85D750100              call 0041B281
:00403D24 8BCE                    mov ecx, esi
:00403D26 E8C8470100              call 004184F3
:00403D2B 8D4C241C                lea ecx, dword ptr [esp+1C]
:00403D2F C644242801              mov [esp+28], 01
:00403D34 E82D7F0100              call 0041BC66
:00403D39 EB7F                    jmp 00403DBA
==>上面是:軟體註冊成功後,軟體給出的提示資訊

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403C59(C)
|
:00403D3B 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"軟體註冊"
                                  |
:00403D3D 68F8F24200              push 0042F2F8

* Possible StringData Ref from Data Obj ->"註冊碼錯誤!請重新輸入"
                                  |
:00403D42 68D4F24200              push 0042F2D4
:00403D47 8BCE                    mov ecx, esi
:00403D49 E83D630100              call 0041A08B
:00403D4E 8B542410                mov edx, dword ptr [esp+10]

* Reference To: USER32.SendMessageA, Ord:0214h
                                  |
:00403D52 8B35A4544200            mov esi, dword ptr [004254A4]
:00403D58 8B42F8                  mov eax, dword ptr [edx-08]
:00403D5B 50                      push eax
:00403D5C 8B451C                  mov eax, dword ptr [ebp+1C]
:00403D5F 53                      push ebx
:00403D60 68B1000000              push 000000B1
:00403D65 50                      push eax
:00403D66 FFD6                    call esi
:00403D68 8B4D1C                  mov ecx, dword ptr [ebp+1C]
:00403D6B 53                      push ebx
:00403D6C 53                      push ebx
:00403D6D 68B7000000              push 000000B7
:00403D72 51                      push ecx
:00403D73 FFD6                    call esi
:00403D75 8BCD                    mov ecx, ebp
:00403D77 EB3C                    jmp 00403DB5
==>上面是:軟體註冊失敗後,軟體給出的提示資訊

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403C1B(C), :00403C35(C)
|
:00403D79 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"軟體註冊"
                                  |
:00403D7B 68F8F24200              push 0042F2F8

* Possible StringData Ref from Data Obj ->"使用者名稱及註冊碼不能為空"
                                  |
:00403D80 68BCF24200              push 0042F2BC
:00403D85 8BCE                    mov ecx, esi
:00403D87 E8FF620100              call 0041A08B
:00403D8C 8B542414                mov edx, dword ptr [esp+14]

* Reference To: USER32.SendMessageA, Ord:0214h
                                  |
:00403D90 8B35A4544200            mov esi, dword ptr [004254A4]
:00403D96 8B42F8                  mov eax, dword ptr [edx-08]
:00403D99 50                      push eax
:00403D9A 8B471C                  mov eax, dword ptr [edi+1C]
:00403D9D 53                      push ebx
:00403D9E 68B1000000              push 000000B1
:00403DA3 50                      push eax
:00403DA4 FFD6                    call esi
:00403DA6 8B4F1C                  mov ecx, dword ptr [edi+1C]
:00403DA9 53                      push ebx
:00403DAA 53                      push ebx
:00403DAB 68B7000000              push 000000B7
:00403DB0 51                      push ecx
:00403DB1 FFD6                    call esi
:00403DB3 8BCF                    mov ecx, edi
==>上面是:軟體註冊過程中,如果你輸入的使用者名稱及註冊碼為空時,軟體給出的提示資訊

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403D77(U)
|
:00403DB5 E831760100              call 0041B3EB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403D39(U)
|
:00403DBA 8D4C2410                lea ecx, dword ptr [esp+10]
:00403DBE 885C2428                mov byte ptr [esp+28], bl
:00403DC2 E89F7E0100              call 0041BC66
:00403DC7 8D4C2414                lea ecx, dword ptr [esp+14]
:00403DCB C7442428FFFFFFFF        mov [esp+28], FFFFFFFF
:00403DD3 E88E7E0100              call 0041BC66
:00403DD8 8B4C2420                mov ecx, dword ptr [esp+20]
:00403DDC 5F                      pop edi
:00403DDD 5E                      pop esi
:00403DDE 5D                      pop ebp
:00403DDF 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403DE6 5B                      pop ebx
:00403DE7 83C41C                  add esp, 0000001C
:00403DEA C3                      ret 

跟蹤進入 00403930 後:

* Referenced by a CALL at Addresses:
|:004037D3  , :00403C52 
|
:00403930 64A100000000            mov eax, dword ptr fs:[00000000]
:00403936 6AFF                    push FFFFFFFF
:00403938 6838394200              push 00423938
:0040393D 50                      push eax
:0040393E 64892500000000          mov dword ptr fs:[00000000], esp
:00403945 56                      push esi
:00403946 8B442414                mov eax, dword ptr [esp+14]
==>EAX中存放著你輸入的註冊碼
:0040394A 8B48F8                  mov ecx, dword ptr [eax-08]
:0040394D 83F908                  cmp ecx, 00000008
==>判斷你輸入的註冊碼位數是否為8位
:00403950 7425                    je 00403977
==>如果註冊碼位數為8位,則跳轉;不跳轉將註冊失敗
:00403952 8D4C2414                lea ecx, dword ptr [esp+14]
:00403956 C744240CFFFFFFFF        mov [esp+0C], FFFFFFFF
:0040395E E803830100              call 0041BC66
:00403963 33C0                    xor eax, eax
:00403965 8B4C2404                mov ecx, dword ptr [esp+04]
:00403969 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403970 5E                      pop esi
:00403971 83C40C                  add esp, 0000000C
:00403974 C20400                  ret 0004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403950(C)
|
:00403977 8A10                    mov dl, byte ptr [eax]
==>取你輸入註冊碼的第 1 位,賦值給 dl
:00403979 0FBE4802                movsx ecx, byte ptr [eax+02]
==>取你輸入註冊碼的第 3 位,賦值給 ecx
:0040397D 0FBEF2                  movsx esi, dl
==>將 dl 中的值賦給 esi
:00403980 8D4C31A0                lea ecx, dword ptr [ecx+esi-60]
==>將你輸入註冊碼的第 1 位和第 3 位的值相加後,再減去 60h 並賦給ecx
:00403984 83F907                  cmp ecx, 00000007
==>判斷 ecx 的值是否為7
:00403987 7425                    je 004039AE
==>如果 ecx 的值為7,則跳轉繼續下面的比較,不跳轉將註冊失敗
:00403989 8D4C2414                lea ecx, dword ptr [esp+14]
:0040398D C744240CFFFFFFFF        mov [esp+0C], FFFFFFFF
:00403995 E8CC820100              call 0041BC66
:0040399A 33C0                    xor eax, eax
:0040399C 8B4C2404                mov ecx, dword ptr [esp+04]
:004039A0 64890D00000000          mov dword ptr fs:[00000000], ecx
:004039A7 5E                      pop esi
:004039A8 83C40C                  add esp, 0000000C
:004039AB C20400                  ret 0004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403987(C)
|
:004039AE 8A4801                  mov cl, byte ptr [eax+01]
==>取你輸入註冊碼的第 2 位,賦值給 cl
:004039B1 0FBE7003                movsx esi, byte ptr [eax+03]
==>取你輸入註冊碼的第 4 位,賦值給 esi
:004039B5 0FBEC9                  movsx ecx, cl
==>將 cl 中的值賦給 ecx
:004039B8 8D4C0EA0                lea ecx, dword ptr [esi+ecx-60]
==>將你輸入註冊碼的第 2 位和第 4 位的值相加後,再減去 60h 並賦給ecx
:004039BC 83F908                  cmp ecx, 00000008
==>判斷 ecx 的值是否為8
:004039BF 7425                    je 004039E6
==>如果 ecx 的值為8,則跳轉繼續下面的比較,不跳轉將註冊失敗
:004039C1 8D4C2414                lea ecx, dword ptr [esp+14]
:004039C5 C744240CFFFFFFFF        mov [esp+0C], FFFFFFFF
:004039CD E894820100              call 0041BC66
:004039D2 33C0                    xor eax, eax
:004039D4 8B4C2404                mov ecx, dword ptr [esp+04]
:004039D8 64890D00000000          mov dword ptr fs:[00000000], ecx
:004039DF 5E                      pop esi
:004039E0 83C40C                  add esp, 0000000C
:004039E3 C20400                  ret 0004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004039BF(C)
|
:004039E6 8A4804                  mov cl, byte ptr [eax+04]
==>取你輸入註冊碼的第 5 位,賦值給 cl
:004039E9 0FBE7006                movsx esi, byte ptr [eax+06]
==>取你輸入註冊碼的第 7 位,賦值給 esi
:004039ED 0FBEC9                  movsx ecx, cl
==>將 cl 中的值賦給 ecx
:004039F0 8D4C0EA0                lea ecx, dword ptr [esi+ecx-60]
==>將你輸入註冊碼的第 5 位和第 7 位的值相加後,再減去 60h 並賦給ecx
:004039F4 83F909                  cmp ecx, 00000009
==>判斷 ecx 的值是否為9
:004039F7 7425                    je 00403A1E
==>如果 ecx 的值為9,則跳轉繼續下面的比較,不跳轉將註冊失敗
:004039F9 8D4C2414                lea ecx, dword ptr [esp+14]
:004039FD C744240CFFFFFFFF        mov [esp+0C], FFFFFFFF
:00403A05 E85C820100              call 0041BC66
:00403A0A 33C0                    xor eax, eax
:00403A0C 8B4C2404                mov ecx, dword ptr [esp+04]
:00403A10 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403A17 5E                      pop esi
:00403A18 83C40C                  add esp, 0000000C
:00403A1B C20400                  ret 0004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004039F7(C)
|
:00403A1E 8A4805                  mov cl, byte ptr [eax+05]
==>取你輸入註冊碼的第 6 位,賦值給 cl
:00403A21 8A4007                  mov al, byte ptr [eax+07]
==>取你輸入註冊碼的第 8 位,賦值給 al
:00403A24 0FBEF0                  movsx esi, al
==>將 al 中的值賦給 esi
:00403A27 0FBEC9                  movsx ecx, cl
==>將 cl 中的值賦給 ecx
:00403A2A 8D4C0EA0                lea ecx, dword ptr [esi+ecx-60]
==>將你輸入註冊碼的第 6 位和第 8 位的值相加後,再減去 60h 並賦給ecx
:00403A2E 83F90A                  cmp ecx, 0000000A
==>判斷 ecx 的值是否為A(16進位制),換算為10進位制是10
:00403A31 7425                    je 00403A58
==>如果 ecx 的值為10,則跳轉繼續下面的比較,不跳轉將註冊失敗
:00403A33 8D4C2414                lea ecx, dword ptr [esp+14]
:00403A37 C744240CFFFFFFFF        mov [esp+0C], FFFFFFFF
:00403A3F E822820100              call 0041BC66
:00403A44 33C0                    xor eax, eax
:00403A46 8B4C2404                mov ecx, dword ptr [esp+04]
:00403A4A 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403A51 5E                      pop esi
:00403A52 83C40C                  add esp, 0000000C
:00403A55 C20400                  ret 0004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403A31(C)
|
:00403A58 0FBEC0                  movsx eax, al
==>將你輸入註冊碼的第 8 位(即 al 中的值),賦值給 eax
:00403A5B 0FBECA                  movsx ecx, dl
==>將你輸入註冊碼的第 1 位(即 dl 中的值),賦值給 ecx
:00403A5E C744240CFFFFFFFF        mov [esp+0C], FFFFFFFF
:00403A66 8D5408A0                lea edx, dword ptr [eax+ecx-60]
==>將你輸入註冊碼的第 8 位和第 1 位的值相加後,再減去 60h 並賦給edx
:00403A6A 8D4C2414                lea ecx, dword ptr [esp+14]
:00403A6E 83FA08                  cmp edx, 00000008
==>判斷 edx 的值是否為8
:00403A71 7419                    je 00403A8C
==>如果 ecx 的值為8,則跳轉,至此註冊碼的比較過程完畢;不跳轉將註冊失敗
:00403A73 E8EE810100              call 0041BC66
:00403A78 33C0                    xor eax, eax
:00403A7A 8B4C2404                mov ecx, dword ptr [esp+04]
:00403A7E 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403A85 5E                      pop esi
:00403A86 83C40C                  add esp, 0000000C
:00403A89 C20400                  ret 0004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403A71(C)
|
:00403A8C E8D5810100              call 0041BC66
:00403A91 8B4C2404                mov ecx, dword ptr [esp+04]
:00403A95 B801000000              mov eax, 00000001
:00403A9A 64890D00000000          mov dword ptr fs:[00000000], ecx
:00403AA1 5E                      pop esi
:00403AA2 83C40C                  add esp, 0000000C
:00403AA5 C20400                  ret 0004

演算法總結:

例如:你輸入的註冊碼是:12345678,則註冊演算法是:

      條  件:ASCII碼:1 的16進製為31,2 的16進製為32,……(與此類推),8 的16進製為38

      第一次:用註冊碼的第 1 位和第 3 位的值相加,再減去60h(16進位制)後,與值 7 相比;
              即 31

宣告:該文觀點僅代表作者本人,轉載請註明來自看雪專欄
最新評論 (0)
登入後即可評論

相關文章