破顧名思義就是暴力修改程序的代碼來(lái)達(dá)到破解的目的
當(dāng)然根據(jù)共享軟件的注冊(cè)方式我們可以對(duì)癥下藥
比如說(shuō)沒(méi)有注冊(cè)的軟件有功能限制、使用次數(shù)限制、使用日期限制等
我們就可以分別對(duì)待了!我們只需要解除這些限制自然就達(dá)到了破解的目的了!
暴力破解的一般流程
1、有殼者自然得先脫殼
2、試注冊(cè)看看有何提示,讓我們抓抓小尾巴
3、若有提示,用OD動(dòng)態(tài)調(diào)試器或者是W32靜態(tài)調(diào)試器查找錯(cuò)誤提示
4、來(lái)到錯(cuò)誤提示處分析代碼找關(guān)鍵CALL、關(guān)鍵跳!
5、修改代碼
6、復(fù)制保存!
如果沒(méi)有提示,我們可以使用很多斷點(diǎn)來(lái)完成這些操作
現(xiàn)今軟件的保護(hù)方式有
1、序列號(hào)保護(hù)方式(注冊(cè)碼=f(機(jī)器碼/序列號(hào)))
2、警告(NAG)窗口
3、時(shí)間限制/次數(shù)限制。。
4、菜單功能限制
5、Key File保護(hù)
6、CD-Check
7、只運(yùn)行一個(gè)實(shí)例
一些軟件通過(guò)把注冊(cè)碼保存在.ini文件、注冊(cè)表、.dat文件等等方式進(jìn)行注冊(cè)驗(yàn)證
常見(jiàn)斷點(diǎn)設(shè)置(后面帶"*" 的為常用的)
字符串
bp GetDlgItemTextA(W) ****
bp GetDlgItemInt
bp GetWindowTextA(W) ****
bp GetWindowWord
bmsg XXXX wm_gettext
對(duì)話(huà)框
bp MessageBeep
bp MessageBoxA(W) ****
bp MessageBoxExA(W)
bp DialogBoxParamA(W)
bp GreateWindowExA(W)
bp ShowWindow
bp UpdateWindow
bmsg XXXX wm_command
對(duì)于VB的程序用bp MessageBoxA是無(wú)法斷下來(lái)的,bp rtcMsgBox
注冊(cè)表相關(guān)
bp RegCreateKeyA(W)
bp RegDeleteKeyA(W)
bp RegQueryValueA(W)
bp RegCloseKey
bp RegOpenKeyA(W) ****
時(shí)間相關(guān)
bp GetLocalTime
bp GetFileTime
bp GetSystemtime
CD-ROM或磁盤(pán)相關(guān)
bp GetFileAttributesA(W)
bp GetFileSize
bp GetDriveType
bp GetLastError
bp ReadFile
bpio -h (CD-ROM端口地址) R
軟件狗
bpio -h 278R
bpio -h 378R
INI初始化文件相關(guān)
bp GetPrivateProfileStringA ****
bp GetPrivateProfileInt
bp WritePrivateProfileString
bp WritePrivateProfileInt
文件訪(fǎng)問(wèn)相關(guān)
bp ReadFile
bp WriteFile
bp CreateFileA ****
bp SetFilePointer
bp GetSystemDirectory
VB程序?qū)S脭帱c(diǎn):
bpx msvbvm60!rtcMsgBox bpx msvbvm60!__vbaStrCmp bpx msvbvm60!__vbaStrComp bpx msvbvm60!__vbaStrCompVar bpx msvbvm60!__vbaStrTextCmp bpx msvbvm60!__vbaFileOpen bpx msvbvm60!__vbaInputFile bpx msvbvm60!__vbaFileSeek bpx msvbvm60!__vbaWriteFile bpx msvbvm60!__vbaFileClose bpx msvbvm60!rtcFileAttributes bpx msvbvm60!rtcFileDateTime bpx msvbvm60!rtcFileLen bpx msvbvm60!rtcFileLength bpx msvbvm60!__vbaVarInt bpx msvbvm60!__vbaVarCmpGe bpx msvbvm60!__vbaVarCmpGt bpx msvbvm60!__vbaVarCmpLe bpx msvbvm60!__vbaVarCmpLt bpx msvbvm60!__vbaVarCmpNe bpx msvbvm60!__vbaVarTextCmpEq bpx msvbvm60!__vbaVarTextCmpGe bpx msvbvm60!__vbaVarTextCmpGt bpx msvbvm60!__vbaVarTextCmpLe bpx msvbvm60!__vbaVarTextCmpLt bpx msvbvm60!__vbaVarTextCmpNe bpx msvbvm60!__vbaVarTextTstEq bpx msvbvm60!__vbaVarTextTstGe bpx msvbvm60!__vbaVarTextTstGt bpx msvbvm60!__vbaVarTextTstLe bpx msvbvm60!__vbaVarTextTstLt bpx msvbvm60!__vbaVarTextTstNe bpx msvbvm60!__vbaVarTstEq bpx msvbvm60!__vbaVarTstGe bpx msvbvm60!__vbaVarTstGt bpx msvbvm60!__vbaVarTstLe bpx msvbvm60!__vbaVarTstLt bpx msvbvm60!__vbaVarTstNe 注意:VB程序仍然可以使用普通API函數(shù),只要函數(shù)“最終”CALL了這個(gè)函數(shù) 上面的斷點(diǎn)對(duì)應(yīng)VB6程序,如果是VB5程序則將msvbvm60改成msvbvm50即可
另外還有一類(lèi)軟件通過(guò)網(wǎng)絡(luò)驗(yàn)證、重啟驗(yàn)證來(lái)判斷程序是否注冊(cè)
當(dāng)然前者一般應(yīng)用于外掛程序上較多,一般是改網(wǎng)絡(luò)驗(yàn)證為本地驗(yàn)證達(dá)到欺騙遠(yuǎn)程網(wǎng)絡(luò)主機(jī)的目的達(dá)到通過(guò)驗(yàn)證!
后者也是很常見(jiàn)的,他一般把用戶(hù)輸入的注冊(cè)碼直接或者是通過(guò)加密運(yùn)算后得到的數(shù)值保存到文件、注冊(cè)表中,然后提示用戶(hù)重啟驗(yàn)證是否注冊(cè),當(dāng)然當(dāng)你重新打開(kāi)程序的時(shí)候他會(huì)從文件或者是注冊(cè)表中讀取用戶(hù)輸入的注冊(cè)碼,再通過(guò)程序注冊(cè)算法來(lái)進(jìn)行比照,正確者當(dāng)然就成為正版,錯(cuò)誤的自然就88了,另外以重啟驗(yàn)證的軟件一般是把注冊(cè)碼保存在注冊(cè)表或文件中!
下面來(lái)說(shuō)說(shuō)解決這類(lèi)軟件的一般方法!
重啟驗(yàn)證類(lèi)軟件大致的驗(yàn)證過(guò)程。
1、運(yùn)行軟件輸入注冊(cè)信息,點(diǎn)注冊(cè)后。一般軟件會(huì)提示你重新運(yùn)行軟件,以便驗(yàn)證注冊(cè)信息的正確性(如FlashGet);
也有的只在你輸入正確的注冊(cè)信息時(shí)才有這個(gè)提示,不然會(huì)告訴你輸入的注冊(cè)信息有問(wèn)題(此軟件就屬這類(lèi))
2、要破解這種軟件,首先是判斷一下她把注冊(cè)信息存在哪里(因?yàn)樗貑Ⅱ?yàn)證時(shí)要用)。大致有兩種存放方式,第一種是放在注冊(cè)表里;第二種是放在文件里。(我們可以在輸入注冊(cè)信息,點(diǎn)擊確定前,利用監(jiān)視類(lèi)軟件來(lái)查看一下,如FileMon和RegShot等)
3、知道她的注冊(cè)信息的存放地點(diǎn)后,就可以選則相應(yīng)的API斷點(diǎn),來(lái)調(diào)試了
訪(fǎng)問(wèn)注冊(cè)表類(lèi)常用API
bp RegOpenKeyA 打開(kāi)一個(gè)現(xiàn)有的注冊(cè)表項(xiàng) ****
bp RegOpenKeyExA 打開(kāi)一個(gè)現(xiàn)有的注冊(cè)表項(xiàng) ****
bp RegCreateKeyA 在指定的項(xiàng)下創(chuàng)建或打開(kāi)一個(gè)項(xiàng) bp RegCreateKeyExA 在指定項(xiàng)下創(chuàng)建新項(xiàng)的更復(fù)雜的方式 bp RegDeleteKeyA 刪除現(xiàn)有項(xiàng)下方一個(gè)指定的子項(xiàng) bp RegDeleteValueA 刪除指定項(xiàng)下方的一個(gè)值 bp RegQueryValueA 獲取一個(gè)項(xiàng)的設(shè)置值 bp RegQueryValueExA 獲取一個(gè)項(xiàng)的設(shè)置值 bp RegSetValueA 設(shè)置指定項(xiàng)或子項(xiàng)的值
bp RegSetValueExA 設(shè)置指定項(xiàng)的值 bp RegCloseKey 關(guān)閉系統(tǒng)注冊(cè)表中的一個(gè)項(xiàng)(或鍵)
訪(fǎng)問(wèn)文件類(lèi)常用API
bp CreateFileA 打開(kāi)和創(chuàng)建文件、管道、郵槽、通信服務(wù)、設(shè)備以及控制臺(tái) ****
bp OpenFile 這個(gè)函數(shù)能執(zhí)行大量不同的文件操作 bp ReadFile 從文件中讀出數(shù)據(jù)
bp ReadFileEx 與ReadFile相似,只是它只能用于異步讀操作,并包含了一個(gè)完整的回調(diào)
======================================================
常用斷點(diǎn)(OD中)
攔截窗口:
bp CreateWindow 創(chuàng)建窗口 bp CreateWindowEx(A) 創(chuàng)建窗口 bp ShowWindow 顯示窗口 bp UpdateWindow 更新窗口 bp GetWindowText(A) 獲取窗口文本 攔截消息框:
bp MessageBox(A) 創(chuàng)建消息框 bp MessageBoxExA 創(chuàng)建消息框 bp MessageBoxIndirect(A) 創(chuàng)建定制消息框 攔截警告聲:
bp MessageBeep 發(fā)出系統(tǒng)警告聲(如果沒(méi)有聲卡就直接驅(qū)動(dòng)系統(tǒng)喇叭發(fā)聲) 攔截對(duì)話(huà)框:
bp DialogBox 創(chuàng)建模態(tài)對(duì)話(huà)框 bp DialogBoxParam(A) 創(chuàng)建模態(tài)對(duì)話(huà)框 bp DialogBoxIndirect 創(chuàng)建模態(tài)對(duì)話(huà)框 bp DialogBoxIndirectParam(A) 創(chuàng)建模態(tài)對(duì)話(huà)框 bp CreateDialog 創(chuàng)建非模態(tài)對(duì)話(huà)框 bp CreateDialogParam(A) 創(chuàng)建非模態(tài)對(duì)話(huà)框 bp CreateDialogIndirect 創(chuàng)建非模態(tài)對(duì)話(huà)框 bp CreateDialogIndirectParam(A) 創(chuàng)建非模態(tài)對(duì)話(huà)框 bp GetDlgItemText(A) 獲取對(duì)話(huà)框文本 bp GetDlgItemInt 獲取對(duì)話(huà)框整數(shù)值 攔截剪貼板:
bp GetClipboardData 獲取剪貼板數(shù)據(jù) 攔截注冊(cè)表:
bp RegOpenKey(A) 打開(kāi)子健 bp RegOpenKeyEx 打開(kāi)子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
bp RegSetValue(A) 設(shè)置子健 bp RegSetValueEx(A) 設(shè)置子健
功能限制攔截?cái)帱c(diǎn):
bp EnableMenuItem 禁止或允許菜單項(xiàng) bp EnableWindow 禁止或允許窗口 攔截時(shí)間:
bp GetLocalTime 獲取本地時(shí)間 bp GetSystemTime 獲取系統(tǒng)時(shí)間 bp GetFileTime 獲取文件時(shí)間 bp GetTickCount 獲得自系統(tǒng)成功啟動(dòng)以來(lái)所經(jīng)歷的毫秒數(shù) bp GetCurrentTime 獲取當(dāng)前時(shí)間(16位) bp SetTimer 創(chuàng)建定時(shí)器 bp TimerProc 定時(shí)器超時(shí)回調(diào)函數(shù)
攔截文件: bp CreateFileA 創(chuàng)建或打開(kāi)文件 (32位) bp OpenFile 打開(kāi)文件 (32位) bp ReadFile 讀文件 (32位) bp WriteFile 寫(xiě)文件 (32位) 攔截驅(qū)動(dòng)器:
bp GetDriveTypeA 獲取磁盤(pán)驅(qū)動(dòng)器類(lèi)型 bp GetLogicalDrives 獲取邏輯驅(qū)動(dòng)器符號(hào) bp GetLogicalDriveStringsA 獲取當(dāng)前所有邏輯驅(qū)動(dòng)器的根驅(qū)動(dòng)器路徑
★★VB程序?qū)S脭帱c(diǎn)★★
bp __vbaStrCmp 比較字符串是否相等 bp __vbaStrComp 比較字符串是否相等 bp __vbaVarTstNe 比較變量是否不相等 bp __vbaVarTstEq 比較變量是否相等 bp __vbaStrCopy 復(fù)制字符串 bp __vbaStrMove 移動(dòng)字符串 bp MultiByteToWideChar ANSI字符串轉(zhuǎn)換成Unicode字符串 bp WideCharToMultiByte Unicode字符串轉(zhuǎn)換成ANSI字符串
|