用ollydbg破解就是爽,貼出超級屏捕的破解過程和演算法分析,請大家多多指教!! (15千字)
超級屏捕3.0
一個很方便的螢幕捕捉軟體,功能比較強大。雖然12月10號才釋出3.0版,可是網上關於它的序號產生器已經是滿天飛了,呵呵,有點恐怖,那些共享軟體的作者沒的活了。別人都已經寫出序號產生器了,我還破它幹什麼啊,沒關係,我只是為了練習使用ollybdg這個特棒的除錯軟體而已。想像一下,一遍聽著mp3,一遍破著軟體,什麼紙啊,筆啊都不需要,那種感覺有多奇妙啊,一個字,爽!!!
好了,廢話少說,開始動手了,come on。
執行ollydbg,load超級屏捕3.0 ,裝載完畢後,ollydbg自己就中斷下來了,此時,螢幕共分四個視窗,左上角是彙編區,右上角是暫存器區,左下角是記憶體區,右下角是什麼呢,我也不太清楚,不知道誰能告訴我。
哦,忘了說了,超級屏捕是用vc++寫的,沒有加殼,呵呵,作者好大方啊!!
好了,破解開始了,在左上角點滑鼠右鍵,在彈出的選單中選擇查詢->所有參考文字字串。ollydbg開啟一個新視窗,哇哈,滿板的英文,眼睛都看花了。沒關係,點滑鼠右鍵,選擇search
for text,彈出一個對話方塊,在對話方塊中輸入Incomplete or incorrect Registration-Number. Please
input again! 當然,你可以不用輸這麼多,一部分就可以了。對話方塊中還有兩個選項,一個是區分大小寫,一個是全範圍查詢,自己看著辦拉。然後點確定,找到後,程式會將游標停在那一行上,如果不是你想要的那句話,就安ctrl+l繼續查詢,知道找到為止。好了,找到那句話後,在那一行上面點滑鼠右鍵,選擇toggle
breakpoint或這按F2設定斷點。現在關閉這個視窗,回到ollydbg的主介面,點選除錯選單,選擇執行,或者直接按F9執行程式。
現在出現超級屏捕的註冊畫面,隨便填入一些註冊碼,然後點選確定,程式被ollydbg中斷,游標停留在我門設的那個斷點上,如下:
004200D0 .>SUB ESP,8D4
004200D6 .>XOR EAX,EAX
004200D8 .>PUSH EBX
004200D9 .>MOV EBX,ECX
004200DB .>PUSH EDI
004200DC .>MOV ECX,8
004200E1 .>LEA EDI,DWORD PTR SS:[ESP+8]
004200E5 .>PUSH 20
004200E7 .>REP STOS DWORD PTR ES:[EDI]
004200E9 .>LEA EAX,DWORD PTR SS:[ESP+C]
004200ED .>MOV ECX,EBX
004200EF .>PUSH EAX
004200F0 .>PUSH 48D
004200F5 .>CALL SUPERCAP.004934BE
004200FA .>TEST EAX,EAX
004200FC .>JE SUPERCAP.00420188
00420102 .>PUSH SUPERCAP.004DFBCC //ASCII "SC30"
00420107 .>LEA ECX,DWORD PTR SS:[ESP+C]
0042010B .>PUSH 1
0042010D .>PUSH ECX
0042010E .>LEA EDX,DWORD PTR DS:[EBX+248]
00420114 .>PUSH 1
00420116 .>PUSH EDX
00420117 .>CALL SUPERCAP.0041EE30 //這個就是關鍵計算對比call了,決定你的命運如何,進去看看
0042011C .>ADD ESP,14
0042011F .>TEST EAX,EAX
//看註冊成功與否
00420121 .>JE SHORT SUPERCAP.00420188 //發現是這個跳,讓我們voer了,呵呵,不跳就註冊成功,當然程式在後面還會有一個校驗,不管它了,向上看
00420123 .>LEA EAX,DWORD PTR SS:[ESP+28]
00420127 .>PUSH ESI
00420128 .>PUSH EAX
00420129 .>CALL SUPERCAP.0041A880
0042012E .>LEA EDI,DWORD PTR SS:[ESP+10]
00420132 .>OR ECX,FFFFFFFF
00420135 .>XOR EAX,EAX
00420137 .>LEA EDX,DWORD PTR SS:[ESP+1CC]
0042013E .>REPNE SCAS BYTE PTR ES:[EDI]
00420140 .>NOT ECX
00420142 .>SUB EDI,ECX
00420144 .>MOV EAX,ECX
00420146 .>MOV ESI,EDI
00420148 .>MOV EDI,EDX
0042014A .>SHR ECX,2
0042014D .>REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0042014F .>MOV ECX,EAX
00420151 .>AND ECX,3
00420154 .>REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00420156 .>LEA ECX,DWORD PTR SS:[ESP+30]
0042015A .>PUSH ECX
0042015B .>CALL SUPERCAP.0041A8C0
00420160 .>MOV ECX,DWORD PTR DS:[EBX+268]
00420166 .>ADD ESP,8
00420169 .>PUSH 0
0042016B .>PUSH 40
0042016D .>PUSH SUPERCAP.004E28BC //ASCII "Registe Ok!"發現這裡有句註冊成功的話,向下看看
00420172 .>CALL SUPERCAP.0041C660
00420177 .>MOV ECX,EBX
00420179 .>CALL SUPERCAP.0048FFC4
0042017E .>POP ESI
0042017F .>POP EDI
00420180 .>POP EBX
00420181 .>ADD ESP,8D4
00420187 .>RETN
//這裡程式就返回上一級了,所以再向上找,看是那個跳轉跳過了此斷程式碼
00420188 >>MOV ECX,DWORD PTR DS:[EBX+268]
0042018E .>PUSH 0
00420190 .>PUSH 10
00420192 .>PUSH SUPERCAP.004E2878 //ASCII "Incomplete
or incorrect Registration-Number. Please input again!" 第一次被ollydbg中斷時,游標停留在這裡,下面的call就是秀出註冊失敗的畫面,所以向上看,尋找可跳過這些程式碼的跳轉
00420197 .>CALL SUPERCAP.0041C660
0042019C .>POP EDI
0042019D .>POP EBX
0042019E .>ADD ESP,8D4
004201A4 .>RETN
好了,我們00420117 CALL SUPERCAP.0041EE30這個call上下斷,重新執行一遍程式,程式被中斷下來,此時看看右上角的視窗,看到了什麼,呵呵,你的假碼和你的註冊碼,好,按F7跟進去,來到如下地方:
0041EE30 /$>SUB ESP,80
0041EE36 |.>MOV ECX,8
0041EE3B |.>XOR EAX,EAX
0041EE3D |.>PUSH EBX
0041EE3E |.>PUSH ESI
0041EE3F |.>PUSH EDI
0041EE40 |.>LEA EDI,DWORD PTR SS:[ESP+6C]
0041EE44 |.>REP STOS DWORD PTR ES:[EDI]
0041EE46 |.>MOV ECX,8
0041EE4B |.>LEA EDI,DWORD PTR SS:[ESP+2C]
0041EE4F |.>REP STOS DWORD PTR ES:[EDI]
0041EE51 |.>MOV ECX,8
0041EE56 |.>LEA EDI,DWORD PTR SS:[ESP+4C]
0041EE5A |.>REP STOS DWORD PTR ES:[EDI]
0041EE5C |.>MOV ECX,8
0041EE61 |.>LEA EDI,DWORD PTR SS:[ESP+C]
0041EE65 |.>REP STOS DWORD PTR ES:[EDI]
0041EE67 |.>MOV EAX,DWORD PTR SS:[ESP+94]
0041EE6E |.>TEST EAX,EAX
0041EE70 |.>JE SHORT SUPERCAP.0041EE89
0041EE72 |.>MOV ECX,DWORD PTR SS:[ESP+90]
0041EE79 |.>LEA EAX,DWORD PTR SS:[ESP+C]
0041EE7D |.>PUSH EAX
0041EE7E |.>PUSH ECX
0041EE7F |.>CALL SUPERCAP.0041EC20 //此call是將機器ID中的“-”去掉
0041EE84 |.>ADD ESP,8
0041EE87 |.>JMP SHORT SUPERCAP.0041EEB1
上面這一段程式碼就是將你的機器碼中的“-”去掉,沒必要關心它是怎麼做到的,繼續往下走,程式跳到這裡:
0041EEB1 |>>MOV EAX,DWORD PTR SS:[ESP+9C]
0041EEB8 |.>TEST EAX,EAX
0041EEBA |.>JE SHORT SUPERCAP.0041EED3
0041EEBC |.>MOV EDX,DWORD PTR SS:[ESP+98] //取輸入的註冊碼放到edx
0041EEC3 |.>LEA ECX,DWORD PTR SS:[ESP+2C]
0041EEC7 |.>PUSH ECX
0041EEC8 |.>PUSH EDX
0041EEC9 |.>CALL SUPERCAP.0041EC20 //此call跟上面一樣,去掉輸入註冊碼中的“-” ,所以到這裡我們就知道,註冊碼的形式為XXXX-XXXX-XXXX-XXXX
0041EECE |.>ADD ESP,8
0041EED1 |.>JMP SHORT SUPERCAP.0041EEFB
這段程式碼告訴我們註冊碼的形式為XXXX-XXXX-XXXX-XXXX ,沒什麼有價值的資訊,繼續往下走,跳到這裡:
0041EEFB |>>MOV EDI,DWORD PTR SS:[ESP+A0] //SUPERCAP.004DFBCC
0041EF02 |.>OR ECX,FFFFFFFF
0041EF05 |.>XOR EAX,EAX
0041EF07 |.>LEA EDX,DWORD PTR SS:[ESP+4C]
0041EF0B |.>REPNE SCAS BYTE PTR ES:[EDI]
0041EF0D |.>NOT ECX
0041EF0F |.>SUB EDI,ECX
0041EF11 |.>MOV EAX,ECX
0041EF13 |.>MOV ESI,EDI
0041EF15 |.>MOV EDI,EDX
0041EF17 |.>LEA EDX,DWORD PTR SS:[ESP+6C]
0041EF1B |.>SHR ECX,2
0041EF1E |.>REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0041EF20 |.>MOV ECX,EAX
0041EF22 |.>LEA EAX,DWORD PTR SS:[ESP+C] //將去掉-的機器ID放到eax
0041EF26 |.>AND ECX,3
0041EF29 |.>REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0041EF2B |.>LEA ECX,DWORD PTR SS:[ESP+4C] //將“SC30”放到ecx
0041EF2F |.>PUSH ECX
0041EF30 |.>PUSH 0
0041EF32 |.>PUSH EDX
0041EF33 |.>PUSH 0
0041EF35 |.>PUSH EAX
0041EF36 |.>CALL SUPERCAP.0041ED50 //此call將機器ID作一些變換,然後據此計算註冊碼,要寫序號產生器就跟進去!!!
0041EF3B |.>ADD ESP,14
0041EF3E |.>LEA ESI,DWORD PTR SS:[ESP+2C]//esi中放有錯誤的註冊碼,已經去掉“-”
0041EF42 |.>LEA EAX,DWORD PTR SS:[ESP+6C]//eax中放有正確的註冊碼,已經去掉“-”
0041EF46 |>>MOV DL,BYTE PTR DS:[EAX]//正確註冊碼第一位放到dl
0041EF48 |.>MOV BL,BYTE PTR DS:[ESI]//錯誤註冊碼第一位放到bl
0041EF4A |.>MOV CL,DL //正確註冊碼第一位放到cl
0041EF4C |.>CMP DL,BL //比較註冊碼的第一位
0041EF4E |.>JNZ SHORT SUPERCAP.0041EF7F //不對就去死
0041EF50 |.>TEST CL,CL //看cl是不是為空
0041EF52 |.>JE SHORT SUPERCAP.0041EF6A //cl為空,對比結束,否則繼續
0041EF54 |.>MOV DL,BYTE PTR DS:[EAX+1] //正確註冊碼的eax+1位放到
0041EF57 |.>MOV BL,BYTE PTR DS:[ESI+1] //錯誤註冊碼的esi+1位放到
0041EF5A |.>MOV CL,DL //dl的值放到cl
0041EF5C |.>CMP DL,BL //對比註冊碼,BL
0041EF5E |.>JNZ SHORT SUPERCAP.0041EF7F //不相等就去死
0041EF60 |.>ADD EAX,2 //eax加2
0041EF63 |.>ADD ESI,2 //esi加2
0041EF66 |.>TEST CL,CL //看cl是不是空
0041EF68 |.>JNZ SHORT SUPERCAP.0041EF46 //cl不為空就跳,否則對比結束
0041EF6A |>>XOR EAX,EAX
0041EF6C |.>XOR ECX,ECX
0041EF6E |.>TEST EAX,EAX
0041EF70 |.>SETE CL
0041EF73 |.>POP EDI
0041EF74 |.>POP ESI
0041EF75 |.>MOV EAX,ECX
0041EF77 |.>POP EBX
0041EF78 |.>ADD ESP,80
0041EF7E |.>RETN
只要註冊碼的話,到這裡就達到目的了,不過我還想看看它的演算法,進入
0041EF36 |.>CALL SUPERCAP.0041ED50這個call,
來到這裡:
0041ED50 /$>SUB ESP,28
0041ED53 |.>XOR EAX,EAX
0041ED55 |.>XOR ECX,ECX
0041ED57 |.>MOV DWORD PTR SS:[ESP+14],EAX
0041ED5B |.>MOV DWORD PTR SS:[ESP],ECX
0041ED5F |.>MOV DWORD PTR SS:[ESP+18],EAX
0041ED63 |.>MOV DWORD PTR SS:[ESP+4],ECX
0041ED67 |.>MOV DWORD PTR SS:[ESP+1C],EAX
0041ED6B |.>MOV DWORD PTR SS:[ESP+8],ECX
0041ED6F |.>MOV DWORD PTR SS:[ESP+20],EAX
0041ED73 |.>MOV DWORD PTR SS:[ESP+C],ECX
0041ED77 |.>MOV BYTE PTR SS:[ESP+24],AL
0041ED7B |.>MOV EAX,DWORD PTR SS:[ESP+30]
0041ED7F |.>PUSH ESI
0041ED80 |.>PUSH EDI
0041ED81 |.>TEST EAX,EAX
0041ED83 |.>MOV BYTE PTR SS:[ESP+18],CL
0041ED87 |.>LEA EDX,DWORD PTR SS:[ESP+8]
0041ED8B |.>JE SHORT SUPERCAP.0041ED9D
0041ED8D |.>MOV EAX,DWORD PTR SS:[ESP+34]
0041ED91 |.>PUSH EDX
0041ED92 |.>PUSH EAX
0041ED93 |.>CALL SUPERCAP.0041EC20
0041ED98 |.>ADD ESP,8
0041ED9B |.>JMP SHORT SUPERCAP.0041EDBE
0041ED9D |>>MOV EDI,DWORD PTR SS:[ESP+34]
0041EDA1 |.>OR ECX,FFFFFFFF
0041EDA4 |.>XOR EAX,EAX
0041EDA6 |.>REPNE SCAS BYTE PTR ES:[EDI]
0041EDA8 |.>NOT ECX
0041EDAA |.>SUB EDI,ECX
0041EDAC |.>MOV EAX,ECX
0041EDAE |.>MOV ESI,EDI
0041EDB0 |.>MOV EDI,EDX
0041EDB2 |.>SHR ECX,2
0041EDB5 |.>REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
0041EDB7 |.>MOV ECX,EAX
0041EDB9 |.>AND ECX,3
0041EDBC |.>REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0041EDBE |>>MOV EAX,DWORD PTR SS:[ESP+44] //eax中存放這“SC30”
0041EDC2 |.>LEA ECX,DWORD PTR SS:[ESP+1C]
0041EDC6 |.>LEA EDX,DWORD PTR SS:[ESP+8] //edx中存放著去掉“-”的機器碼0041EDCA
|.>PUSH ECX
0041EDCB |.>PUSH EDX
0041EDCC |.>PUSH EAX
0041EDCD |.>CALL SUPERCAP.0041EAE0 //此call就是計算註冊碼的演算法call了
0041EDD2 |.>MOV EAX,DWORD PTR SS:[ESP+4C]
0041EDD6 |.>ADD ESP,C
0041EDD9 |.>TEST EAX,EAX
0041EDDB |.>JE SHORT SUPERCAP.0041EDFA
0041EDDD |.>MOV ECX,DWORD PTR SS:[ESP+3C]
0041EDE1 |.>LEA EDX,DWORD PTR SS:[ESP+1C]
0041EDE5 |.>PUSH ECX
0041EDE6 |.>PUSH EDX
0041EDE7 |.>CALL SUPERCAP.0041EBF0
0041EDEC |.>ADD ESP,8
0041EDEF |.>MOV EAX,1
0041EDF4 |.>POP EDI
0041EDF5 |.>POP ESI
0041EDF6 |.>ADD ESP,28
0041EDF9 |.>RETN
好,快要到核心了,繼續,進入到0041EDCD |.>CALL SUPERCAP.0041EAE0這個call,如下:
0041EAE0 /$>SUB ESP,84
0041EAE6 |.>PUSH EBP
0041EAE7 |.>PUSH ESI
0041EAE8 |.>MOV ESI,DWORD PTR SS:[ESP+90]//SS:[ESP+90]存放著“SC30”
0041EAEF |.>TEST ESI,ESI
0041EAF1 |.>JE SUPERCAP.0041EBE5
0041EAF7 |.>MOV EBP,DWORD PTR SS:[ESP+94]//SS:[ESP+94]存放著機器碼
0041EAFE |.>TEST EBP,EBP
0041EB00 |.>JE SUPERCAP.0041EBE5
0041EB06 |.>MOV EAX,DWORD PTR SS:[ESP+98]//SS:[ESP+98]存放著什麼啊,不知道,全是00
0041EB0D |.>TEST EAX,EAX
0041EB0F |.>JE SUPERCAP.0041EBE5
0041EB15 |.>PUSH EBX
0041EB16 |.>PUSH EDI
0041EB17 |.>MOV EAX,2
0041EB1C |.>LEA EDX,DWORD PTR SS:[ESP+54]
0041EB20 |.>MOV ECX,F24
0041EB25 |>>LEA EDI,DWORD PTR DS:[EAX+2]
0041EB28 |.>ADD EDX,4
0041EB2B |.>IMUL EDI,EAX
0041EB2E |.>ADD EDI,ECX
0041EB30 |.>ADD ECX,E4
0041EB36 |.>INC EAX
0041EB37 |.>MOV DWORD PTR DS:[EDX-4],EDI
0041EB3A |.>LEA EDI,DWORD PTR DS:[EAX-2]
0041EB3D |.>CMP EDI,10
0041EB40 |.>JB SHORT SUPERCAP.0041EB25//從0041eb25處到這裡的迴圈不知道是幹什麼的,誰跟我說說,謝謝!!
0041EB42 |.>XOR EBX,EBX
0041EB44 |.>XOR EDX,EDX
0041EB46 |.>MOV EDI,ESI
0041EB48 |.>SUB ESI,EBP
0041EB4A |.>LEA ECX,DWORD PTR SS:[ESP+14]
0041EB4E |.>LEA EAX,DWORD PTR SS:[EBP+1]
0041EB51 |.>MOV DWORD PTR SS:[ESP+10],ESI
0041EB55 |>>MOVSX ESI,BYTE PTR DS:[EAX-1] //此處向下開始將機器ID做變換,此時,DS:[EAX-1]中存放的是機器碼的第一個字元,將它送到ESI
0041EB59 |.>MOVSX EBP,BYTE PTR DS:[EDI]//DS:[EDI]中存放著“SC30”的第一個字元,將它送到EBP
0041EB5C |.>ADD ESI,EBP //“S”加上機器碼的第DS:[EAX-1]個字元,結果送到ESI
0041EB5E |.>ADD EDI,2 //EDI加2,EDI中存放著“SC30”
0041EB61 |.>MOVSX EBP,BYTE PTR DS:[EAX]//機器碼的第DS:[eax]字元送到EBP,第一遍經過此行是,是機器碼的第二個字元
0041EB64 |.>MOV DWORD PTR DS:[ECX],ESI//ESI的值送到DWORD PTR DS:[ECX]
0041EB66 |.>MOV ESI,DWORD PTR SS:[ESP+10]//將SS:[ESP+10]的值即8C送到ESI
0041EB6A |.>ADD ECX,4 //ECX加4
0041EB6D |.>MOVSX ESI,BYTE PTR DS:[ESI+EAX]//將EAX暫存器中的值加上ESI即加上8C,和送到ESI,執行完此命令後,ESI的值為43,即字元“C”
0041EB71 |.>ADD ESI,EBP //EBP的值即機器碼第DS:[eax]字元的16進位制數加上43,和存放到ESI
0041EB73 |.>ADD EAX,2 //EAX加2
0041EB76 |.>MOV DWORD PTR DS:[ECX+1C],ESI //ESI的值送到DS:[ECX+1C]
0041EB79 |.>MOV EBP,DWORD PTR DS:[ECX-4] //DS:[ECX+4]的值,即機器碼第DS:[EAX-1]個字元加“SC30”的第DS:[EDI]個字元的和,送到EBP
0041EB7C |.>ADD ESI,EDX //EDX的值加上ESI,和送到ESI
0041EB7E |.>ADD ESI,EBP //EPD的值加上ESI,和送到ESI
0041EB80 |.>MOV EBP,ESI //ESI的值送到EBP
0041EB82 |.>IMUL EBP,ESI //EBP*ESI,積放在EBP
0041EB85 |.>ADD EBX,EBP //EBX+EBP,和放在EBX
0041EB87 |.>INC EDX //EDX加1
0041EB88 |.>CMP EDX,8 //EDX與8作比較
0041EB8B |.>JB SHORT SUPERCAP.0041EB55 //EDX小於8就跳,從0041eb55處到此是將機器ID做變換的程式碼。總結一下它的演算法,設機器碼為J,暫且將它從高到低的每一位設為J0,J1,J2,J3,J4,J5,J6,J7,J8,J9,Ja,Jb,Jc,Jd,Je,Jf,將他們作如下計算:
((J1+C)+(J0+S))^2+((J3+0+1)+(J2+3))^2+((J5+2)+J4)^2+((J7+3)+J6)^2+((J9+4)+J8)^2
+((Jb+5)+Ja)^2+((Jd+6)+Jc)^2+((Jf+7)+Je)^2
最後的結果存放到EBX,後面會用到!!
0041EB8D |.>MOV EDI,DWORD PTR SS:[ESP+A0]
0041EB94 |.>MOV ECX,1 //用1初始化ECX
0041EB99 |.>XOR ESI,ESI //ESI清零
0041EB9B |>>MOV EAX,ECX //ECX的值送到EAX,這裡向下開始計算正確註冊碼
0041EB9D |.>MOV EBP,DWORD PTR SS:[ESP+ESI+14]//SS:[ESP+ESI+14]的值送到EBP,此處SS:[ESP+ESI+14]裡放的是什麼東東,誰能告訴我???
0041EBA1 |.>IMUL EAX,ECX //EAX*ECX,實際上就是求ECX的平方,積送到EAX
0041EBA4 |.>ADD EAX,EBP //EAX加EBP,和送到EAX
0041EBA6 |.>MOV EBP,DWORD PTR SS:[ESP+ESI+54]//SS:[ESP+ESI+54]的值送到EBP,此處SS:[ESP+ESI+54]裡放的是什麼東東,誰能告訴我???
0041EBAA |.>IMUL EAX,EBX //EAX*EBX,此處的EBX就是上面根據機器碼計算出來的數
0041EBAD |.>AND EAX,FF //EAX加FF,實際上就是保留EAX的低8位,其它位清零
0041EBB2 |.>XOR EDX,EDX //EDX清零
0041EBB4 |.>ADD EAX,EBP //EAX加EBP,和送到EAX
0041EBB6 |.>MOV EBP,1A //將1A送到EBP
0041EBBB |.>DIV EBP //EAX整除EBP,餘數送到EDX
0041EBBD |.>ADD ESI,4 //ESI加4
0041EBC0 |.>MOV AL,DL //將DL的值送到AL,實際上就是將餘數送到EAX
0041EBC2 |.>MOV DWORD PTR SS:[ESP+ESI+10],EDX//EDX的值送到
SS:[ESP+ESI+10]
0041EBC6 |.>ADD AL,41 //AL加41,這就是我們的註冊碼
0041EBC8 |.>MOV BYTE PTR DS:[EDI+ECX-1],AL//AL的值送到DS:[EDI+ECU-1]
0041EBCC |.>INC ECX //ECX加1
0041EBCD |.>LEA EDX,DWORD PTR DS:[ECX-1]//DS:[ECX-1]的值送到EDX
0041EBD0 |.>CMP EDX,10 //EDX與10作比較
0041EBD3 |.>JB SHORT SUPERCAP.0041EB9B //EDX小於16就繼續迴圈,從0041eb9b到此處是根據上面換後的機器ID計算正確註冊碼的程式碼。
上面這段程式碼迴圈16次後,就完全計算出了正確的註冊碼,註冊碼放在EDI中,由於有兩個東東不知到是什麼東西,所以呢,演算法就不好總結了,相信大家一看就明白了,很簡單的演算法。不知哪位大哥能告訴我那兩個東西是什麼。
講了這麼多廢話,終於將它的註冊演算法說完了,還請大家指出其中的錯誤,讓小弟我更上一層樓,在此謝謝了!!
最後還要說一點廢話:
如果你還想註冊一遍的話,請用ultraedit開啟軟體目錄下的scconfig30.cfg這個檔案,在偏移量為00000190h附近,存放著你的註冊碼,將它全部改為0就又可以註冊了,如果你嫌太麻煩,乾脆就將這個檔案刪了,不過這樣你的個性設定也沒有了!
唉,破這個軟體只費了10分鐘還不到,寫它的破解過程卻花了我一下午的時間,累死我了,希望大家喜歡我寫的文章。 :)
Cracker:Turkey/滅害靈
2001.12.20@20:37
歡迎轉載,請保持其完整性!
相關文章
- 破解過程-----請多多指教 (2千字)2000-12-31
- 超屏捕 v3.30 破解^程 (16千字)2002-01-20
- 超屏捕 v3.41 破解^程~的有cy~ (19千字)2002-02-18
- 用ollydbg快速破解UniView
(2千字)2015-11-15View
- 用Ollydbg破解SWFBrowser 2.93 (7千字)2002-01-11
- 用OllyDBg動態破解入門 (3千字)2001-11-13
- 對VCDCUT 4.03的分析破解過程 (18千字)2001-08-08
- 《伊妹捕神中文版》 破解過程詳解 (6千字)2001-04-29
- PassWD2000破解過程~~~轉貼~~~~~~ (11千字)2001-10-10
- 我終於破解了魔裝網神了,破解過程!!,不過是用2.70破解的。 (1千字)2001-10-15
- 用Ollydbg破解全功能數字時鐘(想學用Ollydbg破VB的必看!) (1千字)2001-11-03
- 應妖二妖二的要求,貼上SHOWURL的破解過程。 (11千字)2001-05-05
- [翻譯]用dede破解-另一篇~請大家指正~~ (5千字)2015-11-15
- 申請加入BCG破文第一篇:滑鼠增強工具MouseStar 2.1破解過程。請老大多多指教。 (7千字)2001-07-27
- webeasymail的簡單破解過程 (2千字)2001-08-04WebAI
- OICQ HACK 1.0 破解過程 (9千字)2001-04-23
- Nullz CrackMe 1.1破解過程 (13千字)2001-09-18Null
- WebTimeSync 5.2.0 破解過程 (14千字)2001-10-05Web
- 鬥地主v2.4密碼的最簡單破解――OllyDbg破解法 (1千字)2001-08-02密碼
- 超級個人軟體 V2.5 破解過程! (3千字)2002-03-04
- 具體的破解過程來也! (10千字)2001-04-21
- 貼個程式的smc破解。 (1千字)2001-09-24
- dfx V4.0破解過程 (10千字)2000-09-24
- 電腦字型秀破解過程 (1千字)2001-03-18
- Kryptel 3.8 暴力破解過程 (18千字)2001-09-18
- PUZZLER1.20破解過程 (4千字)2002-01-26
- SuperCleaner2.30破解過程 (11千字)2002-02-04
- 一篇初級破解過程,很久沒有動手了,大家不要笑我鈍啊! (10千字)2003-01-11
- PowerArchiver破解過程。2015-11-15Hive
- 破解<<破解堅盾磁碟加密系統 V4.0>>的全過程 (10千字)2001-10-23加密
- Password Keeper v6.3破解過程 (8千字)2002-04-12
- post NOW! 破解過程!有意思。 (1千字)2000-12-30
- 有聲有色3.33破解過程 (4千字)2001-02-09
- 專業掃雷 1.2破解過程 (4千字)2001-02-17
- fulldisk A32 破解過程!(簡單) (1千字)2001-03-20
- 密碼大師4.0破解過程 (3千字)2001-05-06密碼
- EmEditor v3.16破解過程 (9千字)2001-07-22
- 木馬克星5.33.60破解過程
(9千字)2002-03-28