您的位置:首页 > 其它

软件汉化 OllyDBG 入门之四--破解常用断点设

2013-06-12 10:45 393 查看
http://ctfysj.blog.hexun.com.tw/53085851_d.html

bpx hmemcpy 破解萬能斷點,攔截內存拷貝動作bpx Lockmytask 當你用其它斷點都無效時可以試一下,這個斷點攔截按鍵的動作bmsg handle wm_gettext 攔截註冊碼(handle為對應窗口的句柄)bmsg handle wm_command 攔截OK按鈕(handle為對應窗口的句柄)攔截窗口:bpx CreateWindow 創建窗口bpx CreateWindowEx(A) 創建窗口bpx ShowWindow 顯示窗口bpx UpdateWindow 更新窗口bpx
GetWindowText(A) 獲取窗口文本攔截消息框:bpx MessageBox(A) 創建消息框bpx MessageBoxExA 創建消息框bpx MessageBoxIndirect(A) 創建定制消息框攔截警告聲:bpx MessageBeep 發出系統警告聲(如果沒有聲卡就直接驅動系統喇叭發聲)攔截對話框:bpx DialogBox 創建模態對話框bpx DialogBoxParam(A) 創建模態對話框bpx DialogBoxIndirect 創建模態對話框bpx DialogBoxIndirectParam(A)
創建模態對話框bpx CreateDialog 創建非模態對話框bpx CreateDialogParam(A) 創建非模態對話框bpx CreateDialogIndirect 創建非模態對話框bpx CreateDialogIndirectParam(A) 創建非模態對話框bpx GetDlgItemText(A) 獲取對話框文本bpx GetDlgItemInt 獲取對話框整數值攔截剪貼板:bpx GetClipboardData 獲取剪貼板數據攔截註冊表:bpx RegOpenKey(A) 打開子健
( 例:bpx RegOpenKey(A) if *(esp+8)=='****' ) bpx RegOpenKeyEx 打開子健 ( 例:bpx RegOpenKeyEx if *(esp+8)=='****' ) bpx RegQueryValue(A) 查找子健 ( 例:bpx RegQueryValue(A) if *(esp+8)=='****' ) bpx RegQueryValueEx 查找子健 ( 例:bpx RegQueryValueEx if *(esp+8)=='****' ) bpx
RegSetValue(A) 設置子健 ( 例:bpx RegSetValue(A) if *(esp+8)=='****' ) bpx RegSetValueEx(A) 設置子健 ( 例:bpx RegSetValueEx(A) if *(esp+8)=='****' )“****”為指定子鍵名的前4個字符,如子鍵為“Regcode”,則“****”= “Regc”功能限制攔截斷點:bpx EnableMenuItem 禁止或允許菜單項bpx EnableWindow 禁止或允許窗口bmsg hMenu
wm_command 攔截菜單按鍵事件,其中hMenu為菜單句柄bpx K32Thk1632Prolog 配合bmsg hMenu wm_command使用,可以通過這個斷點進入菜單處理程序應用示例:CALL [KERNEL32!K32Thk1632Prolog]CALL [......] <-- 由此跟蹤進入菜單處理程序CALL [KERNEL32!K32Thk1632Epilog]攔截時間:bpx GetLocalTime 獲取本地時間bpx GetSystemTime 獲取系統時間bpx GetFileTime
獲取文件時間bpx GetTickCount 獲得自系統成功啟動以來所經歷的毫秒數bpx GetCurrentTime 獲取當前時間(16位)bpx SetTimer 創建定時器bpx TimerProc 定時器超時回調函數攔截文件:bpx CreateFileA 創建或打開文件 (32位) bpx OpenFile 打開文件 (32位) bpx ReadFile 讀文件 (32位) bpx WriteFile 寫文件 (32位) bpx _lcreat 創建或打開文件 (16位) bpx _lopen 打開文件
(16位) bpx _lread 讀文件 (16位) bpx _lwrite 寫文件 (16位) bpx _hread 讀文件 (16位) bpx _hwrite 寫文件 (16位)攔截驅動器:bpx GetDrivetype(A) 獲取磁盤驅動器類型bpx GetLogicalDrives 獲取邏輯驅動器符號bpx GetLogicalDriveStringsA 獲取當前所有邏輯驅動器的根驅動器路徑攔截狗:bpio -h 378(或278、3BC) R 378、278、3BC是並行打印端口bpio -h
3F8(或2F8、3E8、2E8) R 3F8、2F8、3E8、2E8是串行端口VB程序專用斷點:bpx msvbvm50!__vbaStrCmp 比較字符串是否相等 bpx msvbvm50!__vbaStrComp 比較字符串是否相等 bpx msvbvm50!__vbaVarTstNe 比較變量是否不相等 bpx msvbvm50!__vbaVarTstEq 比較變量是否相等 bpx msvbvm50!__vbaStrCopy 復制字符串 bpx msvbvm50!__vbaStrMove 移動字符串
bpx MultiByteToWideChar ANSI字符串轉換成Unicode字符串 bpx WideCharToMultiByte Unicode字符串轉換成ANSI字符串上面的斷點對應VB5程序,如果是VB6程序則將msvbvm50改成msvbvm60即可VB程序的破解記住VB常用的一些函數:MultiByteToWideChar 將ANSI字符串轉換成UNICODE字符WideCHatToMultiByte  將UNICODE字符轉換成ANSI字符rtcT8ValFromBstr    把字符轉換成浮點數  vbaStrCmp       
比較字符串(常用斷點)vbaStrComp       字符串比較(常用斷點)vbaStrCopy       復制字符串StrConv         轉換字符串vbaStrMove       移動字符串__vbaVarCat 連接字符串rtcMidCharVar 在字符串中取字符或者字符串!__vbaLenBstr 取字符串的長度vbaVarTstNe      變量比較vbaVarTstEq      變量比較rtcMsgBox       顯示對話框VarBstrCmp       比較字符串VarCyCmp       
比較字符串   用OD載入脫殼後的程序,在命令行輸入:bpx hmemcpy,然後回車,會彈出程序運行調用的所有的函數,在每個函數上設置好斷點!說明:我破VB程序喜歡用這個斷點設置方法,通過一步步跟蹤,基本可以把握程序保護的思路,所以我破VB程序基本用這個斷點,當然你可以用其它的斷點,只要能找到關鍵,任何斷點都是有意義的。關於VB的程序,註冊沒有提示的二個辦法:第一(提示錯誤):用GetVBRes來替換裏面的提示串,一般是以‘111111’,‘222222’之類的替換因為:VB,用的字來存放提示還有加了點東東,我們用的工具一般是字節分析。換成‘22222’之類的就是字節了,用靜態分析,就有你該的串了。GetVBRes(網上很多,自己下吧)第二(沒有提示):用vbde這個工具(不知道,有沒有用過DEDE,是一樣思路),主要是找出破解的按鈕窗口的位置,來進行跟蹤。先給出修改能正確反編譯VB程序的W32DASM的地址:======================
offsets 0x16B6C-0x16B6D 修改機器碼為: 98 F4 ====================== VB程序的跟蹤斷點: MultiByteToWideChar, rtcR8ValFromBstr, WideCharToMultiByte, __vbaStrCmp __vbaStrComp __vbaStrCopy __vbaStrMove __vbaVarTstNe rtcBeep rtcGetPresentDate (時間API) rtcMsgBox ========= 時間限制斷點:
CompareFileTime GetLocalTime GetSystemTime GetTimeZoneInformation msvcrt.diffTime() msvcrt.Time() ================VB斷點查找方法1.VB6.0編寫,OD載入程序調出註冊窗口,alt+e調出可執行模塊窗口找到X:\WINDOWS\system32\MSVBVM60.DLL雙擊,在ctrl+n調出窗口找到,名稱XXXXXXE區段=ENGINE 導出__vbaVarMove雙擊來到下面地址(可以直接在命令行
bp __vbaVarMove),回到程序註冊窗口點註冊被攔斷在剛才下斷的地址,斷後在ctrl+F9,F8回 2.OD載入程序,命令行下斷點:bp rtcMsgBox堆棧友好提示確定註冊失敗按鈕返回。接著向上找出點註冊按鈕執行的代碼第一句,可以嗎?當然行,根據我們知道程序員寫一個事件執行的代碼是如這種,各種語言都差不多。 3.OD載入程序,命令行下斷點:bp rtcMsgBox任意填入偽註冊碼 9999999999999999999,確定後中斷堆棧友好提示確定註冊失敗按鈕返回。W32Dasm反匯編程序,Shiht+F124.VB中的messagebox是一個消息框,匯編中用rtcMsgBox下斷點.用olldbg載入程序,Alt+e,在可執行文件模塊中找到Msvbvm60.dll,雙擊它,在代碼窗口點右鍵-搜索-當前模塊中的名稱中的rtcMsgBox函數,雙擊它,在6A362F29
55 PUSH EBP這一句雙擊下斷點,關掉多余的窗口,只留下cpu調試主窗口,F9運行程序,點?號按鈕,隨便輸入987654321後,回車後立即中斷,然後Ctrt+f9執行到返回地址,因為這是msvbvm60的領空,我們要回到程序領空.秘密記事本彈出message錯誤提示信息,點確定,向上看,再按F8就回到5.為Microsoft Visual Basic 6.0,先用SmartCheck找到程序比較註冊碼點6.用vb常用比較斷點 vbastrcmpvbastrcompvbavartsteq在od中設斷點找註冊碼7.用Od載入程序,運行,填入上面的註冊碼和順序號。在Od中下斷點,Alt+E,雙擊Msvbvm60運行庫,右鍵-搜索當前模塊中的名稱,找到Vbastrcmp,雙擊下斷點。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: