高手請進!幫手指出這個演算法裡面的錯誤 (12千字)
PauYyoung大哥你還記得這句話嗎??
↓↓↓↓↓
【有信心,凡事有可能】
【請各位大哥幫小弟找一下這個註冊演算法有什麼錯誤】
作者:隨風而去[CNCG]
所用時間:一週
軟體名:Dance Dance Revlution for winamp
軟體介紹:
此乃winamp的一個外掛,可以讓winamp實現跳舞毯的功能,
沒有註冊前,不能使用跳舞毯,還有一個特殊效果也用不上。註冊之後就沒有這些限制了。
***************************************************************************************
先執行winamp,招到此外掛的配置視窗,然後點選註冊,標準的註冊視窗,使用者名稱加註冊碼。
先隨便試了一下,有錯誤提示,,用trw追。
下中斷bpx
hmemcpy,
不要下pmodule,
直接按F12,按了11下就回到程式了
重新來一次,按10下F12後。
按一下F10,來到如下的程式段:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10003740(C)
|
* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:10003769 8B35D0B10010 mov esi,
dword ptr [1000B1D0]//F10來到這裡
:1000376F 53
push ebx
:10003770 8B5C2430
mov ebx, dword ptr [esp+30]
:10003774 6A64
push 00000064
:10003776 6830F40010
push 1000F430
:1000377B 68FB030000
push 000003FB
:10003780 53
push ebx
:10003781 FFD6
call esi <--取註冊碼長度放入EAX中
:10003783 8D4C240C
lea ecx, dword ptr [esp+0C] <--D EDX可看假碼
:10003787 6A20
push 00000020
:10003789 51
push ecx
:1000378A 68FA030000
push 000003FA
:1000378F 53
push ebx
:10003790 FFD6
call esi
:10003792 8D54240C
lea edx, dword ptr [esp+0C]
:10003796 52
push edx
:10003797 6830F40010
push 1000F430 <--此處D 0287F430可看使用者名稱
:1000379C E8EFF7FFFF
call 10002F90 //這裡有一個經典的對比,
所以這個CALL嫌疑非常大,
F8跟進到看看。
:100037A1 83C408
add esp, 00000008
:100037A4 85C0
test eax, eax
:100037A6 0F84A3000000 je 1000384F
:100037AC 8D442430
lea eax, dword ptr [esp+30]
:100037B0 50
push eax
F8來到這裡
* Referenced by a CALL at Addresses:
|:100010D8 , :1000379C
|
:10002F90 83EC28
sub esp, 00000028
:10002F93 55
push ebp
:10002F94 8B6C2430
mov ebp, dword ptr [esp+30]
:10002F98 85ED
test ebp, ebp <--看使用者名稱是否為空
:10002F9A 57
push edi
:10002F9B 0F8429010000 je 100030CA
:10002FA1 8B542438
mov edx, dword ptr [esp+38]
:10002FA5 85D2
test edx, edx <--看註冊碼是否為空
:10002FA7 0F841D010000 je 100030CA
:10002FAD 8BFD
mov edi, ebp
:10002FAF 83C9FF
or ecx, FFFFFFFF
:10002FB2 33C0
xor eax, eax
:10002FB4 F2
repnz
:10002FB5 AE
scasb
:10002FB6 F7D1
not ecx
:10002FB8 49
dec ecx
:10002FB9 0F840B010000 je 100030CA
:10002FBF 8BFA
mov edi, edx
:10002FC1 83C9FF
or ecx, FFFFFFFF
:10002FC4 F2
repnz
:10002FC5 AE
scasb
:10002FC6 F7D1
not ecx
:10002FC8 49
dec ecx
:10002FC9 0F84FB000000 je 100030CA
:10002FCF 53
push ebx
:10002FD0 32DB
xor bl, bl
:10002FD2 B908000000
mov ecx, 00000008
:10002FD7 8D7C2411
lea edi, dword ptr [esp+11]
:10002FDB 885C2410
mov byte ptr [esp+10], bl
:10002FDF 33D2
xor edx, edx
:10002FE1 F3
repz
:10002FE2 AB
stosd
:10002FE3 8BFD
mov edi, ebp
:10002FE5 83C9FF
or ecx, FFFFFFFF
:10002FE8 F2
repnz
:10002FE9 AE
scasb
:10002FEA F7D1
not ecx
:10002FEC 49
dec ecx
:10002FED 56
push esi
:10002FEE 85C9
test ecx, ecx
:10002FF0 894C243C
mov dword ptr [esp+3C], ecx
:10002FF4 7E0A
jle 10003000
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10002FFE(C)
|
:10002FF6 8A042A
mov al, byte ptr [edx+ebp] --| |註冊名用十六進位制放入al
:10002FF9 32D8
xor bl, al
| | 和BL異或後,
:10002FFB 42
inc edx
|-----|BL再和第二位異或……
:10002FFC 3BD1
cmp edx, ecx
| |到最後一位,得出BL
:10002FFE 7CF6
jl 10002FF6 -----------------| |
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10002FF4(C)
|
:10003000 33F6
xor esi, esi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10003073(U)
|
:10003002 83FE08
cmp esi, 00000008 //註冊碼不小於8個<1>
:10003005 7C07
jl 1000300E//小於就跳
:10003007 8D0409
lea eax, dword ptr [ecx+ecx]//註冊碼是註冊名*2
:1000300A 3BF0
cmp esi, eax //比較
:1000300C 7D67
jge 10003075 //大於或等於跳,跳到註冊碼比較
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10003005(C)
|
:1000300E 8BFD
mov edi, ebp
:10003010 83C9FF
or ecx, FFFFFFFF
:10003013 33C0
xor eax, eax
:10003015 F2
repnz
:10003016 AE
scasb
:10003017 8BC6
mov eax, esi
:10003019 99
cdq
:1000301A F7D1
not ecx
:1000301C 2BC2
sub eax, edx
:1000301E 49
dec ecx
:1000301F D1F8
sar eax, 1
:10003021 33D2
xor edx, edx
:10003023 F7F1
div ecx
:10003025 83FE01
cmp esi, 00000001
:10003028 8BFA
mov edi, edx
:1000302A 7E05
jle 10003031
:1000302C 8D46FF
lea eax, dword ptr [esi-01]
:1000302F EB02
jmp 10003033
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1000302A(C)
|
:10003031 33C0
xor eax, eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1000302F(U)
|
:10003033 8A4C0414 |---mov cl,
byte ptr [esp+eax+14]//正確的註冊碼從0位開始放入cl
:10003037 32CB <B>==| xor
cl, bl <---------------- //與上面得出的bl異或
:10003039 80F18D |
xor cl, 8D <---------------- //與8d異或
:1000303C 8AD9
|---mov bl, cl <---------------- //放入bl, 保留著下次再計算
:1000303E 885C2410
mov byte ptr [esp+10], bl
:10003042 8B542410
mov edx, dword ptr [esp+10] //得出的結果放入<1>計算
:10003046 52
push edx
:10003047 E8F4FEFFFF
call 10002F40 <------------- //-----------<1>
:1000304C 8B4C2440
mov ecx, dword ptr [esp+40]
:10003050 88443418
mov byte ptr [esp+esi+18], al //放入<1>計算的註冊碼
:10003054 2BCF
sub ecx, edi
:10003056 8A5429FF |---mov dl,
byte ptr [ecx+ebp-01]----| |註冊名的最後一位和註冊
:1000305A 32D0 <C>==| xor
dl, al
|===|碼第二位異或,再與D8異
:1000305C 80F2D8 |---xor
dl, D8-----------------------| |或。得出dl放入<1>計算
:1000305F 52
push edx
:10003060 E8DBFEFFFF
call 10002F40 <------------- //-------------<1>
:10003065 8B4C2444
mov ecx, dword ptr [esp+44]
:10003069 83C408
add esp, 00000008
:1000306C 88443415
mov byte ptr [esp+esi+15], al //放入<1>計算的註冊碼
:10003070 83C602
add esi, 00000002
:10003073 EB8D
jmp 10003002 <------------- //向上跳,跳到<1>
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1000300C(C)
|
:10003075 8B742440
mov esi, dword ptr [esp+40] //這裡是假碼,下d esp+40
:10003079 8D442414
lea eax, dword ptr [esp+14] //這裡是真碼,下d esp+14
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1000309F(C)
跟進<1> *
*************************************
* Referenced by a CALL at Addresses:
|:10003047 , :10003060
|
:10002F40 8B442404
mov eax, dword ptr [esp+04] //將結果放入EAX
:10002F44 B93E000000
mov ecx, 0000003E <---------//ECX=3e
:10002F49 25FF000000
and eax, 000000FF <---------//取EAX最後兩位
:10002F4E 99
cdq
:10002F4F F7F9
idiv ecx <------------------//eax/ecx al=商 dl=餘
:10002F51 B03D
mov al, 3D <----------------//al=3d
:10002F53 2AC2
sub al, dl <----------------//al=al-dl
:10002F55 3C09
cmp al, 09 <----------------//比較
:10002F57 88442404
mov byte ptr [esp+04], al //al放入[esp+04]
:10002F5B 761A
jbe 10002F77 <--------------//不低於或等於
:10002F5D 3C23
cmp al, 23 <---------------//比較
:10002F5F 8B442404
mov eax, dword ptr [esp+04] //[esp+04]放入eax
:10002F63 7609
jbe 10002F6E <--------------//不低於或等於
:10002F65 25FF000000
and eax, 000000FF <---------//取EAX最後兩位
:10002F6A 83C03D
add eax, 0000003D <---------//eax=eax+3d
:10002F6D C3
ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10002F63(C)
|
:10002F6E 25FF000000
and eax, 000000FF <---------//取EAX最後兩位
:10002F73 83C037
add eax, 00000037 <---------//eax=eax+37
:10002F76 C3
ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10002F5B(C)
|
:10002F77 8B442404
mov eax, dword ptr [esp+04] //[esp+04]放入eax
:10002F7B 25FF000000
and eax, 000000FF <---------//取EAX最後兩位
:10002F80 83C030
add eax, 00000030 <---------//eax=eax+30
:10002F83 C3
ret
都不知道那些XOR是怎麼計算的,現在寫出過程!
我的註冊名:black
整理:b與bl異或,bl再和第二位註冊名異或得出bl再和第三位異或……到最後一位得出bl。
裡異或的第一次過進
bl與b(62)得bl=62
bl與l(6c)得bl=e
bl與a(61)得bl=6f
bl與c(63)得bl=c
bl與k(6b)得bl=67
<B>整理:正註冊碼的0位開始放入cl與上面的bl異或得出bl,bl與8d異或得出bl,bl保留下次現計。
<B>裡異或的第一次過進
第一次 cl(0)與bl(67)得cl=67
cl與8d得cl=ea
cl保留到bl=ea
第二次 cl(30)與bl得cl=da
cl與8d得cl=57
cl保留到bl=57
第三次 cl(54)與bl得cl=3
cl與8d得cl=8e
cl保留到bl=8e
第四次 cl(63)與bl得cl=ed
cl與8d得cl=60
cl保留到bl=60
第五次 cl(48)與bl得cl=28
cl與8d得cl=a5
cl保留到bl=a5
<C>整理:註冊名的最後一位dl和註冊碼第一位al異或,得出dl位異或,再與D8異或……得出dl
<C>裡異或的第一次過進
第一次 dl(67)與al(44)得dl=2f
dl與D8得dl=f7
第二次 dl(63)與al(61)得dl=2
dl與D8得dl=da
第三次 dl(61)與al(68)得dl=9
dl與D8得dl=d1
第四次 dl(6c)與al(52)得dl=32
dl與D8得dl=e6
第五次 dl(62)與al(4d)得dl=29
dl與D8得dl=f1
【請大哥級的高手幫一下小弟,講解一下<B><C>xor的計算過程】
最後得出
註冊名:black
註冊碼:D0aTHcRHK6 (注意大小寫)
要各位大哥們幫我寫個序號產生器來
先謝謝大哥們了
相關文章
- 求高手指出DNS配置錯誤(轉)2007-08-15DNS
- 請教高手,這是什麼錯誤?2007-02-26
- 高手請幫忙看看小弟寫的這個web service:2004-04-29Web
- 安裝時提示錯誤,請高手幫忙解決一下2019-05-11
- 請高手幫忙!2003-09-27
- 急!!請高手幫忙2006-03-31
- jbuilder高手請幫忙2004-03-12UI
- 請各位高手幫忙!2004-07-09
- 請各路高手幫忙,關於JAVA NIO的方面的問題2007-03-01Java
- 尋求高手幫助ora-00600錯誤2007-12-24
- 一個struts例子老出現如下錯誤,請高手來看看。。。。2004-06-11
- 高手請進2004-04-20
- 為什麼開網頁時有這種錯誤!請高手指點:)2003-12-11網頁
- jbuilder編譯jive出現的錯誤,高手幫忙!!2003-04-03UI編譯
- NIO Socket的2個問題?請高手幫忙!2004-02-13
- 請熟悉混沌原理和c高手幫個忙 (轉)2007-12-04
- 請高手幫我看一下這是怎麼回事2009-10-10
- 請高手幫幫忙,給點兒資訊也行2003-09-07
- 我破了一個小軟體,但它還是存在一些問題,想請高手幫忙分析一下?請進!!! (4千字)2001-01-07
- 希望高手幫助一下 ,小弟在這裡感謝了2004-08-17
- 一個郵件的JAVABEAN問題,請高手幫忙2004-12-26JavaBean
- 為什麼有ejbCreate()方法錯誤!!請高手指點2004-05-14
- 這個OracleDriver錯在哪裡2003-10-15Oracle
- 各位高手請幫忙,不勝感激!!!!2004-12-16
- 高手們請進哈2008-06-12
- 用jb7編譯jdon的錯誤,請高手看看2003-03-27編譯
- 各位高手幫幫忙吧!servlet多執行緒問題,詳細內容請進!!!2007-12-09Servlet執行緒
- 請大牛指出這段js程式碼的可讀性到底差在哪裡。不勝感激2015-12-17JS
- 請高手幫忙分析一個JSP小程式的問題2004-05-16JS
- 請教高手sql錯誤:javax.servlet.ServletException: 用盡的 Resultset2006-04-24SQLJavaServletException
- xml方面的的問題,請高手指教2002-12-03XML
- 高手請進JAVA怎麼實現 屬性 onclick="yyy(this);"幫定2006-01-25Java
- 這個jsp程式除錯不透過,請各位熱心人幫助解答.2003-06-12JS除錯
- Mac 真機 webDriver 配置這塊一直報這個錯誤,請大神指教2020-06-01MacWeb
- $(function{})裡面的onclick報錯2018-07-02Function
- 請高手破解這款軟體!2000-11-28
- 異想天開的打狗記錄(高手免進) (12千字)2002-07-17
- 有關javaAPI,請各位高手幫忙,拜謝2004-03-20JavaAPI