ollydbg破解教學(xué)之萬(wàn)能斷點(diǎn)篇
發(fā)布時(shí)間:2012-07-31 14:11:26 作者:佚名
我要評(píng)論
終于有一點(diǎn)時(shí)間總結(jié)一下OD破解的經(jīng)驗(yàn),有許多大俠們都認(rèn)為OD不能下萬(wàn)能斷點(diǎn),可是有些軟件的破解需要用到萬(wàn)能斷點(diǎn),以前一直沒(méi)有這方面的資料
有的只是OD不能下萬(wàn)能斷點(diǎn)的斷言,一時(shí)心恢之極,可是我原來(lái)用TRW和SICE用的挺好,誰(shuí)知系統(tǒng)又跟我鬧矛盾,一用TRW和SICE就死機(jī),沒(méi)辦法我現(xiàn)在只能用OD,我寫的一些破解文章都是用OD破的,反復(fù)試驗(yàn),我終于發(fā)
現(xiàn)OD也能下萬(wàn)能斷點(diǎn),在我以前寫的一些文章中好象有一篇簡(jiǎn)單提到過(guò),但沒(méi)有說(shuō)的很詳細(xì),這次靜下心,想寫一點(diǎn)東西,送給我心愛(ài)的組織DFCG吧,我的破解是從DFCG組織起步的,很感謝DFCG的高手們的幫助,在此說(shuō)聲謝謝!為了更明確,這次破解所使用的調(diào)試器OD是從看雪論壇臨時(shí)下載的OD1.09的漢化版,沒(méi)有使用我自己手頭經(jīng)過(guò)改造的OD,在此也感謝看雪論壇,這里真的有很多高手,在這個(gè)論壇我也學(xué)到了很多.這次破解的對(duì)象是超級(jí)XX王,為保護(hù)國(guó)產(chǎn)軟件我隱去了軟件相關(guān)信息,我不想給自己帶來(lái)麻煩,現(xiàn)在工作很忙,能少一點(diǎn)麻煩就盡量少一點(diǎn)吧.
破解作者
yzez[DFCG]
破解工具
ollydbg漢化版,腳本之家下載 http://m.fzitv.net/softs/58565.html
破解目的
本不為破解而破解,只因?yàn)榧夹g(shù)而破解
破解環(huán)境
WINDOWS XP,這個(gè)我已經(jīng)在98和XP下各做了兩次,貼圖和我這篇文章是在XP系統(tǒng)下完成的.
破解過(guò)程
1.檢查了一下,該程序無(wú)殼,C++編譯,用W32DSM反匯編一堆亂碼,我倒!那就動(dòng)態(tài)調(diào)試吧!用ollydbg1.09載入程序,這次我將教
你們?nèi)绾斡肙D下萬(wàn)能斷點(diǎn),過(guò)程我盡可能詳細(xì)一點(diǎn),下面請(qǐng)看.載入程序選OD菜單欄上的插件-----命令行(快捷鍵是ALT+F1),
在彈出的窗口中輸入萬(wàn)能斷點(diǎn)命令:bpx hmemcpy,按ENTER鍵,結(jié)果又出現(xiàn)一個(gè)對(duì)話框:
Intermodular calls
00401164 CALL DWORD PTR DS:[<&USER32.GetWindowRect>] USER32.GetWindowRect
0040118F CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect
00401279 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect
004013E1 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect
0040190A CALL DWORD PTR DS:[<&KERNEL32.GetThreadLocale>] kernel32.GetThreadLocale
0040191C CALL DWORD PTR DS:[<&KERNEL32.GetLocaleInfoA>] kernel32.GetLocaleInfoA
還有很多,我就省略了,在這個(gè)框里右鍵單擊,出現(xiàn)一個(gè)對(duì)話框,選中在每個(gè)命令中設(shè)置斷點(diǎn)(熱鍵是S),單擊,你看每一行
都變成了紅色吧,這表示全部設(shè)下斷點(diǎn)了,后面的過(guò)程很煩燥,你要一邊按F9,邊按F2把一些無(wú)用的斷點(diǎn)去掉,有一點(diǎn)耐心吧,
當(dāng)然也可以不這樣做,但遇到斷點(diǎn)跳不過(guò)的時(shí)候,你就得按F2把這個(gè)斷點(diǎn)去掉.
感覺(jué)在這一點(diǎn)上OD比不上TRW和SICE,到出現(xiàn)注冊(cè)信息框后,你要輸入注冊(cè)信息,然后按確定,程序被斷下來(lái),我的序列號(hào)是:
GK342QZ0C6RE03L,我輸入試驗(yàn)碼:123456789098765.程序中斷在下面:
00471F71 CALL DWORD PTR DS:[<&USER32.GetWindowTex>****按確定后回到OD程序中斷在此,按F8走,在此還沒(méi)有到關(guān)鍵處!
*****************************************************注意這里會(huì)循環(huán)兩次,分別處理序列號(hào)和試驗(yàn)碼,按F8走
00471F77 LEA ECX,DWORD PTR DS:[EAX+1]
00471F7A PUSH ECX
00471F7B MOV ECX,DWORD PTR SS:[EBP+10]
00471F7E PUSH EAX
00471F7F CALL SuperPIM.0043E15D
00471F84 PUSH EAX
00471F85 PUSH ESI
00471F86 CALL DWORD PTR DS:[<&USER32.GetWindowTex>
00471F8C MOV ECX,DWORD PTR SS:[EBP+10]
00471F8F PUSH -1
00471F91 CALL SuperPIM.00401D6A
00471F96 JMP SHORT SuperPIM.00471FA3
00471F98 MOV EAX,DWORD PTR SS:[EBP+10]
00471F9B PUSH DWORD PTR DS:[EAX]
00471F9D PUSH ESI
00471F9E CALL SuperPIM.00470B61
00471FA4 POP ESI
00471FA5 POP EBP
00471FA6 RETN 0C*************************************程序第二次循環(huán)后最后會(huì)返回到0040FE99下面看代碼:
----------------------------------------------------------------------------------------------------------
0040FE99 LEA EAX,DWORD PTR SS:[EBP-14]****第二次循環(huán)后會(huì)返回到這里,注意這就是我們要找的關(guān)鍵地方,按F8往下!
0040FE9C PUSH EAX
0040FE9D CALL SuperPIM.00433D92***********這就是關(guān)鍵CALL,按F7追進(jìn),一定要進(jìn),因?yàn)樗惴ň驮谶@里面!
0040FEA2 POP ECX
0040FEA3 AND DWORD PTR SS:[EBP-4],0
0040FEA7 LEA ESI,DWORD PTR DS:[EDI+74]
0040FEAA MOV EAX,DWORD PTR DS:[ESI]******試驗(yàn)碼入EAX
0040FEAC CMP DWORD PTR DS:[EAX-C],0******比較試驗(yàn)碼輸入了嗎?
0040FEB0 JE SHORT SuperPIM.0040FF2F******沒(méi)有輸入就跳走,一跳就失敗!
0040FEB2 PUSH 28
0040FEB4 LEA EAX,DWORD PTR SS:[EBP-18]
0040FEB7 PUSH ESI
0040FEB8 PUSH EAX
0040FEB9 CALL SuperPIM.0042CEC8**********此CALL對(duì)輸入的注冊(cè)碼進(jìn)行處理,得到一個(gè)40位的長(zhǎng)字符串,有興趣自己跟,
******************************************我已是頭暈的很,不想跟進(jìn)!
0040FEBE LEA ECX,DWORD PTR SS:[EBP-14]
0040FEC1 PUSH ECX
0040FEC2 PUSH EAX
0040FEC3 CALL SuperPIM.0040F9B7**********此CALL對(duì)序列號(hào)處理,也是得到一個(gè)40位的長(zhǎng)字符串
0040FEC8 MOV ECX,DWORD PTR SS:[EBP-18]
0040FECB ADD ESP,14
0040FECE ADD ECX,-10
0040FED1 MOV BYTE PTR SS:[EBP-D],AL
0040FED4 CALL SuperPIM.00401B5D**********此CALL進(jìn)行比較,注冊(cè)碼不對(duì),值為0
0040FED9 CMP BYTE PTR SS:[EBP-D],0*******比較是0嗎?
0040FEDD JE SHORT SuperPIM.0040FF2F******相等就跳,跳就失敗,所以一定不能跳!
0040FEDF PUSH 0**************************不跳往下你就成功了!下面代碼省略!
...............................................................省略若干代碼!.........................
=============================================================================================================
************************************關(guān)鍵CALL的代碼!*******************************************************
00433D92 MOV EAX, SuperPIM.0049844E****追進(jìn)關(guān)鍵CALL后我們來(lái)到這里!
00433D97 CALL SuperPIM.00450900
00433D9C PUSH ECX
00433D9D PUSH ECX
00433D9E AND [LOCAL.5], 0
00433DA2 LEA EAX, [LOCAL.5]
00433DA5 PUSH EAX
00433DA6 CALL SuperPIM.00433CA9********此CALL根據(jù)電腦硬件信息得到你的序列號(hào),有興趣跟吧!我是沒(méi)有興趣!
00433DAB AND [LOCAL.1], 0
00433DAF PUSH 14
00433DB1 LEA EAX, [LOCAL.5]
00433DB4 PUSH EAX
00433DB5 LEA EAX, [LOCAL.4]
00433DB8 PUSH EAX
00433DB9 CALL SuperPIM.0042CEC8*******算法CALL(1),按F7跟進(jìn)!
00433DBE PUSH 28
00433DC0 LEA EAX, [LOCAL.4]
00433DC3 PUSH EAX
00433DC4 PUSH [ARG.1]
00433DC7 MOV BYTE PTR SS:[EBP-4], 1
00433DCB CALL SuperPIM.0042CEC8
00433DD0 MOV ECX, [LOCAL.4]
00433DD3 ADD ESP, 1C
00433DD6 ADD ECX, -10
*****************************省略N行代碼!********************************************************
0043454B RETN
===========================================================================================================
***********************************算法CALL!*********************************************************
0042CEC8 MOV EAX, SuperPIM.00497B52********追進(jìn)算法CALL我們?cè)谶@里!
0042CECD CALL SuperPIM.00450900
0042CED2 SUB ESP, 14
0042CED5 PUSH EBX
0042CED6 PUSH ESI
0042CED7 XOR EBX, EBX
0042CED9 PUSH EDI
0042CEDA MOV [LOCAL.8], EBX
0042CEDD CALL SuperPIM.004639B5
0042CEE2 MOV EDX, DWORD PTR DS:[EAX]
0042CEE4 MOV ECX, EAX
0042CEE6 CALL DWORD PTR DS:[EDX+C]
0042CEE9 LEA EDI, DWORD PTR DS:[EAX+10]
0042CEEC MOV [LOCAL.4], EDI
0042CEEF MOV EAX, [ARG.2]
0042CEF2 MOV EAX, DWORD PTR DS:[EAX]*******序列號(hào):GK342QZ0C6RE03L移入EAX
0042CEF4 MOV ESI, DWORD PTR DS:[EAX-C]*****序列號(hào)的位數(shù)15(十六進(jìn)制值是F)送入ESI
0042CEF7 CMP ESI, EBX**********************比較ESI和EBX,ESI的值是F即序列號(hào)位數(shù),EBX的初始值是0
0042CEF9 MOV [LOCAL.1], EBX
0042CEFC MOV [LOCAL.8], ESI
0042CEFF JE SuperPIM.0042CFB2*************相等就跳,這里當(dāng)然不相等,所以就不會(huì)跳!
0042CF05 MOV EAX, [ARG.3]******************常數(shù)14(十進(jìn)制值是20)送入EAX
0042CF08 CMP EAX, ESI**********************比較EAX和ESI,即14和F比較!
0042CF0A MOV [LOCAL.6], EAX
0042CF0D JG SHORT SuperPIM.0042CF12*******大于就跳!
0042CF0F MOV [LOCAL.6], ESI
0042CF12 CMP [LOCAL.6], EBX****************跳到這里!比較14和0
0042CF15 JLE SuperPIM.0042CFB2*************小于就跳,這里當(dāng)然不會(huì)小!所以不跳!
0042CF1B MOV EAX, EBX**********************0移入EAX
0042CF1D CDQ***********************************EDX清0,準(zhǔn)備計(jì)算!
0042CF1E IDIV ESI***************************除,EAX/ESI ,EAX的值是0,ESI的值存放序列號(hào)的位數(shù)F
0042CF20 MOV EAX, [ARG.2]******************賦EAX地址值
0042CF23 MOV EAX, DWORD PTR DS:[EAX]*******序列號(hào):GK342QZ0C6RE03L移入EAX
0042CF25 PUSH EBX***************************EBX入棧
0042CF26 MOV AL, BYTE PTR DS:[EDX+EAX]*****序列號(hào)的第一位G(ASCII碼值47)入AL
0042CF29 MOV BYTE PTR SS:[EBP-1C], AL******保存值47
0042CF2C PUSH [LOCAL.7]
0042CF2F CALL SuperPIM.0042CD8E*************算法CALL(2),按F7跟進(jìn)!代碼直接在下面給出
==============================================================================================================
***************************算法CALL(2)*****************************************************
0042CD8E PUSH EBP
0042CD8F MOV EBP, ESP
0042CD91 PUSH ECX*************************G的ASCII碼值47入ECX
0042CD92 MOVZX EAX, BYTE PTR SS:[EBP+8]****擴(kuò)展成00000047
0042CD96 MOV ECX, [ARG.2]****************賦ECX的初始值為0
0042CD99 MOV [LOCAL.1], EAX
0042CD9C MOV EAX, ECX********************ECX的值移入EAX
0042CD9E IMUL EAX, ECX********************EAX=EAX*ECX=0*0
0042CDA1 LEA EAX, DWORD PTR DS:[EAX+EAX*2+7]**EAX+EAX*2+7的值7給EAX
0042CDA5 IMUL EAX, ECX********************EAX=EAX*ECX=7*0
0042CDA8 ADD EAX, 0D*********************EAX=EAX+0D=D
0042CDAB IMUL EAX, ECX********************EAX=EAX*ECX=D*0=0
0042CDAE PUSH ESI*************************序列號(hào)位數(shù)F入棧!
0042CDAF LEA ESI, DWORD PTR DS:[ECX+5]
0042CDB2 PUSH ESI
0042CDB3 MOV [ARG.1], EAX
0042CDB6 LEA EAX, [ARG.1]
0042CDB9 PUSH 4
0042CDBB PUSH EAX
0042CDBC CALL SuperPIM.0042CD2E***********這個(gè)CALL也在計(jì)算,我實(shí)在不想跟進(jìn)!
0042CDC1 PUSH ESI
0042CDC2 LEA EAX, [LOCAL.1]
0042CDC5 PUSH 4
0042CDC7 PUSH EAX
0042CDC8 CALL SuperPIM.0042CD5E**********這個(gè)CALL也是計(jì)算CALL,煩!不跟了!
0042CDCD MOV EAX, [ARG.1]
0042CDD0 ADD ESP, 18
0042CDD3 XOR EAX, [LOCAL.1]*************這里賦EAX的值38000002
0042CDD6 POP ESI
0042CDD7 LEAVE
0042CDD8 RETN
=========================================================================算法CALL(2)結(jié)束==================
0042CF34 POP ECX
0042CF35 POP ECX
0042CF36 PUSH 2B***************************常數(shù)2B入棧!
0042CF38 XOR EDX, EDX
0042CF3A POP ECX**************************把常數(shù)2B賦給ECX
0042CF3B DIV ECX**************************除,EAX/ECX=38000002/2B=014D6535,余數(shù)1B入EDX
0042CF3D MOV ECX, EDX*********************結(jié)果1B入ECX
0042CF3F ADD CL, 30***********************CL=CL+30=1B+30=4B(對(duì)應(yīng)的字符串是K)
0042CF42 CMP CL, 39***********************比較是不是數(shù)字9
0042CF45 MOV BYTE PTR SS:[EBP-14], CL*****保存字符串K
0042CF48 JLE SHORT SuperPIM.0042CF55******小于就跳走!
0042CF4A CMP CL, 41***********************比較是不是A
0042CF4D JGE SHORT SuperPIM.0042CF55******大于就跳走
0042CF4F ADD CL, 0F6
0042CF52 MOV BYTE PTR SS:[EBP-14], CL
0042CF55 CMP EBX, [ARG.3]*****************跳到這里!比較0和14
0042CF58 JGE SHORT SuperPIM.0042CF67******大于等于就跳走!
0042CF5A PUSH [LOCAL.5]
0042CF5D LEA ECX, [LOCAL.4]
0042CF60 CALL SuperPIM.00417EAF
0042CF65 JMP SHORT SuperPIM.0042CFA5******無(wú)條件跳
0042CF67 MOV EAX, EBX
0042CF69 CDQ
0042CF6A IDIV [ARG.3]
0042CF6D MOVSX ECX, CL
0042CF70 PUSH 2B
0042CF72 MOV ESI, EDX
0042CF74 MOVSX EAX, BYTE PTR DS:[ESI+EDI]
0042CF78 LEA EAX, DWORD PTR DS:[EAX+ECX-60]
0042CF7C CDQ
0042CF7D POP ECX
0042CF7E IDIV ECX
0042CF80 ADD DL, 30
0042CF83 CMP DL, 39
0042CF86 MOV BYTE PTR SS:[EBP-14], DL
0042CF89 JLE SHORT SuperPIM.0042CF96
0042CF8B CMP DL, 41
0042CF8E JGE SHORT SuperPIM.0042CF96
0042CF90 ADD DL, 0F6
0042CF93 MOV BYTE PTR SS:[EBP-14], DL
0042CF96 PUSH [LOCAL.5]
0042CF99 LEA ECX, [LOCAL.4]
0042CF9C PUSH ESI
0042CF9D CALL SuperPIM.0042CE4B
0042CFA2 MOV ESI, [LOCAL.8]
0042CFA5 MOV EDI, [LOCAL.4]***************上面跳到這里!
0042CFA8 INC EBX*************************EBX加1
0042CFA9 CMP EBX, [LOCAL.6]**************比較1和14
0042CFAC JL SuperPIM.0042CF1B***********小于就跳,循環(huán),序列號(hào)只有15位,這里循環(huán)20次,取完后又從第一位取出!
************************************循環(huán)結(jié)束后得到的值是:K3L2LPBDW1F2H4B8S0UY這就是我們要的注冊(cè)碼!
0042CFB2 MOV ECX, [ARG.1]
0042CFB5 LEA EAX, [LOCAL.4]
0042CFB8 PUSH EAX
0042CFB9 CALL SuperPIM.00401F36
0042CFBE LEA ECX, DWORD PTR DS:[EDI-10]
0042CFC1 CALL SuperPIM.00401B5D
0042CFC6 MOV ECX, [LOCAL.3]
0042CFC9 MOV EAX, [ARG.1]
0042CFCC POP EDI
0042CFCD POP ESI
0042CFCE POP EBX
0042CFCF MOV DWORD PTR FS:[0], ECX
0042CFD6 LEAVE
0042CFD7 RETN
寫這篇文章的目的是想說(shuō)明如何在OD下萬(wàn)能斷點(diǎn),算法過(guò)程太煩瑣,就不想多跟了!希望能對(duì)大家有點(diǎn)啟發(fā),如果覺(jué)得這篇
破文還行幫我頂一下吧!也是希望有更多的人能看到,對(duì)更多的人有益,我也是一只菜鳥,請(qǐng)大家多多指點(diǎn)!
現(xiàn)OD也能下萬(wàn)能斷點(diǎn),在我以前寫的一些文章中好象有一篇簡(jiǎn)單提到過(guò),但沒(méi)有說(shuō)的很詳細(xì),這次靜下心,想寫一點(diǎn)東西,送給我心愛(ài)的組織DFCG吧,我的破解是從DFCG組織起步的,很感謝DFCG的高手們的幫助,在此說(shuō)聲謝謝!為了更明確,這次破解所使用的調(diào)試器OD是從看雪論壇臨時(shí)下載的OD1.09的漢化版,沒(méi)有使用我自己手頭經(jīng)過(guò)改造的OD,在此也感謝看雪論壇,這里真的有很多高手,在這個(gè)論壇我也學(xué)到了很多.這次破解的對(duì)象是超級(jí)XX王,為保護(hù)國(guó)產(chǎn)軟件我隱去了軟件相關(guān)信息,我不想給自己帶來(lái)麻煩,現(xiàn)在工作很忙,能少一點(diǎn)麻煩就盡量少一點(diǎn)吧.
破解作者
yzez[DFCG]
破解工具
ollydbg漢化版,腳本之家下載 http://m.fzitv.net/softs/58565.html
破解目的
本不為破解而破解,只因?yàn)榧夹g(shù)而破解
破解環(huán)境
WINDOWS XP,這個(gè)我已經(jīng)在98和XP下各做了兩次,貼圖和我這篇文章是在XP系統(tǒng)下完成的.
破解過(guò)程
1.檢查了一下,該程序無(wú)殼,C++編譯,用W32DSM反匯編一堆亂碼,我倒!那就動(dòng)態(tài)調(diào)試吧!用ollydbg1.09載入程序,這次我將教
你們?nèi)绾斡肙D下萬(wàn)能斷點(diǎn),過(guò)程我盡可能詳細(xì)一點(diǎn),下面請(qǐng)看.載入程序選OD菜單欄上的插件-----命令行(快捷鍵是ALT+F1),
在彈出的窗口中輸入萬(wàn)能斷點(diǎn)命令:bpx hmemcpy,按ENTER鍵,結(jié)果又出現(xiàn)一個(gè)對(duì)話框:
Intermodular calls
00401164 CALL DWORD PTR DS:[<&USER32.GetWindowRect>] USER32.GetWindowRect
0040118F CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect
00401279 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect
004013E1 CALL DWORD PTR DS:[<&USER32.GetClientRect>] USER32.GetClientRect
0040190A CALL DWORD PTR DS:[<&KERNEL32.GetThreadLocale>] kernel32.GetThreadLocale
0040191C CALL DWORD PTR DS:[<&KERNEL32.GetLocaleInfoA>] kernel32.GetLocaleInfoA
還有很多,我就省略了,在這個(gè)框里右鍵單擊,出現(xiàn)一個(gè)對(duì)話框,選中在每個(gè)命令中設(shè)置斷點(diǎn)(熱鍵是S),單擊,你看每一行
都變成了紅色吧,這表示全部設(shè)下斷點(diǎn)了,后面的過(guò)程很煩燥,你要一邊按F9,邊按F2把一些無(wú)用的斷點(diǎn)去掉,有一點(diǎn)耐心吧,
當(dāng)然也可以不這樣做,但遇到斷點(diǎn)跳不過(guò)的時(shí)候,你就得按F2把這個(gè)斷點(diǎn)去掉.
感覺(jué)在這一點(diǎn)上OD比不上TRW和SICE,到出現(xiàn)注冊(cè)信息框后,你要輸入注冊(cè)信息,然后按確定,程序被斷下來(lái),我的序列號(hào)是:
GK342QZ0C6RE03L,我輸入試驗(yàn)碼:123456789098765.程序中斷在下面:
00471F71 CALL DWORD PTR DS:[<&USER32.GetWindowTex>****按確定后回到OD程序中斷在此,按F8走,在此還沒(méi)有到關(guān)鍵處!
*****************************************************注意這里會(huì)循環(huán)兩次,分別處理序列號(hào)和試驗(yàn)碼,按F8走
00471F77 LEA ECX,DWORD PTR DS:[EAX+1]
00471F7A PUSH ECX
00471F7B MOV ECX,DWORD PTR SS:[EBP+10]
00471F7E PUSH EAX
00471F7F CALL SuperPIM.0043E15D
00471F84 PUSH EAX
00471F85 PUSH ESI
00471F86 CALL DWORD PTR DS:[<&USER32.GetWindowTex>
00471F8C MOV ECX,DWORD PTR SS:[EBP+10]
00471F8F PUSH -1
00471F91 CALL SuperPIM.00401D6A
00471F96 JMP SHORT SuperPIM.00471FA3
00471F98 MOV EAX,DWORD PTR SS:[EBP+10]
00471F9B PUSH DWORD PTR DS:[EAX]
00471F9D PUSH ESI
00471F9E CALL SuperPIM.00470B61
00471FA4 POP ESI
00471FA5 POP EBP
00471FA6 RETN 0C*************************************程序第二次循環(huán)后最后會(huì)返回到0040FE99下面看代碼:
----------------------------------------------------------------------------------------------------------
0040FE99 LEA EAX,DWORD PTR SS:[EBP-14]****第二次循環(huán)后會(huì)返回到這里,注意這就是我們要找的關(guān)鍵地方,按F8往下!
0040FE9C PUSH EAX
0040FE9D CALL SuperPIM.00433D92***********這就是關(guān)鍵CALL,按F7追進(jìn),一定要進(jìn),因?yàn)樗惴ň驮谶@里面!
0040FEA2 POP ECX
0040FEA3 AND DWORD PTR SS:[EBP-4],0
0040FEA7 LEA ESI,DWORD PTR DS:[EDI+74]
0040FEAA MOV EAX,DWORD PTR DS:[ESI]******試驗(yàn)碼入EAX
0040FEAC CMP DWORD PTR DS:[EAX-C],0******比較試驗(yàn)碼輸入了嗎?
0040FEB0 JE SHORT SuperPIM.0040FF2F******沒(méi)有輸入就跳走,一跳就失敗!
0040FEB2 PUSH 28
0040FEB4 LEA EAX,DWORD PTR SS:[EBP-18]
0040FEB7 PUSH ESI
0040FEB8 PUSH EAX
0040FEB9 CALL SuperPIM.0042CEC8**********此CALL對(duì)輸入的注冊(cè)碼進(jìn)行處理,得到一個(gè)40位的長(zhǎng)字符串,有興趣自己跟,
******************************************我已是頭暈的很,不想跟進(jìn)!
0040FEBE LEA ECX,DWORD PTR SS:[EBP-14]
0040FEC1 PUSH ECX
0040FEC2 PUSH EAX
0040FEC3 CALL SuperPIM.0040F9B7**********此CALL對(duì)序列號(hào)處理,也是得到一個(gè)40位的長(zhǎng)字符串
0040FEC8 MOV ECX,DWORD PTR SS:[EBP-18]
0040FECB ADD ESP,14
0040FECE ADD ECX,-10
0040FED1 MOV BYTE PTR SS:[EBP-D],AL
0040FED4 CALL SuperPIM.00401B5D**********此CALL進(jìn)行比較,注冊(cè)碼不對(duì),值為0
0040FED9 CMP BYTE PTR SS:[EBP-D],0*******比較是0嗎?
0040FEDD JE SHORT SuperPIM.0040FF2F******相等就跳,跳就失敗,所以一定不能跳!
0040FEDF PUSH 0**************************不跳往下你就成功了!下面代碼省略!
...............................................................省略若干代碼!.........................
=============================================================================================================
************************************關(guān)鍵CALL的代碼!*******************************************************
00433D92 MOV EAX, SuperPIM.0049844E****追進(jìn)關(guān)鍵CALL后我們來(lái)到這里!
00433D97 CALL SuperPIM.00450900
00433D9C PUSH ECX
00433D9D PUSH ECX
00433D9E AND [LOCAL.5], 0
00433DA2 LEA EAX, [LOCAL.5]
00433DA5 PUSH EAX
00433DA6 CALL SuperPIM.00433CA9********此CALL根據(jù)電腦硬件信息得到你的序列號(hào),有興趣跟吧!我是沒(méi)有興趣!
00433DAB AND [LOCAL.1], 0
00433DAF PUSH 14
00433DB1 LEA EAX, [LOCAL.5]
00433DB4 PUSH EAX
00433DB5 LEA EAX, [LOCAL.4]
00433DB8 PUSH EAX
00433DB9 CALL SuperPIM.0042CEC8*******算法CALL(1),按F7跟進(jìn)!
00433DBE PUSH 28
00433DC0 LEA EAX, [LOCAL.4]
00433DC3 PUSH EAX
00433DC4 PUSH [ARG.1]
00433DC7 MOV BYTE PTR SS:[EBP-4], 1
00433DCB CALL SuperPIM.0042CEC8
00433DD0 MOV ECX, [LOCAL.4]
00433DD3 ADD ESP, 1C
00433DD6 ADD ECX, -10
*****************************省略N行代碼!********************************************************
0043454B RETN
===========================================================================================================
***********************************算法CALL!*********************************************************
0042CEC8 MOV EAX, SuperPIM.00497B52********追進(jìn)算法CALL我們?cè)谶@里!
0042CECD CALL SuperPIM.00450900
0042CED2 SUB ESP, 14
0042CED5 PUSH EBX
0042CED6 PUSH ESI
0042CED7 XOR EBX, EBX
0042CED9 PUSH EDI
0042CEDA MOV [LOCAL.8], EBX
0042CEDD CALL SuperPIM.004639B5
0042CEE2 MOV EDX, DWORD PTR DS:[EAX]
0042CEE4 MOV ECX, EAX
0042CEE6 CALL DWORD PTR DS:[EDX+C]
0042CEE9 LEA EDI, DWORD PTR DS:[EAX+10]
0042CEEC MOV [LOCAL.4], EDI
0042CEEF MOV EAX, [ARG.2]
0042CEF2 MOV EAX, DWORD PTR DS:[EAX]*******序列號(hào):GK342QZ0C6RE03L移入EAX
0042CEF4 MOV ESI, DWORD PTR DS:[EAX-C]*****序列號(hào)的位數(shù)15(十六進(jìn)制值是F)送入ESI
0042CEF7 CMP ESI, EBX**********************比較ESI和EBX,ESI的值是F即序列號(hào)位數(shù),EBX的初始值是0
0042CEF9 MOV [LOCAL.1], EBX
0042CEFC MOV [LOCAL.8], ESI
0042CEFF JE SuperPIM.0042CFB2*************相等就跳,這里當(dāng)然不相等,所以就不會(huì)跳!
0042CF05 MOV EAX, [ARG.3]******************常數(shù)14(十進(jìn)制值是20)送入EAX
0042CF08 CMP EAX, ESI**********************比較EAX和ESI,即14和F比較!
0042CF0A MOV [LOCAL.6], EAX
0042CF0D JG SHORT SuperPIM.0042CF12*******大于就跳!
0042CF0F MOV [LOCAL.6], ESI
0042CF12 CMP [LOCAL.6], EBX****************跳到這里!比較14和0
0042CF15 JLE SuperPIM.0042CFB2*************小于就跳,這里當(dāng)然不會(huì)小!所以不跳!
0042CF1B MOV EAX, EBX**********************0移入EAX
0042CF1D CDQ***********************************EDX清0,準(zhǔn)備計(jì)算!
0042CF1E IDIV ESI***************************除,EAX/ESI ,EAX的值是0,ESI的值存放序列號(hào)的位數(shù)F
0042CF20 MOV EAX, [ARG.2]******************賦EAX地址值
0042CF23 MOV EAX, DWORD PTR DS:[EAX]*******序列號(hào):GK342QZ0C6RE03L移入EAX
0042CF25 PUSH EBX***************************EBX入棧
0042CF26 MOV AL, BYTE PTR DS:[EDX+EAX]*****序列號(hào)的第一位G(ASCII碼值47)入AL
0042CF29 MOV BYTE PTR SS:[EBP-1C], AL******保存值47
0042CF2C PUSH [LOCAL.7]
0042CF2F CALL SuperPIM.0042CD8E*************算法CALL(2),按F7跟進(jìn)!代碼直接在下面給出
==============================================================================================================
***************************算法CALL(2)*****************************************************
0042CD8E PUSH EBP
0042CD8F MOV EBP, ESP
0042CD91 PUSH ECX*************************G的ASCII碼值47入ECX
0042CD92 MOVZX EAX, BYTE PTR SS:[EBP+8]****擴(kuò)展成00000047
0042CD96 MOV ECX, [ARG.2]****************賦ECX的初始值為0
0042CD99 MOV [LOCAL.1], EAX
0042CD9C MOV EAX, ECX********************ECX的值移入EAX
0042CD9E IMUL EAX, ECX********************EAX=EAX*ECX=0*0
0042CDA1 LEA EAX, DWORD PTR DS:[EAX+EAX*2+7]**EAX+EAX*2+7的值7給EAX
0042CDA5 IMUL EAX, ECX********************EAX=EAX*ECX=7*0
0042CDA8 ADD EAX, 0D*********************EAX=EAX+0D=D
0042CDAB IMUL EAX, ECX********************EAX=EAX*ECX=D*0=0
0042CDAE PUSH ESI*************************序列號(hào)位數(shù)F入棧!
0042CDAF LEA ESI, DWORD PTR DS:[ECX+5]
0042CDB2 PUSH ESI
0042CDB3 MOV [ARG.1], EAX
0042CDB6 LEA EAX, [ARG.1]
0042CDB9 PUSH 4
0042CDBB PUSH EAX
0042CDBC CALL SuperPIM.0042CD2E***********這個(gè)CALL也在計(jì)算,我實(shí)在不想跟進(jìn)!
0042CDC1 PUSH ESI
0042CDC2 LEA EAX, [LOCAL.1]
0042CDC5 PUSH 4
0042CDC7 PUSH EAX
0042CDC8 CALL SuperPIM.0042CD5E**********這個(gè)CALL也是計(jì)算CALL,煩!不跟了!
0042CDCD MOV EAX, [ARG.1]
0042CDD0 ADD ESP, 18
0042CDD3 XOR EAX, [LOCAL.1]*************這里賦EAX的值38000002
0042CDD6 POP ESI
0042CDD7 LEAVE
0042CDD8 RETN
=========================================================================算法CALL(2)結(jié)束==================
0042CF34 POP ECX
0042CF35 POP ECX
0042CF36 PUSH 2B***************************常數(shù)2B入棧!
0042CF38 XOR EDX, EDX
0042CF3A POP ECX**************************把常數(shù)2B賦給ECX
0042CF3B DIV ECX**************************除,EAX/ECX=38000002/2B=014D6535,余數(shù)1B入EDX
0042CF3D MOV ECX, EDX*********************結(jié)果1B入ECX
0042CF3F ADD CL, 30***********************CL=CL+30=1B+30=4B(對(duì)應(yīng)的字符串是K)
0042CF42 CMP CL, 39***********************比較是不是數(shù)字9
0042CF45 MOV BYTE PTR SS:[EBP-14], CL*****保存字符串K
0042CF48 JLE SHORT SuperPIM.0042CF55******小于就跳走!
0042CF4A CMP CL, 41***********************比較是不是A
0042CF4D JGE SHORT SuperPIM.0042CF55******大于就跳走
0042CF4F ADD CL, 0F6
0042CF52 MOV BYTE PTR SS:[EBP-14], CL
0042CF55 CMP EBX, [ARG.3]*****************跳到這里!比較0和14
0042CF58 JGE SHORT SuperPIM.0042CF67******大于等于就跳走!
0042CF5A PUSH [LOCAL.5]
0042CF5D LEA ECX, [LOCAL.4]
0042CF60 CALL SuperPIM.00417EAF
0042CF65 JMP SHORT SuperPIM.0042CFA5******無(wú)條件跳
0042CF67 MOV EAX, EBX
0042CF69 CDQ
0042CF6A IDIV [ARG.3]
0042CF6D MOVSX ECX, CL
0042CF70 PUSH 2B
0042CF72 MOV ESI, EDX
0042CF74 MOVSX EAX, BYTE PTR DS:[ESI+EDI]
0042CF78 LEA EAX, DWORD PTR DS:[EAX+ECX-60]
0042CF7C CDQ
0042CF7D POP ECX
0042CF7E IDIV ECX
0042CF80 ADD DL, 30
0042CF83 CMP DL, 39
0042CF86 MOV BYTE PTR SS:[EBP-14], DL
0042CF89 JLE SHORT SuperPIM.0042CF96
0042CF8B CMP DL, 41
0042CF8E JGE SHORT SuperPIM.0042CF96
0042CF90 ADD DL, 0F6
0042CF93 MOV BYTE PTR SS:[EBP-14], DL
0042CF96 PUSH [LOCAL.5]
0042CF99 LEA ECX, [LOCAL.4]
0042CF9C PUSH ESI
0042CF9D CALL SuperPIM.0042CE4B
0042CFA2 MOV ESI, [LOCAL.8]
0042CFA5 MOV EDI, [LOCAL.4]***************上面跳到這里!
0042CFA8 INC EBX*************************EBX加1
0042CFA9 CMP EBX, [LOCAL.6]**************比較1和14
0042CFAC JL SuperPIM.0042CF1B***********小于就跳,循環(huán),序列號(hào)只有15位,這里循環(huán)20次,取完后又從第一位取出!
************************************循環(huán)結(jié)束后得到的值是:K3L2LPBDW1F2H4B8S0UY這就是我們要的注冊(cè)碼!
0042CFB2 MOV ECX, [ARG.1]
0042CFB5 LEA EAX, [LOCAL.4]
0042CFB8 PUSH EAX
0042CFB9 CALL SuperPIM.00401F36
0042CFBE LEA ECX, DWORD PTR DS:[EDI-10]
0042CFC1 CALL SuperPIM.00401B5D
0042CFC6 MOV ECX, [LOCAL.3]
0042CFC9 MOV EAX, [ARG.1]
0042CFCC POP EDI
0042CFCD POP ESI
0042CFCE POP EBX
0042CFCF MOV DWORD PTR FS:[0], ECX
0042CFD6 LEAVE
0042CFD7 RETN
寫這篇文章的目的是想說(shuō)明如何在OD下萬(wàn)能斷點(diǎn),算法過(guò)程太煩瑣,就不想多跟了!希望能對(duì)大家有點(diǎn)啟發(fā),如果覺(jué)得這篇
破文還行幫我頂一下吧!也是希望有更多的人能看到,對(duì)更多的人有益,我也是一只菜鳥,請(qǐng)大家多多指點(diǎn)!
相關(guān)文章

