演算法分析: <獻給初學者> 之二 (7千字)
演算法分析: <獻給初學者> 之二
◆ 作 者 ◆ goodbao[P.J.CHINA]
▲軟體名稱▲解除安裝精靈v1.22
▲下載地址▲
http://www.softreg.com/download.asp?id={C3347316-B547-4DDC-80C3-884F2FBF3BA8}
▲軟體簡介▲
已經厭倦了WINDOWS控制皮膚那個功能很弱的“新增/刪除程式”了嗎?你是否發現你的電腦裡面有些軟體無法解除安裝?****的智慧解除安裝功能可以乾淨徹底地解除安裝軟體,包括那些無法正常解除安裝的程式它都可以幫您解除安裝。
▲破解難度▲ 非明碼,較難。(此軟體非演算法不可解。當然,除爆破!)
▲演算法難度▲ 較難
請隨我來一步步看看它的演算法吧!!LET'S
GO!!!!!!
下斷點BPX HMEMCPY,然後填寫註冊名與註冊碼(註冊名任意,註冊碼必須8位,不能多也不能少。為什麼?請看下邊嘛!)。當然,在不知道的情況下,可以任意填寫註冊碼。然後確定,然後中斷,然後清斷,然後19次F12(為什麼19次?不會吧,這個問題不用回答了吧?),會到達下邊:
:00403BF0 E8ED580100 call 004194E2
: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 E8DB580100
call 004194E2
:00403C07 8B542414 mov edx, dword ptr [esp+14]
*
Possible Reference to Dialog:
|
:00403C0B 6874134300 push 00431374
:00403C10 52 push edx
:00403C11 E8AB830000 call 0040BFC1
:00403C16 83C408
add esp, 00000008
:00403C19 85C0 test eax, eax
:00403C1B 0F8458010000
je 00403D79
:00403C21 8B442410 mov eax, dword ptr [esp+10]
* Possible
Reference to Dialog:
|
:00403C25 6874134300 push 00431374
:00403C2A
50 push eax
:00403C2B E891830000 call 0040BFC1
: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 E89F7D0100 call 0041B9EB
:00403C4C 8B0D70134300 mov ecx, dword ptr [00431370]
:00403C52 E8D9FCFFFF
call 00403930 //F8跟入
:00403C57 3BC3 cmp eax, ebx
:00403C59 0F84DC000000
je 00403D3B //跳則死
================進入雷區嘍================
:00403930
64A100000000 mov eax, dword ptr fs00000000]
:00403936 6AFF push FFFFFFFF
:00403938 6848394200 push 00423948
:0040393D 50 push eax
:0040393E
64892500000000 mov dword ptr fs00000000], esp
:00403945 56 push esi
:00403946 8B442414 mov eax, dword ptr [esp+14]
:0040394A 8B48F8 mov ecx,
dword ptr [eax-08]
:0040394D 83F908 cmp ecx, 00000008 //註冊碼與8比較
:00403950
7425 je 00403977 //不等就不跳,不跳就死嘍!
:00403952 8D4C2414 lea ecx, dword ptr [esp+14]
:00403956 C744240CFFFFFFFF mov [esp+0C], FFFFFFFF
:0040395E E813830100
call 0041BC76
:00403963 33C0 xor eax, eax
:00403965 8B4C2404 mov ecx,
dword ptr [esp+04]
:00403969 64890D00000000 mov dword ptr fs00000000], 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] //取註冊碼第一位字母的16 進位制值放入DL
:00403979 0FBE4802 movsx ecx, byte ptr
[eax+02] //取註冊碼第三位字母的16 進位制值,賦給ECX
:0040397D 0FBEF2 movsx esi, dl //第一位值賦給ESI
:00403980 8D4C31A0 lea ecx, dword ptr 計算結果儲存到ECX
:00403984
83F907 cmp ecx, 00000007 //比較剛才計算的結果是否等於7
:00403987 7425 je 004039AE //不等就不跳,那就死嘍!
:00403989 8D4C2414 lea ecx, dword ptr [esp+14]
:0040398D C744240CFFFFFFFF
mov [esp+0C], FFFFFFFF
:00403995 E8DC820100 call 0041BC76
:0040399A
33C0 xor eax, eax
:0040399C 8B4C2404 mov ecx, dword ptr [esp+04]
:004039A0
64890D00000000 mov dword ptr fs00000000], ecx
:004039A7 5E pop esi
:004039A8
83C40C add esp, 0000000C
:004039AB C20400 ret 0004 //不跳就從這裡退出此CALL了,
那就GAME OVER了!(下同)
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:00403987(C)
|
:004039AE 8A4801 mov cl, byte
ptr [eax+01] //取第二位字母的16進位制 值放入CL
:004039B1 0FBE7003 movsx esi, byte
ptr [eax+03] //取第四位字母的16進位制
值,賦給ESI
:004039B5 0FBEC9 movsx ecx,
cl //CL值送ECX
:004039B8 8D4C0EA0 lea ecx, dword ptr [esi+ecx-60]//計算結果存入ECX
:004039BC 83F908 cmp ecx, 00000008 //結果與8比較
:004039BF 7425 je 004039E6
//不等就死嘍!!!
:004039C1 8D4C2414 lea ecx, dword ptr [esp+14]
:004039C5
C744240CFFFFFFFF mov [esp+0C], FFFFFFFF
:004039CD E8A4820100 call 0041BC76
:004039D2 33C0 xor eax, eax
:004039D4 8B4C2404 mov ecx, dword ptr [esp+04]
:004039D8 64890D00000000 mov dword ptr fs00000000], 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] //取第五位字母值入CL
:004039E9 0FBE7006 movsx esi, byte ptr [eax+06] //取第七位字母值入ESI
:004039ED
0FBEC9 movsx ecx, cl //CL送ECX
:004039F0 8D4C0EA0 lea ecx, dword ptr [esi+ecx-60]//同上計算,結果入ECX
:004039F4 83F909 cmp ecx, 00000009 //結果與9比較
:004039F7 7425 je 00403A1E
//不等就死嘍!!!
:004039F9 8D4C2414 lea ecx, dword ptr [esp+14]
:004039FD
C744240CFFFFFFFF mov [esp+0C], FFFFFFFF
:00403A05 E86C820100 call 0041BC76
:00403A0A 33C0 xor eax, eax
:00403A0C 8B4C2404 mov ecx, dword ptr [esp+04]
:00403A10 64890D00000000 mov dword ptr fs00000000], 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] //取第六位字母值入CL
:00403A21 8A4007 mov al, byte ptr [eax+07] //取第八位字母值入AL
:00403A24 0FBEF0
movsx esi, al //AL 送 ESI
:00403A27 0FBEC9 movsx ecx, cl //CL 送 ECX
:00403A2A
8D4C0EA0 lea ecx, dword ptr [esi+ecx-60]//同上計算,結果入ECX
:00403A2E 83F90A cmp
ecx, 0000000A //結果與10比較
:00403A31 7425 je 00403A58 //不等就死嘍!
:00403A33
8D4C2414 lea ecx, dword ptr [esp+14]
:00403A37 C744240CFFFFFFFF mov [esp+0C],
FFFFFFFF
:00403A3F E832820100 call 0041BC76
:00403A44 33C0 xor eax,
eax
:00403A46 8B4C2404 mov ecx, dword ptr [esp+04]
:00403A4A 64890D00000000
mov dword ptr fs00000000], 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 //第八位值送EAX
:00403A5B 0FBECA movsx ecx,
dl //第一位值送ECX
:00403A5E C744240CFFFFFFFF mov [esp+0C], FFFFFFFF
:00403A66
8D5408A0 lea edx, dword ptr [eax+ecx-60]//計算,結果入EDX
:00403A6A 8D4C2414 lea
ecx, dword ptr [esp+14]
:00403A6E 83FA08 cmp edx, 00000008 //結果等於8嗎?
:00403A71 7419 je 00403A8C //不等就死嘍!!!!
:00403A73 E8FE810100 call 0041BC76
:00403A78 33C0 xor eax, eax
:00403A7A 8B4C2404 mov ecx, dword ptr [esp+04]
:00403A7E 64890D00000000 mov dword ptr fs00000000], ecx
:00403A85 5E
pop esi
:00403A86 83C40C add esp, 0000000C
:00403A89 C20400 ret 0004
▲演算法總結▲
從上邊的分析可以看出,此軟體的演算法是這樣的:
1、輸入的註冊碼必須是8位,且註冊碼與註冊名無關。(但是,不能讓註冊名空)
2、涉及的計算公式是統一的,x先後取值為7、8、9、10、8。
3、具體計算過程:
①註冊碼的第一位16進位制值+第三位16進位制值-60=7
②註冊碼的第二位16進位制值+第四位16進位制值-60=8
③註冊碼的第五位16進位制值+第七位16進位制值-60=9
④註冊碼的第六位16進位制值+第八位16進位制值-60=10
⑤註冊碼的第一位16進位制值+第八位16進位制值-60=8
所以,只要滿足以上條件,就可以任意註冊嘍!!!!!!!
那就隨便編一個註冊碼吧:12666337。當然,50283763也行啊!!呵呵,簡直太多啦!!!
呵呵,看來這個軟體拿來編寫序號產生器就合適不過了。呵呵。。。。。。。。
--------------------------------------------------------------------------------
神龍寶寶
goodbao[P.J.CHINA][BCG][CNCG]
相關文章
- 演算法分析: <獻給初學者>
之一 (4千字)2002-06-06演算法
- 演算法分析: <獻給初學者>
之四 (9千字)2002-06-06演算法
- 學演算法的看過來 》》》演算法分析:
<獻給初學者> 之五 (5千字)2002-06-07演算法
- 獻給UNIX的初學者2012-03-08
- 獻給初學者(高手也看看) 破解 Cpukiller 2.0 (1千字)2000-09-17
- 初學者(7) (4千字)2000-05-05
- 初學者(22) (7千字)2000-08-09
- 初學者(23) (7千字)2000-08-13
- 小李登錄檔大師 v1.41 註冊演算法分析--獻給 LILITH 和解密演算法初學者 (10千字)2001-11-09演算法解密
- 給初學者,因為我就是個初學者(1) (3千字)2000-05-03
- 給初學者,因為我就是個初學者(2) (1千字)2000-05-03
- 給初學者,因為我就是個初學者(4) (1千字)2000-05-03
- tkprof命令列工具用法小結,獻給初學者朋友2010-06-20命令列
- 獻給初學者(高手也點評點評!!)KoolMoves V1.33的破解!!
(10千字)2000-09-16
- 寫給Git初學者的7個建議2013-10-31Git
- 初學者(8) (4千字)2000-05-07
- 初學者(9) (3千字)2000-05-07
- 初學者(10) (8千字)2000-05-14
- 初學者(11) (2千字)2000-05-18
- 初學者(12) (1千字)2000-06-09
- 初學者(13) (2千字)2000-06-09
- 初學者(14) (5千字)2000-06-10
- 初學者(15) (3千字)2000-07-04
- 初學者(16) (2千字)2000-07-04
- 初學者(17) (1千字)2000-07-04
- 初學者(18) (2千字)2000-07-05
- 初學者(19) (4千字)2000-07-10
- 初學者(20) (3千字)2000-07-15
- 初學者(20) (1千字)2000-08-08
- 初學者(26) (9千字)2000-08-17
- 初學者(27) (1千字)2000-08-25
- 飛馬魔法桌布V3.0註冊演算法(適合初學者) (7千字)2001-11-25演算法
- 手動脫掉Asprotect的殼,(給初學者的) (9千字)2002-01-24
- 給初學者,因為我就是個初學者(3) (569字)2000-05-03
- 初學者請看! (2千字)2000-12-28
- 初學者作品(6) (1千字)2000-05-04
- RCA---給初學者的根本原因分析案例2023-02-28
- 英語會話精靈 2.0 --謹以此文獻給初學破解的愛好者
(7千字)2015-11-15會話