Crack学习笔记[一]

自校验下断:bp rtcMsgBoxA /bpx    (VB)
VB去校验专用断点:bp rtcFileLen /bpx
文件大小自校验:看原来的大小,转为16进制,如为12E00,有个cmp eax,12e00

bpx hmemcpy                                  ;破解万能断点,拦截内存拷贝动作(注意:Win9x专用断点)
bpx Lockmytask                               ;当你用其它断点都无效时可以试一下,这个断点拦截按键的动作(Win9x专用)

实在找不到断点可以试下面的方法:

bmsg handle wm_gettext               ;拦截注册码(handle为对应窗口的句柄)
bmsg handle wm_command            ;拦截OK按钮(handle为对应窗口的句柄)

拦截窗口:

bpx CreateWindow                            ;创建窗口
bpx CreateWindowEx(A/W)              ;创建窗口
bpx ShowWindow                              ;显示窗口
bpx UpdateWindow                           ;更新窗口
bpx GetWindowText(A/W)                ;获取窗口文本

拦截消息框:

bpx MessageBox(A/W)                       ;创建消息框
bpx MessageBoxExA(W)                    ;创建消息框
bpx MessageBoxIndirect(A/W)          ;创建定制消息框

拦截警告声:

bpx MessageBeep                               ;发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

拦截对话框:

bpx DialogBox                                        ;创建模态对话框
bpx DialogBoxParam(A/W)                     ;创建模态对话框
bpx DialogBoxIndirect                            ;创建模态对话框
bpx DialogBoxIndirectParam(A/W)        ;创建模态对话框
bpx CreateDialog                                   ;创建非模态对话框
bpx CreateDialogParam(A/W)                ;创建非模态对话框
bpx CreateDialogIndirect                       ;创建非模态对话框
bpx CreateDialogIndirectParam(A/W)    ;创建非模态对话框
bpx GetDlgItemText(A/W)                      ;获取对话框文本
bpx GetDlgItemInt                                   ;获取对话框整数值

拦截剪贴板:

bpx GetClipboardData                             ;获取剪贴板数据

拦截注册表:

bpx RegOpenKey(A/W)                          ;打开子健 ( 例:bpx RegOpenKey(A) if *(esp->8)==’****’ )
bpx RegOpenKeyExA(W)                       ;打开子健 ( 例:bpx RegOpenKeyEx if *(esp->8)==’****’ )
bpx RegQueryValue(A/W)                      ;查找子健 ( 例:bpx RegQueryValue(A) if *(esp->8)==’****’ )
bpx RegQueryValueEx(A/W)                  ;查找子健 ( 例:bpx RegQueryValueEx if *(esp->8)==’****’ )
bpx RegSetValue(A/W)                           ;设置子健 ( 例:bpx RegSetValue(A) if *(esp->8)==’****’ )
bpx RegSetValueEx(A/W)                       ;设置子健 ( 例: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(W)                                   ;创建或打开文件 (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位)

bp CetPrivateProfileStringA                      ini验证

拦截驱动器:

bpx GetDrivetype(A/W)                               ;获取磁盘驱动器类型
bpx GetLogicalDrives                                    ;获取逻辑驱动器符号
bpx GetLogicalDriveStringsA(W)                  ;获取当前所有逻辑驱动器的根驱动器路径

拦截狗:

bpio -h 378(或278、3BC) R                          ;378、278、3BC是并行打印端口
bpio -h 3F8(或2F8、3E8、2E8) R                 ;3F8、2F8、3E8、2E8是串行端口

VB程序专用断点:

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函数,只要函数“最终”CALL了这个函数
上面的断点对应VB6程序,如果是VB5程序则将msvbvm60改成msvbvm50即可

找万能断点方法:

1.用OD载入目标程序Crackme(见上面附件)
2.Ctrl+N打开当前模块中的名称,或鼠标右键–>搜索–>当前模块中的名称;
选中USER32.DLL中的函数TranslateMessage。
3.在此函数上按鼠标右键–>”在导入中条件记录断点”,在”条件”下面的框中
添入MSG==201(不工作就设为202),”表达”添MSG,选中”条件满足时暂停
程序”,点”确定”。
4.F9运行程序,填入用户名,按Tab键跳到注册码框(别用鼠标点,记住用Tab键),填入假注册 麻,点”OK”,OD将停在所下条件断点上
5.Alt+M打开内存镜像,鼠标右键–>搜索(或Ctrl+B),在弹出窗口中ASCII栏中
输入上面所填”假注册码”,点”确定”搜索。
6.在找到的假注册码位置下”内存访问断点”。
7.F9,断在那儿的地址就是你机器的万能断点