OllyICE入門教程 OllyICE使用實(shí)例教程初學(xué)必備
ollyice是Windows平臺(tái)下一款知名的反匯編工具軟件,目前已經(jīng)代替SoftICE成為當(dāng)今最為流行的調(diào)試解密工具之一,這里就為大家分享一下具體的使用方法,需要的朋友可以參考一2021-08-27- 加殼,脫殼,以前經(jīng)常聽(tīng)人講,但從未自己總結(jié)過(guò),今天自己來(lái)總結(jié)加殼,脫殼的原理以及如何加殼,脫殼2020-04-12
- 殼出于程序作者想對(duì)程序資源壓縮、注冊(cè)保護(hù)的目的,把殼分為壓縮殼和加密殼(強(qiáng)殼)兩種,這里就為大家分享一下2020-04-12
利用x64_dbg破解一個(gè)最簡(jiǎn)單的64位小程序圖文教程
網(wǎng)上對(duì)于這款軟件的介紹很少,只是說(shuō)能分析64位應(yīng)用,具體用法也找不到,不過(guò)我找到了它的一個(gè)教程,里面有一個(gè)最簡(jiǎn)單的64位應(yīng)用,但網(wǎng)上是用英文介紹的,對(duì)于一些英文不好2018-05-21
EXECryptor怎么脫殼?EXECryptor使用教程圖解(附下載地址)
execryptor是一種加密加殼軟件,那么EXECryptor怎么脫殼?下面小編就給大家?guī)?lái)EXECryptor使用教程,一起來(lái)看看吧2017-03-22- 電腦軟件如何加密加殼脫殼解析2014-07-08
- OllyDBG 版的發(fā)布版本是個(gè) ZIP 壓縮包,只要解壓到一個(gè)目錄下,運(yùn)行 OllyDBG.exe 就可以了2012-07-31
ollydbg破解教學(xué)之萬(wàn)能斷點(diǎn)篇
終于有一點(diǎn)時(shí)間總結(jié)一下OD破解的經(jīng)驗(yàn),有許多大俠們都認(rèn)為OD不能下萬(wàn)能斷點(diǎn),可是有些軟件的破解需要用到萬(wàn)能斷點(diǎn),以前一直沒(méi)有這方面的資料2012-07-31關(guān)于ASPack 2.12加殼軟件的脫殼方法[圖文]
其實(shí)ASPack 2.12是比較簡(jiǎn)單的東西,可以說(shuō),很大程度上,它可以對(duì)程序的大小進(jìn)行壓縮,方便發(fā)布2012-07-31



